Linux Keygrab - tool

Linux Betriebssystem

brgs

Member
Registriert
25 Sep. 2011
Beiträge
109
Hi.


Ich bin sicher, daß ich das mal gesehen habe: Ich suche nach einem
Programm für XWindows, das nichts weiter macht, als auf den nächsten
Tastendruck zu warten und dann die gedrückte Taste auf stdout zurückzugeben,
vieleicht mit Timeout.

Kennt das vieleicht jemand?
 
xev macht sowas in der Art. Es liefert dir registrierte Keyevents sams Keycode und Keysym zurück.
Beim Betätigen (Drücken, wieder Loslassen) der "x"-Taste passiert z.B. das:
Code:
KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x10c, subw 0x0, time 223084563, (811,-325), root:(1682,1409),
    state 0x10, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XmbLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x10c, subw 0x0, time 223084638, (811,-325), root:(1682,1409),
    state 0x10, keycode 53 (keysym 0x78, x), same_screen YES,
    XLookupString gives 1 bytes: (78) "x"
    XFilterEvent returns: False

Tastenkombinatienen gehen auch ("X" = "Shift_L" + "x"):
Code:
KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x10c, subw 0x0, time 223089122, (811,-325), root:(1682,1409),
    state 0x10, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 37, synthetic NO, window 0x4e00001,
    root 0x10c, subw 0x0, time 223090383, (811,-325), root:(1682,1409),
    state 0x11, keycode 53 (keysym 0x58, X), same_screen YES,
    XLookupString gives 1 bytes: (58) "X"
    XmbLookupString gives 1 bytes: (58) "X"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x10c, subw 0x0, time 223090421, (811,-325), root:(1682,1409),
    state 0x11, keycode 53 (keysym 0x58, X), same_screen YES,
    XLookupString gives 1 bytes: (58) "X"
    XFilterEvent returns: False

KeyRelease event, serial 37, synthetic NO, window 0x4e00001,
    root 0x10c, subw 0x0, time 223091393, (811,-325), root:(1682,1409),
    state 0x11, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
 
Danke, aber das macht leider genau nicht was ich brauche. Da muß
ich ja in dieses Fensterchen tippen. Ich will aber alle Tastendrücke,
egal in welchem Fenster, und nur genau einen.


Gr, Brgs
 
Hi.


Ich bin sicher, daß ich das mal gesehen habe: Ich suche nach einem
Programm für XWindows, das nichts weiter macht, als auf den nächsten
Tastendruck zu warten und dann die gedrückte Taste auf stdout zurückzugeben,
vieleicht mit Timeout.

Kennt das vieleicht jemand?
Hallo, für mich als absoluten Nichtswisser in diesem Bereich: welchen Sinn hat das ganze?
was ist die Idee dahinter?
 
Mit python-xlib wäre es vielleicht eine Option für dich?

from Xlib import X, XK, display
from Xlib.ext import record
from Xlib.protocol import rq

def key_event_handler(reply):
if reply.category != record.FromServer:
return
if reply.client_swapped:
print("Byte swapping not supported")
return
if not len(reply.data) or reply.data[0] < 2: # KeyPress or KeyRelease
return

data = reply.data
while len(data):
event, data = rq.EventField(None).parse_binary_value(data, dpy.display, None, None)
if event.type == X.KeyPress:
keysym = dpy.keycode_to_keysym(event.detail, 0)
if keysym:
print(XK.keysym_to_string(keysym))
exit(0) # Beendet das Programm nach dem ersten Tastendruck

# Verbindung zum X Server
dpy = display.Display()
root = dpy.screen().root

ctx = dpy.record_create_context(
0,
[record.AllClients],
[{
'core_requests': (0, 0),
'core_replies': (0, 0),
'ext_requests': (0, 0, 0, 0),
'ext_replies': (0, 0, 0, 0),
'delivered_events': (0, 0),
'device_events': (X.KeyPress, X.KeyRelease),
'errors': (0, 0),
'client_started': False,
'client_died': False,
}]
)

dpy.record_enable_context(ctx, key_event_handler)
dpy.record_free_context(ctx)
 
Hallo, für mich als absoluten Nichtswisser in diesem Bereich: welchen Sinn hat das ganze?
was ist die Idee dahinter?
Weniger Keybindings. Herbstluftwm hat für jeden nutzlosen Unsinn ein
keybinding und blockiert damit die halbe Tastatur. Dagegen hat z.B.
screen, wahrscheinlich tmux und insbesondere Ratpoison und vi
einen Command-Key. Ich binde also mein Programm, grabkey
an Ctrl-A und sage dann:

Code:
key=$(reallygrabkey)
case $key in e) xterm -e ed ;;
                    s) surf ;;
                    k) xkill ;;
                    r) resize ;;
esac

Gr, brgs
Beitrag automatisch zusammengeführt:

Mit python-xlib wäre es vielleicht eine Option für dich?
Das ginge schon, ich hab's jetzt allerdings in C gemacht; um ehrlich zu
sein steige ich da auch nicht durch; python benutze ich nur sehr selten.

Trotzdem vielen Dank,
Brgs
 
Zuletzt bearbeitet:
  • ok1.de
  • ok2.de
  • thinkstore24.de
  • Preiswerte-IT - Gebrauchte Lenovo Notebooks kaufen

Werbung

Zurück
Oben