X.Org, evdev und HAL - Teil 3

Technobabble-Warnung

Eigentlich dachte ich, das Problem aus dem Zusammenspiel von X11, Multimedia-Tastatur, evdev-Treiber, HAL und LinEAK sei gelöst gewesen - doch hat "roo" mich in den Kommentaren darauf aufmerksam gemacht, dass mit dem xorg.conf-Schalter “AutoAddDevices = no" einfach nur HAL deaktiviert wurde. Das funktioniert zwar, ist aber nicht das, was man gerne haben möchte - nämlich die Verwaltung aller Eingabegeräte an einer zentralen Stelle, im "Hardware Abstraction Layer".

Nun hat "roo" am Dienstag einen weiteren Kommentar geschrieben, den ich jedoch übersehen habe:

Also ich hab herausgefunden, dass das Problem nicht bei HAL, nicht bei evdev und auch nicht bei X liegt. Sondern beim Desktop Environment - sprich Gnome/Xfce/KDE. Habe nämlich mal Fluxbox emerged und damit mal probiert (Fluxbox lässt sich ja fix emergen und starten). Und dort habe ich diese Probleme nicht. Alle Tasten werden von xev perfekt erkannt. Und verursachen keine Probleme.

Tatsächlich hatte ich auch schon eigene Experimente durchgeführt, und bin zu dem gleichen Ergebnis gekommen: Unter Fluxbox kann ich alle Tastencodes der Spezialtasten mit xev beobachten, unter XFCE jedoch nicht die Lautstärketasten - und ausgerechnet die hatte ich in meinem letzten Beitrag meistens zum Testen verwendet.

In der Ausgabe von xev sind mir dann jedoch einige Details aufgefallen (hier als Beispiel für die Taste "Startseite"):



    KeyRelease event, serial 33, synthetic NO, window 0x4c00001, 
    root 0x7e, subw 0x0, time 39405674, (136,70), root:(747,528), 
    state 0x10, keycode 180 (keysym 0x1008ff18, XF86HomePage), same_screen YES, 
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

Diese Taste hat bei einem "Microsoft Comfort Curve Keyboard 2000" normalerweise den Keycode 130, wie ein kurzer Blick in die Datei /etc/lineakkb.def zeigte - und nicht 180, wie xev behauptet. Eine Tastatur, bei der dieser Knopf den Tastencode 180 sendet, ist in dieser Datei überhaupt nicht verzeichnet! Dies - und die korrekte Erkennung des "keysym" als "XF86HomePage" - brachte mich dann aber auf die richtige Spur.

Diese Kombination von Tastencode und Keysym (180 = HOMEPAGE) findet sich in der Datei "/usr/share/X11/xkb/keycodes/evdev" wieder. Anscheinend (ich habe dazu überhaupt keine Dokumentation gefunden, korrigiert mich, falls ich wieder falsch liege) haben die Entwickler mit dem Umstieg auf HAL einen meiner Meinung nach richtigen Schritt getan und die Zuordnung der Spezialtasten in den Treiber verbannt, und es nicht mehr der Anwendung überlassen, diese Tasten richtig zu interpretieren. Der Anwendungsentwickler kann sich also nun drauf verlassen, dass der Tastaturcode 180 gesendet wird, wenn der Benutzer die Taste "Startseite/Web/Homepage" drückt - egal, welches Modell er besitzt. Eine gute Idee, nur hätte man dies ein bisschen besser Dokumentieren können.

Was aber hatte nun zu dem beobachteten Problem geführt? Bisher (vor HAL) konnte XFCE mit meiner Tastatur und insbesondere den "XF86Audio"-Tasten für die Lautstärke nichts anfangen. Die Keycodes wurden also weitergereicht und konnten von der Anwendung - z.B. LinEAK - verarbeitet werden. Nach dem Wechsel auf den HAL-basierten evdev-Treiber erkannte XFCE die Tasten dann selbst und wollte sich drum kümmern; was jedoch nicht gelang, da mir die verwendete Hilfsanwendung "aumix" fehlte. Die Befehle hatten also keinerlei Reaktion mehr zur Folge, kamen aber auch nicht mehr bei lineakd an.

Und was ist nun die Lösung? Nun, entweder kann man seine Shortcuts in den Window-Manager übertragen und diesem die Ausführung überlassen. Bei XFCE geht man dazu in die "Einstellungen" (Settings), dann in die "Tastatureinstellungen" (Keyboard Settings) und dort auf "Tastenkürzel" (Shortcuts). Hier legt man sich ein neues "Schema" an und definiert dort die gewünschten Aktionen. Nachteil: Die Shortcuts funktionieren nur innerhalb von XFCE, nicht unter KDE oder Gnome (es sei denn, man richtet sie dort ebenfalls ein).

Will man die Verwaltung der Multimediatasten weiterhin LinEAK überlassen, wird es etwas aufwendiger. Zunächst muss man die Verknüpfung des Window-Managers mit den Shortcuts beseitigen. Dies geht bei XFCE ebenfalls über ein neues "Schema", nur dass man dieses mal die mit "XF86" beginnenden Verknüpfungen löscht. Anschließend muss man die "evdev-Tastatur" bei LinEAK bekannt machen. Dazu läd man am besten die Datei lineak-evdev.def herunter und hängt sie (als root) an die Datei /etc/lineakkb.def an:

$ cat lineak-evdev.def >> /etc/lineakkb.def

Nun kann man sich mit dem Befehl lineakd -c EVDEV eine neue Konfigurationsdatei $HOME/.lineak/lineakd.conf erzeugen und anschließend wie gewohnt mit Leben füllen. Dabei aber bitte beachten, dass diese Keyboard-Konfiguration sämtliche über evdev verfügbaren Tastencodes beinhaltet, unabhängig davon, ob die Befehle auf der eigenen Tastatur überhaupt vorhanden sind.

Mein Dank geht an "roo", für den Anstoß, mich noch einmal tiefergehender mit dem Problem zu geschaffen.

Der Vollständigkeit halber hier auch nochmal meine nun funktionierende /etc/hal/fdi/policy/10-x11-input.fdi, da in der letzten Version ein Fehler drin war (es muss "input.xkb" statt "input.x11_options" heißen):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <deviceinfo version="0.2">
  3. <device>
  4. <match key="info.capabilities" contains="input.mouse">
  5. <merge key="input.x11_driver" type="string">evdev</merge>
  6. </match>
  7.  
  8. <match key="info.capabilities" contains="input.keyboard">
  9. <merge key="input.x11_driver" type="string">evdev</merge>
  10. <merge key="input.xkb.model" type="string">evdev</merge>
  11. <merge key="input.xkb.layout" type="string">de</merge>
  12. <merge key="input.xkb.rules" type="string">xorg</merge>
  13. </match>
  14. </device>
  15. </deviceinfo>

Comments

Also die Lösung für HAL + X + Evdev ist GDM.
Wenn man sich über GDM einloggt, funzt alles perfekt. Frag mich nicht, was GDM macht, was Xfce4 nicht selber geschissen bekommt..

..naja fürs erste halt mit dem nutzlosen GDM :)

mfG
ro0

Ich habe mich jetzt durch die Anleitungen hier "gekämpft" mit nicht so den Erfolg und dann habe ich mir einen Blick ins gentoo-wiki erlaubt und siehe da, was dort steht zu hal hat geklappt, warum auch immer.

http://en.gentoo-wiki.com/wiki/X.Org/Installation

Mit mühen und brechen lernt man eben ein bissel dazu, mal ganz abgesehen vom Zeitaufwand, doch dafür hat man irgendwie ein vertrautes System am Ende.

Hallo zusammen,

ich habe ein aehnliches Problem mit meiner Tastatur gehabt (etliche Tastenwaren schlichtweg falsch zugewiesen) und konnte es nun dank dieses Blogs erfolgreich loesen.
Der richtige Hinweis war, dass die Keycodes nun in "/usr/share/X11/xkb/keycodes/evdev" abgelegt sind.
Das hat mich daran erinnert, dass ich vor Urzeiten mal eine ".Xmodmap" in meinem Home-Verzeichnis angelegt habe... :/

Zusammenfassend: Wer HAL benutzt, sollte sich von seiner ".Xmodmap" trennen (oder sie zumindest umbenennen), da sie die evdev-Zuweisungen ueberlagert.

Gruesse,

Euer Celphis