deadbeef dbus plugin
Как бы вот эту вот херню перепейсать на Цэ (это полбеды) да засунуть плагином в сам deadbeef (а это четвертьбеды, разглядывание плагина gtkui кагбе пояснило что нет никакой проблемы плагин гонять в отдельном треде с собственным евентлупом. И передавать в центр сообщения).
#!/usr/bin/env python
# coding: utf-8
import os
import dbus
import gobject
import dbus.service
import dbus.mainloop.glib
from subprocess import Popen, PIPE
VERBOSE = False
def keypress(send, key):
if VERBOSE: print ('comes from:%s key:%s') % (send, key)
if Popen(['pgrep', 'deadbeef'], stdout=PIPE).communicate()[0] == '':
os._exit(1)
elif key in ['Stop','Play','Next','Pause']:
Popen('deadbeef --%s 2>/dev/null &' % key.lower(), shell=True)
elif key == "Previous":
Popen('deadbeef --prev 2>/dev/null &', shell=True)
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')
dbus_interface='org.gnome.SettingsDaemon.MediaKeys'
bus_object.GrabMediaPlayerKeys("KeySender", 0,
dbus_interface=dbus_interface)
bus_object.connect_to_signal('MediaPlayerKeyPressed', keypress)
mainloop = gobject.MainLoop()
mainloop.run()
IMHO
Re: IMHO
Однако, события XF86AudioPlay XF86AudioPrev XF86AudioNext могут быть обработаны только одним процессом. Поэтому гномосеки справедливо решили, что этим процессом должна быть gnome-session затем орущая по дбусу to whom it may concern.