【发布时间】:2013-10-07 19:16:46
【问题描述】:
我正在尝试在 Gnome 3 (Gnome Shell) 下侦听 MediaKey 事件。我找到的所有示例都是指使用 DBus 连接到 org.gnome.SettingsDaemon.MediaKeys。我的平台上似乎不存在此服务。
我正在尝试通过 GObject-Introspection 使用 Python 来执行此操作。例子说做这样的事情
from gi.reposiotry import Gio
connection = Gio.bus_get_sync(Gio.BusType.SESSION, None)
proxy = Gio.DBusProxy.new_sync(connection, 0, None, 'org.gnome.SettingsDaemon', '/org/gnome/SettingsDaemon/MediaKeys', 'org.gnome.SettingsDaemon.MediaKeys', None)
不出所料,这失败了。我是否缺少提供此服务的安装,还是必须以其他方式执行此操作?
更新
这是一个媒体键监听器,无论哪个窗口有焦点,它都会监听键事件。它适用于甚至没有自己的 GUI 并且是桌面范围的应用程序。这就是为什么我尝试了 Mediakeys DBus 服务,却发现我的桌面上没有它。
更新 2
我应该清楚,MediaKeys 服务不存在。我无法连接到服务并创建代理,因为它不存在。我想知道的是,我错过了安装,还是在 Gnome 3 更新之一中删除了此服务?如果它被删除,那么我如何在这个新环境中收听媒体密钥?我正在运行 Gnome 3.8.2。
更新 3
很抱歉应该首先提到这一点。有一天我会完善我的问题:-}。我正在运行 Gentoo。
【问题讨论】:
-
我不确定你在哪里获得事件(拦截或直接),但经典的 connect("key-press-event", myfunc) 不会使用 event.key 向 myfunc 发送事件= ...?
-
对不起,我不确定我明白你在说什么。我想要知道何时按下任何媒体键,无论哪个窗口具有焦点,或者我根本没有打开任何窗口,只是桌面。
-
@JamesHurford 您能否确认系统中是否存在媒体密钥 dbus 服务文件?你可以在
/usr/share/dbus-1/services/下搜索。 -
在基于 Debian 的系统上,
gnome-settings-daemon包提供了这个功能并且应该被安装。apt-get install gnome-settings-daemon。您的示例代码有几个拼写错误,例如应该是/org/gnome...,而不是org/gnome...。您可以使用d-feet应用程序来浏览 dbus 层次结构。 -
我安装了 gnome-settings-daemon。它是 3.8.4 版本。我找不到该服务的 dbus 服务文件。我已经为此搜索了整个系统。是的,有一个错字,但这只是问题,而不是我的代码。是的,我确实使用了 d-feet,这就是我发现该服务甚至没有运行的方式。谢谢
标签: python gentoo gnome-shell