从 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 -
请参阅 xauth 和 Xsecurity 的手册页了解更多信息。
更好的解决方案是让 ACPI 事件通过 DBus 发送消息并在用户会话中运行您的应用程序以监听该消息。
【讨论】:
谢谢,我找到了这个页面 (thinkwiki.org/wiki/How_to_configure_acpid) 用于 acpid 配置,并且有解决方案:使用 xhost 添加 localhost:root 并导出 DISPLAY 变量。但我会寻找您对使用 DBus 的建议以上是关于从 linux 中的 acpi 事件执行 PyQt 应用程序的主要内容,如果未能解决你的问题,请参考以下文章