Xorg - Input-hotplugging - veraltert

[!] Die Methode Input-hotplugging und die dabei nötige Konfiguration der Geräte mit Hal vorzunehmen ist veraltert und muß nicht auf aktuellen (März 2010) "unstable" Systemen funktionieren! Stand März 2010

Die hier beschriebene Funktionalität wurde mit xorg aus Debian Experimental in der Version 7.4~4 getestet.

Viele Notebookuser sollten das folgende Problem kennen. Input-hotplugging war bis vor kurzem nur unter bestimmten Umständen unter Linux und X möglich. Entweder man verwendet nur ein Device (/dev/input/mice oder /dev/psaux) in seiner xorg.conf und verzichtet bei mehreren Eingabegeräten auf eine korrekte Konfiguration unter Ausnutzung aller Möglichkeiten der Geräte oder man verwendet mehrere Geräte, mit expliziter Deviceangabe, in der xorg.conf und muß sie immer beim Start von X eingesteckt haben. Ohne jetzt auf den kleinsten gemeinsamen Nenner der Möglichkeiten eingeschränkt zu sein war es so nötig entweder durch suspend und resume oder durch Neustart des Xservers alle neuen Geräte zur Funktion zu überreden.

Mit der kommenden Version 7.4 scheint sich das endlich zu ändern. Per default scheint jetzt HAL die Konfiguration der Geräte zu übernehmen und die xorg.conf wird obsolete.

Das alte Verhalten von Xorg bewahren - Input-Hotplugging deaktivieren

Bevor ich die Konfiguration für Hotplugging zeige, will ich, für all jene die diese Funktionalität nicht benötigen und mit dem alten Verhalten von Xorg zufrieden waren, eine Möglichkeit zeigen wie man dieses bewahren kann. Will man weiter seine alte xorg.conf ohne Input-hotplugging benutzen muß man folgenden Eintrag an die xorg.conf anhängen:

% grep -1 AutoAddDevices /etc/X11/xorg.conf_oldbehavior
Section "ServerFlags"
       Option "AutoAddDevices" "false"
EndSection

Input-hotplugging Howto

Für das Aktivieren von Input-Hotplugging muß dieses entweder den zuvor genannten Eintrag in der xorg.conf (Xorg in der Version 7.4~4) auskommentieren oder mit

% grep -1 AutoAddDevices /etc/X11/xorg.conf_hotplugging
Section "ServerFlags"
       Option "AutoAddDevices" "true"
EndSection

aktivieren.

Nun werden die Konfigurationseinträge für Mäuse bzw Tastaturen in der xorg.conf ignoriert und HAL übernimmt diese Aufgabe. Um HAL die Optionen aus der xorg.conf zu übergeben ist es nötig im Verzeichnis /etc/hal/fdi/policy/ eine *.fdi-Datei mit diesen zu erzeugen.

Beispiel einer fdi-Datei: IBM/Lenovo Thinkpad mit externer UltraNav-Tastatur

Die folgende fdi-Datei dient mir zur Konfiguration des Trackpoints, des Touchpads, der internen Tastatur und der externen Tastatur mit UltraNav (Trackpoint und Touchpad) bzw einer einfachen Logitech Notebookmaus.

% cat /etc/hal/fdi/policy/thinkpad.fdi
<?xml version="1.0" encoding="UTF-8"?>
<!--Comments may follow-->

<deviceinfo version="0.2">
 <device>
  <match key="info.product" string="TPPS/2 IBM TrackPoint">
   <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
   <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
   <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
   <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
   <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
  </match>
  <match key="info.capabilities" contains="input.keys">
   <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
   <merge key="input.x11_options.XkbModel" type="string">pc105</merge>
   <merge key="input.x11_options.XkbLayout" type="string">de</merge>
   <merge key="input.x11_options.XkbVariant" type="string">nodeadkeys</merge>
   <merge key="input.xkb.rules" type="string">xorg</merge>
   <merge key="input.xkb.model" type="string">pc105</merge>
   <merge key="input.xkb.layout" type="string">de</merge>
   <merge key="input.xkb.variant" type="string">nodeadkeys</merge>
  </match>
  <match key="info.capabilities" contains="input.touchpad">
   <merge key="input.x11_options.LeftEdge" type="string">1700</merge>
   <merge key="input.x11_options.RightEdge" type="string">5300</merge>
   <merge key="input.x11_options.TopEdge" type="string">1700</merge>
   <merge key="input.x11_options.BottomEdge" type="string">4200</merge>
   <merge key="input.x11_options.FingerLow" type="string">25</merge>
   <merge key="input.x11_options.FingerHigh" type="string">30</merge>
   <merge key="input.x11_options.MaxTapTime" type="string">180</merge>
   <merge key="input.x11_options.MaxTapMove" type="string">220</merge>
   <merge key="input.x11_options.VertScrollData" type="string">100</merge>
   <merge key="input.x11_options.MinSpeed" type="string">0.06</merge>
   <merge key="input.x11_options.MaxSpeed" type="string">0.12</merge>
   <merge key="input.x11_options.AccelFactor" type="string">0.0010</merge>
   <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
   <merge key="input.x11_options.ZAxisMapping" type="string">4 5</merge>
  </match>
  <match key="info.product" string="Synaptics Inc. Composite TouchPad / TrackPoint">
   <match key="info.udi" contains="/org/freedesktop/Hal/devices/usb_device_6cb_9_noserial_if1_logicaldev_input">
    <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
    <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
    <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
    <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
    <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
   </match>
  </match>
 </device>
</deviceinfo>

Wie aus der Datei /etc/hal/fdi/policy/thinkpad.fdi ersichtlich können Optionen aus der xorg.conf einfach übernommen werden.

Erstellen einer fdi-Datei für HAL

Die folgenden Ausführungen stellen den Weg dar wie ich zu meiner funktionierenden fdi-Datei gekommen bin.

Welche Geräte kennt HAL

Zuerst war es nötig die Geräte zu finden um matches zu erzeugen. Hier hilft der Befehl:

% hal-find-by-capability --capability input | xargs -I{} hal-device {}

Schritte zur fdi-Datei für HAL

Als nächsten Schritt kann man daran gehen seine fdi-Datei nach folgenden Regeln zu erstellen

  • AutoAddDevices muß entweder per default oder manuell in der xorg.conf aktiviert sein.
  • xml-Deklaration und deviceinfo- bzw device-Tags in der neuen fdi-Datei einfügen.
  • matches finden und in fdi-Datei eintragen.
  • Optionen aus xorg.conf übernehmen und als key="input.x11_options.$OPTION_AUS_XORGCONF" mit dem type string als zB merge-Tag einfügen.
  • HAL neustarten.
  • Xorg neustarten.

Danach sollten Input-Hotplugging funktionieren.

Weiterführende Literatur

Update 4. Dez 2008

  • Typos und unnötige Option ZAxisMapping des Trackpoints entfernt.

Update März 2010

  • Auf aktuellen Debian unstable Systemen scheint die Methode Input-hotplugging und die dabei nötige Konfiguration der Geräte mit Hal vorzunehmen, nicht mehr zu funktionieren!