Hallo, ich habe gerade eine neue Version von "OSD Neo2" hochgeladen:
http://www.mzuther.de/de/contents/osd-neo2 Die Windows-Unterstützung ist unter den Tisch gefallen, außerdem habe ich die "evdev"-Library gegen Aufrufe der "X Keyboard Extension" ausgetauscht (vielen Dank an Daniel für den Tip mit "ctypes"). "OSD Neo2" braucht jetzt weniger CPU-Zyklen, niemand benötigt mehr superuser-Rechte oder ein Startskript, und ich habe die Hoffnung, das das Programm auch bei Peter läuft. Das ist die gute Nachricht. Die schlechte: es gibt zwischen den unterschiedlichen Treiberversionen für Neo2 ein großes Chaos der X11-Modifier, zumindest auf meinem Rechner mit Ubuntu 9.04. "SHIFT_LOCK" (ich benutze hier einfach mal Großschreibung für Neo2 und Kleinschreibung für X11) ist mal "shift_lock" und mal "lock_lock", während "mod5" mal für "MOD3" und mal für "MOD4" steht. Von überhaupt nicht gemeldeten Tastendrucken mal ganz abgesehen. Könnte mich da bitte jemand aufklären? :) Die folgenden Angaben könnt Ihr überprüfen, wenn Ihr Euch "OSD Neo2" in der neuen Version 0.11 herunterladet und das Helferprogramm "SimpleXkbWrapper.py" ausführt, der Einfachheit halber am besten "watch -n0,1 SimpleXkbWrapper.py": [Xmodmap] Neo2 X11 =========================== SHIFT shift SHIFT_LOCK shift_lock MOD3 (nicht gemeldet) MOD4 mod5 MOD4_LOCK mod5_lock [Xkbmap] (aktuell, hat aber keine Locks) Installiert wie folgt: wget http://neo-layout.org/xkb.tgz sudo tar -C /usr/share/X11/ -xzf xkb.tgz Neo2 X11 =========================== SHIFT shift SHIFT_LOCK lock_lock MOD3 mod5 MOD4 (funktioniert nicht) MOD4_LOCK (funktioniert nicht) [Xkbmap] (nicht aktuell, hat aber dafür Locks) Installiert wie folgt: wget http://neo-layout.org/xkb.tgz sudo tar -C /usr/share/X11/ -xzf xkb.tgz sudo wget http://wiki.neo-layout.org/export/1802/linux/X/de -O /usr/share/X11/xkb/symbols/de Neo2 X11 =========================== SHIFT shift SHIFT_LOCK shift_lock MOD3 mod5 MOD4 mod3 MOD4_LOCK (eine scheinbar zufällige Kombination aus mod2_lock und mod3_lock) Das ganze ist kein Problem von Python oder "ctypes", denn ein kleines C-Programm liefert die gleichen Daten: #include <stdio.h> #include <X11/XKBlib.h> int main(int argc, char *argv[]) { int event_rtrn = 0; int error_rtrn = 0; int major_in_out = 1; int minor_in_out = 0; int reason_rtrn = 0; Display * display = NULL; display = XkbOpenDisplay(NULL, &event_rtrn, &error_rtrn, &major_in_out, &minor_in_out, &reason_rtrn); printf("\n Display handle: %#010x\n", (unsigned int) display); XkbStateRec state; XkbGetState(display, XkbUseCoreKbd, &state); printf("\n mods: %x", state.mods); printf("\n base_mods: %x", state.base_mods); printf("\n latched_mods: %x", state.latched_mods); printf("\n locked_mods: %x", state.locked_mods); printf("\n compat_state: %x", state.compat_state); printf("\n\n"); return 0; } Programmiert habe ich "OSD Neo2" mit dem nicht aktuellen "Xkbmap"-Treiber, bei allen anderen zeigt das Programm noch nicht die richtigen Ebenen an. Bevor ich weiß, wie das endgültig gehandhabt werden soll, kann ich das auch nicht anpassen. Im besten Falle wären die verwendeten X11-Modifier überall gleich, denn so wie es sich mir im Moment erschließt, muss jeder, der eine Bidlschirmtastatur oder ähnliches programmiert, ewig lange Installationsanleitungen schreiben und die Benutzer müssen das Programm an den von ihnen verwendeten Treiber anpassen... Viele Grüße, Martin