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


Antwort per Email an