View Single Post
Posts: 986 | Thanked: 1,526 times | Joined on Jul 2010
#170
heres the python script. you have to install some stuff.

apt-get install python-dbus python-pyside.qtcore


name it dbusbtn.py. copy it to MyDocs and run it like this:

Code:
user:~$ python /home/user/MyDocs/dbusbtn.py
button: previous-song
  ignored: previous-song
  ignored: previous-song
  ignored: previous-song
  ignored: previous-song
  ignored: previous-song
  ignored: previous-song
  ignored: previous-song
button: next-song
button: play-cd
button: stop-cd

Code:
#!/usr/bin/python
#N9 Button Monitor
#Copyright 2012 Elliot Wolk
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.

import sys
import time
import signal
from traceback import print_exc
 
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from PySide.QtCore import QCoreApplication

signal.signal(signal.SIGINT, signal.SIG_DFL)
dbus_service="org.freedesktop.Hal"
dbus_path="/org/freedesktop/Hal/devices/computer_logicaldev_input_0"
dbus_interface="org.freedesktop.Hal.Device"
dbus_member="Condition"

## for some horrible reason, i get 8 clicks sometimes
## this buffer ignores repeated clicks within a certain time
## set it to -1 to never ignore
repeat_buffer_millis=800

last_button_click_millis = dict()

def button_clicked(button, handler):
  now_millis = int(round(time.time() * 1000))
  if button in last_button_click_millis:
    then_millis = last_button_click_millis[button]
    if now_millis - then_millis < repeat_buffer_millis:
      print >> sys.stderr, "  ignored: " + button
      return

  last_button_click_millis[button] = now_millis
  handler(button)

def defaultHandler(button):
  print >> sys.stderr, "button: " + button

def connectButtonDbus(handler=defaultHandler):
  dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
  bus = dbus.SystemBus()
  try:
    obj = bus.get_object(dbus_service, dbus_path)
    iface = dbus.Interface(obj, dbus_interface)
  except dbus.DBusException:
    print_exc()
    sys.exit(1)
 
  iface.connect_to_signal(dbus_member,
    lambda cond, arg: button_clicked(arg, handler))

if __name__ == '__main__':
  app = QCoreApplication([])
  connectButtonDbus()
  app.exec_()
__________________
~ teleshoes ~

Last edited by wolke; 2013-01-06 at 18:46.
 

The Following User Says Thank You to wolke For This Useful Post: