Tastatur
X-Server

Zwischenablage

Die Maus und xev


XevMäuse werden in X11 recht einfach organisiert: Man numeriert die z.T. zahlreichen Knöpfe und Bewegungsrichtungen von Rädchen mit Button 1, 2, 3 etc. durch. Linux sieht z.Z. bis zu 9 solcher Knöpfe vor.

Was genau beim Mausklick passiert, offenbart das für Debugging sehr nützliche Tool xev. Nach dem Aufruf aus einem Xterm erscheint ein kleines fast leeres Fenster wie in der nebenstehenden Abbildung. Sobald der Mauszeiger in dieses Fenster bewegt wird, gibt xev detailliert Auskunft über alle Events, die der X-Server an seine X-Clients sendet, und zwar sowohl Maus- als auch Tastaturereignisse.

Xev ist immer nützlich, wenn die Reaktionen auf bestimmte Mausklicks oder Tasten nicht dem erwarteten Ergebnis entsprechen. So lässt sich klären, ob der X-Server die "falschen" Events sendet oder das Problem bei der Konfiguration des X-Clients liegt.

Hier ein paar Beispiele:

MotionNotify event, serial 21, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25197998, (142,111), root:(192,161),
    state 0x0, is_hint 0, same_screen YES

MotionNotify event, serial 21, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25198013, (142,110), root:(192,160),
    state 0x0, is_hint 0, same_screen YES

ButtonPress event, serial 21, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25200685, (142,110), root:(192,160),
    state 0x0, button 1, same_screen YES

ButtonRelease event, serial 21, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25200906, (142,110), root:(192,160),
    state 0x200, button 1, same_screen YES

KeyPress event, serial 21, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25202531, (142,110), root:(192,160),
    state 0x0, keycode 37 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 24, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25202593, (142,110), root:(192,160),
    state 0x0, keycode 37 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

ButtonPress event, serial 24, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25204140, (142,110), root:(192,160),
    state 0x0, button 2, same_screen YES

ButtonRelease event, serial 24, synthetic NO, window 0x800001,
    root 0x8a, subw 0x0, time 25204321, (142,110), root:(192,160),
    state 0x100, button 2, same_screen YES

Die oberen drei Event-Benschrichtigungen zeigen Bewegungen der Maus an. Anschließend wurde die linke Maustaste gedrückt, was mit ButtonPress und ButtonRelease des "button 1" quittiert wird.
Daraufhin drücken wir zur Abwechslung eine Taste, nämlich den Buchstaben "a", worüber xev detailliert Auskunft gibt.
Nun wird es spannend: Wir Drücken die mittlere Maustaste (bzw. auf das Rad bei einer typischen Wheel-Mouse). Welche Nummer hat dieser Knopf? Xev zeigt uns: button 2.
Konsequenterweise hat die rechte Maustaste die Nummer 3. Da die mittlere Maustaste in X11 recht häufig benötigt wird, sind die Tasten 1 bis 3 sozusagen Minimalausstattung. Bei der 2-Tasten-Maus für Arme wird die mittlere Taste i.d.R. durch gleichzeitiges Drücken beider Maustasten emuliert. Allerdings muss der X-Server entsprechend konfiguriert sein.

Ein kleines xev-Experiment verrät auch, wie X11 mit Bewegung des Maus-Rädchens umgeht. Wahrscheinlich kommt dabei heraus:
Raddrehung nach "oben":  button 4

Raddrehung nach "unten":  button 5
Moderne X-Applikationen (besonders im Rahmen von KDE und gnome) reagieren in geeigneter Weise auf die Buttons 4 und 5 - meist mit Auf- und Abscrollen von Textbereichen o.ä.

xmodmap für Linkshänder

xmodmap -pp zeigt die aktuelle Zuweisung der Mausknöpfe, typischerweise wie im Kästchen rechts.

Nichts Aufregendes, die Tasten-Codes entsprechen der Position der Tasten "in Wirklichkeit", also an der physikalischen Maus.

Die Mehrheit der Anwender, nämlich alle Rechshänder, werden mit dieser Belegung auch glücklich sein.

Wozu dann überhaupt dieses Mapping?
There are 7 pointer buttons defined.

    Physical        Button
     Button          Code
        1              1
        2              2
        3              3
        4              4
        5              5
        6              6
        7              7

Ein Linkshänder möchte entsprechend der Anordnung der Finger der linken Hand die Funktionen der rechten und der linken Maustaste vertauschen. Unter Beachtung der oben beschreibenen Numerierung der Maustasten ist nun folgendes zu tun:

xmodmap -e "pointer = 3 2 1"

So wird die Reihenfolge der ersten 3 Tasten umgedreht; Tastennummer und "Button Code" unterscheiden sich nun (siehe Kasten rechts) und der Linkshänder kann bequem mit X-Applikationen arbeiten.
There are 7 pointer buttons defined.

    Physical        Button
     Button          Code
        1              3
        2              2
        3              1
        4              4
        5              5
        6              6
        7              7
Komplexere Zeigegeräte, wie Space-Mouse, Graphiktablett oder Digitizer, lassen sich nicht mehr auf eine überschaubare Anzahl von Knöpfen abbilden. Um X-Applikationen den Gebrauch derartiger Geräte zu ermöglichen, wurde die XInput-Extension geschaffen, die im Kapitel Extensions behandelt wird.
Soviel zum Thema Maus.
Tastatur
     ©2005, 2007 Andreas Gottwald
Zwischenablage