[英]How do you listen for Mediakey events under gnome 3 using python?
我正在嘗試在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服務的原因,但卻發現我的桌面缺少它。
我應該清楚,MediaKeys服務不存在。 我不能事件連接到服務並創建代理,因為它不存在。 我想知道的是,我是否錯過了安裝,或者是否在Gnome 3更新中刪除了此服務? 如果刪除了,那么我如何在這個新環境中監聽媒體密鑰? 我正在運行Gnome 3.8.2。
對不起應該首先提到這一點。 有一天,我會完善我的問題: - }。 我正在運行Gentoo。
你真的看到過這個問題嗎? 使用gnome多媒體鍵無法讓dbus信號監聽器在C中工作
提問者說這段代碼有效:
#!/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()
更新 :
看來你的問題與你的Gnome發行版一樣,正如其他人之前在這個錯誤報告中遇到的那樣。 所以你可能應該升級你的發行版。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.