从 linux 中的 acpi 事件执行 PyQt 应用程序

Posted

技术标签:

【中文标题】从 linux 中的 acpi 事件执行 PyQt 应用程序【英文标题】:Execute a PyQt app from an acpi event in linux 【发布时间】:2010-06-11 22:35:52 【问题描述】:

我想使用 PyQt 应用程序在 linux 下触发一些 acpi 事件时显示图像。

我已经为事件设置了配置,并且在触发事件时执行了 python 脚本,但是当程序到达创建 QApplication 时

app = QApplication(sys.argv)

它没有错误地停止。 我尝试设置与当前用户相同的 DISPLAY 和 PATH 环境变量,但它不起作用。

这是我的活动文件:

event=sony/hotkey SNC 00000001 00000011
action=/etc/acpi/vaio-tools/brightness/sonybright.sh up 2>&1>/tmp/vaio-tools_brightness.log

我试图在 /tmp/vaio-tools_brightness.log 中找到一些错误,但它在代码中创建 QApp 后没有记录任何内容。

有什么提示吗??

【问题讨论】:

【参考方案1】:

您的应用程序由无权访问您用户的 X 显示器的 root 运行。

要么将 $XAUTHORITY 设置为您的用户使用的 X 授权文件的路径,要么使用类似的东西(未经测试):

su your_user -l -c "xauth extract - $DISPLAY" | xauth merge -

请参阅 xauthXsecurity 的手册页了解更多信息。

更好的解决方案是让 ACPI 事件通过 DBus 发送消息并在用户会话中运行您的应用程序以监听该消息。

【讨论】:

谢谢,我找到了这个页面 (thinkwiki.org/wiki/How_to_configure_acpid) 用于 acpid 配置,并且有解决方案:使用 xhost 添加 localhost:root 并导出 DISPLAY 变量。但我会寻找您对使用 DBus 的建议

以上是关于从 linux 中的 acpi 事件执行 PyQt 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Pyside / Pyqt 从窗口打开新窗口(事件循环已在运行)

pyqt4 和 pyserial

Linux启动时发生acpi错误

使用修饰键在 pyqt4 中拖放

Qt(PyQt)事件循环中的xmlrpc?

为啥 PyQt 中的 keyPress 事件对 Enter 键不起作用?