6

我正在尝试在 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。

4

1 回答 1

5

你真的看过这个问题吗?无法让 dbus 信号侦听器在 C 中使用 gnome 多媒体键工作

提问者说这段代码有效:

#!/usr/bin/env python
"""Printing out gnome multi media keys via dbus-python.
"""
import gobject
import dbus
import dbus.service
import dbus.mainloop.glib


def on_mediakey(comes_from, what):
    """ gets called when multimedia keys are pressed down.
    """
    print ('comes from:%s  what:%s') % (comes_from, what)
    if what in ['Stop','Play','Next','Previous']:
        print ('Got a multimedia key!')
    else:
        print ('Got a multimedia key...')

# set up the glib main loop.
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.Bus(dbus.Bus.TYPE_SESSION)
bus_object = bus.get_object('org.gnome.SettingsDaemon', 
                            '/org/gnome/SettingsDaemon/MediaKeys')

# this is what gives us the multi media keys.
dbus_interface='org.gnome.SettingsDaemon.MediaKeys'
bus_object.GrabMediaPlayerKeys("MyMultimediaThingy", 0, 
                               dbus_interface=dbus_interface)

# connect_to_signal registers our callback function.
bus_object.connect_to_signal('MediaPlayerKeyPressed', 
                             on_mediakey)

# and we start the main loop.
mainloop = gobject.MainLoop()
mainloop.run()

更新

It seems that your problem is with your Gnome distribution, as someone else had encountered previously in this bug report. So probably you should upgrade your distribution.

于 2013-10-01T04:20:16.737 回答