簡體   English   中英

你如何使用python在gnome 3下聽Mediakey事件?

[英]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)

毫不奇怪,這失敗了。 我錯過了提供此服務的安裝,還是我必須以另一種方式執行此操作?

UPDATE

這適用於媒體鍵偵聽器,無論哪個窗口具有焦點,它都會偵聽鍵事件。 它適用於甚至沒有自己的GUI的應用程序,並且是桌面范圍的。 這就是我嘗試使用Mediakeys DBus服務的原因,但卻發現我的桌面缺少它。

更新2

我應該清楚,MediaKeys服務不存在。 我不能事件連接到服務並創建代理,因為它不存在。 我想知道的是,我是否錯過了安裝,或者是否在Gnome 3更新中刪除了此服務? 如果刪除了,那么我如何在這個新環境中監聽媒體密鑰? 我正在運行Gnome 3.8.2。

更新3

對不起應該首先提到這一點。 有一天,我會完善我的問題: - }。 我正在運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM