2012-10-05 33 views
1

我想要做的是讓腳本在後臺運行,當我按下組合鍵(例如Fn + w)時,會執行另一個腳本。我如何檢測從Linux中的背景在python中的組合鍵?

如果在python中這很難做,我可以在另一箇中做,或者如果有人知道另一種方法來做到這一點。

我使用Ubuntu 11.10和XFCE。

+0

就像一個鍵盤記錄? [Evdev.py](http://svn.navi.cx/misc/trunk/python/evdev/evdev.py)它的大部分鍵都映射出來了。還要檢查系統上/ dev/input/event *的內容。 –

+0

謝謝,生病看我能否得到那份工作。 – user1319341

+0

真的嗎?還是你想創建一個惡意軟件或什麼? :D我偷看了我的學校網絡,密碼是1234!大聲笑 – Antoni4040

回答

0

存在一個名爲python-xlib的python庫。你能趕上鍵,做你的系統 http://python-xlib.sourceforge.net/

這裏有一個例子代碼的東西,一個服務器接收鍵碼在網絡上,然後按下它:

import Xlib.display 
import Xlib.X 
import Xlib.XK 
import Xlib.protocol.event 
import Xlib.ext.xtest 
import socket, sys 


s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
keycode = None 
try: 
     s.bind(("", 49999)) 
     i=0 
     display = Xlib.display.Display() 

     while True: 
       daten, addr = s.recvfrom(1024) 
       if (daten != 'ende'): 
         keycode = daten 
       if keycode == '111' or keycode == '116': 
         print '%d up/down' % i 
         Xlib.ext.xtest.fake_input(display, Xlib.X.KeyPress, int(keycode)) 
         display.sync() 
       if keycode == '117': 
         # A 
         Xlib.ext.xtest.fake_input(display, Xlib.X.KeyPress, int(
keycode)) 
         display.sync() 
       if keycode == '118': 
         # Y 
         Xlib.ext.xtest.fake_input(display, Xlib.X.KeyPress, int(keycode)) 
         display.sync() 
       if keycode == '119': 
         # SPACE 
         Xlib.ext.xtest.fake_input(display, Xlib.X.KeyPress, int(keycode)) 
         display.sync() 
       if daten == 'ende': 
         if keycode != None: 
           Xlib.ext.xtest.fake_input(display, Xlib.X.KeyRelease, int(keycode)) 
           keycode = None 
           display.sync() 
         daten = None 
         continue 

finally: 
     s.close() 
+0

這可以在服務器上使用嗎?當我測試運行它只是凍結。我認爲evdev.py是做我想做的事情的方式,但還沒有想出它是如何工作的。 – user1319341

+0

這個服務器的東西就是一個例子。它沒有它運行。如果您啓動腳本,它會聽取輸入。你可以嘗試什麼對你更好。對於這樣的工作,我使用xlib,evdev.py我不嘗試 – fecub