[[Vorlage(Archiviert )]] [[Vorlage(Hinweis, "Ab [:Lucid:Ubuntu 10.04] ist HAL komplett aus Ubuntu entfernt worden. Dieser Artikel ist nur noch für die KDE-Versionen ([:Kubuntu:] bis einschließlich 10.10) gültig! [:XServer:]-Einstellungen für Eingabegeräte können entweder über [:udev:]-Regeln oder über die neue [:xorg.conf.d:]-Methode angepasst werden.")]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] }}} [[Inhaltsverzeichnis(1)]] Der [:XServer:] beherrscht natives Plug&Play über [wikipedia:HAL_(Software): HAL]. Eingabegeräte können im laufenden Betrieb hinzugesteckt und voll benutzt werden, ohne dass Anpassungen an der '''[:xorg.conf:]''' nötig wären oder die grafische Oberfläche neu gestartet werden müsste. Dieser Artikel beschreibt, wie man in den Konfigurationsprozess eingreifen und fein abstimmen kann. Das größte Manko der bisherigen Konfiguration von Eingabegeräten über die '''xorg.conf''' ist, dass diese statisch an eine Gerätedatei "'''/dev/input/...'''" gebunden werden, die sich aber ändern kann. Seit Ubuntu 8.04 sind diese Einträge nun obsolet; sie werden auch standardmäßig nicht mehr verwendet. Der XServer kann beim Start Gerätetypen erkennen und passende Treiber laden. In diese Automatismen kann man über eine sogenannte "HAL Policy" eingreifen, unter anderem um z.B. den leistungsfähigeren [:evdev:]-Treiber standardmäßig zu verwenden. Die Einrichtung ist dabei denkbar simpel und beschränkt sich auf das Kopieren einer bereits vorhandenen Datei an die richtige Stelle. Weiterhin werden im Folgenden der Aufbau dieser Datei und einige sinnvolle Modifikationen beschrieben. Im Endeffekt kann man alle für Eingabegeräte spezifische Einträge aus der '''xorg.conf''' entfernen. Man wird belohnt mit vollständigem Plug&Play für alle Eingabegeräte und läuft zudem nicht mehr Gefahr, dass aufgrund falscher Einträge in der '''xorg.conf''' der XServer nicht mehr startet. = Einrichten = == Ubuntu 8.04 == Das Einrichten der XServer-Konfiguration beschränkt sich im Wesentlichen auf das Anlegen der Datei '''/etc/hal/fdi/policy/10-x11-input.fdi''' und einem Neustart von HAL und des XServers. Dazu müssen folgende Schritte ausgeführt werden: 1. Da jedes System bereits eine Beispiel-Konfigurationsdatei hat, ist es das Einfachste, diese an die richtige Stelle zu kopieren. Dies erreicht man mit dem Konsolenbefehl [1]: {{{#!vorlage Befehl sudo cp /usr/share/doc/hal/examples/10-x11-input.fdi /etc/hal/fdi/policy/10-x11-input.fdi }}} 1. Falls man Änderungen an der Datei vornehmen möchte, öffnet man sie einfach in einem Texteditor mit Root-Rechten[2]. In sehr vielen Fällen sind keine weiteren Anpassungen nötig, da deren Hauptaufgabe – das Laden des evdev-Treibers für eingesteckte Tastaturen und Mäuse – bereits die Beispielkonfiguration erledigt. Informationen zu Syntax und sinnvollen Änderungen sind in den folgenden Abschnitten beschrieben. 1. Nun startet man HAL und den XServer mittels der Befehle[1]{{{#!vorlage Befehl sudo /etc/init.d/hal restart sudo /etc/init.d/gdm restart }}} neu. Falls man nicht GNOME verwendet, kann man anstelle des zweiten Befehls auch einfach [[Vorlage(Tasten, Strg+Alt+Backspace)]] drücken. In allen Fällen sollten vorher alle offenen Dokumente gespeichert werden. = Syntax = Falls man '''/etc/hal/fdi/policy/10-x11-input.fdi''' wie oben beschrieben angelegt hat, erhält man eine Datei mit folgendem Inhalt. {{{#!code xml mouse evdev keyboard evdev }}} Es handelt sich um eine [wikipedia:Extensible_Markup_Language: XML]-Datei. Eine gültige HAL-Datei muss dabei folgende Rahmenstruktur aufweisen: {{{#!code xml ... }}} Spezifische Geräte werden mit einem regelbasierten Ansatz konfiguriert: * ``: Falls ein Gerät eine bestimmte Eigenschaft hat, werden alle eingeschlossenen Regeln für dieses Gerät ausgeführt. * ``: Für das aktuelle Gerät wird die angegebene Eigenschaft auf den eingeschlossenen Wert gesetzt. Sollte diese Eigenschaft bereits vorhanden sein, so wird ihr Wert überschrieben. Die zu testenden/setzenden Eigenschaften werden durch das Attribut "`key`" spezifiziert. In Falle von `` muss dabei noch das Testkriterium angegeben werden, und für `` der Typ (Zeichenkette, Zahl, etc.) der zu setzenden Eigenschaft. {{{#!vorlage Experten Es gibt noch eine ganze Reihe von weiteren gültigen Tags, die aber üblicherweise nicht gebraucht werden. Beispiele hierzu findet man zur Genüge in den weiteren HAL-Dateien in den Unterverzeichnissen von '''/usr/share/hal/fdi/policy/'''. }}} == Finden des richtigen Eingabegeräts == Bereits gesetzte Eigenschaften für eingesteckte Eingabegeräte können über den Befehl {{{#!vorlage Befehl hal-find-by-capability --capability input | xargs -I{} hal-device {} }}} in Erfahrung gebracht werden. Man erhält eine lange Liste mit Einträgen der Form {{{ udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input' input.originating_device = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port' (string) info.category = 'input' (string) input.device = '/dev/input/kbd-internal' (string) linux.sysfs_path = '/sys/devices/platform/i8042/serio0/input/input1/event1' (string) input.product = 'AT Translated Set 2 keyboard' (string) info.parent = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port' (string) info.product = 'AT Translated Set 2 keyboard' (string) info.addons.singleton = { 'hald-addon-input' } (string list) info.udi = '/org/freedesktop/Hal/devices/platform_i8042_i8042_KBD_port_logicaldev_input' (string) info.capabilities = { 'input', 'input.keyboard', 'input.keypad', 'input.keys', 'button' } (string list) ... }}} Jeder durch Leerzeilen getrennte Block beschreibt ein Gerät; obiger Befehl beschränkt die Liste dabei auf Eingabegeräte. Ein Block fängt mit dem "Unique Device Identifier" (udi) an, unter dem HAL das Gerät kennt. Alle folgenden Einträge sind Eigenschaften, in der Form {{{ [Eigenschaft] = [Wert] (typ-name) }}} In der Konfigurationsdatei fügt man Einträge der Form {{{#!code xml [Weitere Regeln für dieses Gerät] }}} hinzu, um für ''jedes'' Gerät mit der positiv getesteten Eigenschaft die weiteren Regeln auszuführen. {{{#!vorlage Experten Es gibt einige komplizierte Konstrukte, mit denen man z.B. auf Eigenschaften des Geräte-Vaters testen kann, oder nur Teile eines Wertes abfragt. In der ausführlichen Konfigurationsdatei weiter unten finden sich einige Beispiele dazu. }}} == Gerätetreiber und deren Optionen == Zur Konfiguration eines Eingabegerätes für den XServer ist nur eine einzelne Regel ''Pflicht'', nämlich die, die den Treiber festlegt. Diese sieht immer so aus: {{{#!code xml [Treiber] }}} Dabei ist `[Treiber]` durch den entsprechenden Treibernamen zu ersetzen. Für Mäuse und Tastaturen kann hier im Allgemeinen "`evdev`" verwendet werden. Sollte ein Treiber nicht festgelegt werden, ignoriert X alles Folgende. Eine Treiber-Option wird durch die Regel {{{#!code xml [xorg_option_wert] }}} gesetzt. Als mögliche Optionen für den Treiber sind alle Optionen zulässig, die in den "InputDevice"-Abschnitten der '''[:xorg.conf:]''' Verwendung fanden. "`[xorg_option]`" ist dabei durch deren Namen und "`[xorg_option_wert]`" durch deren Wert zu ersetzen. Die ''type''-Angabe ist dabei immer ein ''string'', auch wenn Werte wie "on" oder "true" gesetzt werden. {{{#!vorlage Hinweis Nur die '''xorg.conf'''-Einträge in den "InputDevice"-Abschnitten, die mit `Option` beginnen, können übertragen werden. Weitere Einträge wie z.B. `Identifier` oder `Device` (''auch:'' `Option "Device"`) sind nicht nötig, sie sind entweder überflüssig oder werden durch HAL automatisch vorgenommen. }}} {{{#!vorlage Experten Optionen und deren Bedeutung kann man auf den [:man:]-Pages des entsprechenden Treibers nachschlagen. }}} = Häufige Anpassungen = {{{#!vorlage Hinweis Damit Änderungen wirksam werden, müssen nach dem Speichern HAL und X wie im Abschnitt [:#Einrichten Einrichten] beschrieben neu gestartet werden. }}} == Allgemeine Anmerkungen == * In dem Verzeichnis '''/etc/hal/fdi/policy''' können beliebig viele '''.fdi'''-Dateien liegen; sie werden in lexikalischer Reihenfolge abgearbeitet. Am einfachsten ist es, eine "Universaldatei" mit dem Namen '''10-x11-input.fdi''' wie oben beschrieben anzulegen, die den kleinsten gemeinsamen Nenner bildet. Falls man für z.B. die eigene Maus eines bestimmten Herstellers einige Anpassungen benötigt, legt man eine weitere Datei an – z.B. mit dem Namen '''20-x11-hersteller.fdi'''. Wenn die Universaldatei bereits den Treiber festlegt, ist es zudem nicht nötig, dass die Dateien mit den weiteren Anpassungen für ein Gerät dies erneut tun. Dies dient primär der Übersichtlichkeit, man kann theoretisch auch alle Anpassungen in einer einzigen Datei machen. * Alle über HAL-Dateien konfigurierte Geräte benötigen ''keinen'' "InputDevice"-Eintrag in der '''[:xorg.conf:]''' mehr. Man kann entsprechende Einträge auskommentieren. Alle eventuellen Einstellungen, die man vorher für dieses Gerät in der '''xorg.conf''' vorgenommen hat, können wie im Abschnitt Syntax beschrieben übernommen werden. * Möchte man dagegen die Kontrolle über ein Eingabegerät wieder an die '''xorg.conf''' deligieren, so kann die entsprechende HAL-Konfiguration "entschärft" werden, indem auch hier über eine fdi-Datei die entsprechende Treiberinformation ausgeblendet wird: {{{#!code xml }}} Zu beachten ist, dass der Datenteil des merge-Tags leer ist. * HAL dient nicht nur der Konfiguration von Eingabegeräten. Da man für den XServer aber nur Eingabegeräte konfigurieren möchte, sollte man seine Anpassungen immer über das folgende Konstrukt kapseln: {{{#!code xml ... }}} Dabei ist "[Geräteklasse]" durch "input.mouse", "input.touchpad", etc. (s.u.) zu ersetzen. Ansonsten könnte man versehentlich auch für Nicht-Eingabegeräte einen X11-Treiber konfigurieren – z.B. wenn man nur nach etwas wie "Hersteller=Logitech" für seine Maus testet, aber man auch eine Webcam dieses Herstellers hat. == Einstellen der Tastaturbelegung == Die korrekte Einstellung der Tastaturbelegung dürfte die am häufigsten gemachte Anpassung sein, da man über das Standard-Beispiel eine US-Belegung erhält. Dies ist allerdings nur für den Anmeldebildschirm relevant. Danach übernimmt der benutzte Desktop (GNOME, KDE, etc.) die Benutzer-spezifischen Einstellungen, die entsprechende Einträge aus '''xorg.conf''' oder '''10-x11-input.fdi''' überschreiben. Die Einstellung der Tastaturbelegung und ihrer Varianten erfolgt gemäß Dokumentation über die Eigenschaften{{{ "input.x11_options.XkbRules" "input.x11_options.XkbModel" "input.x11_options.XkbLayout" "input.x11_options.XkbVariant" "input.x11_options.XkbOptions" }}} die die gleiche Bedeutung wie ihre Pendants in der '''xorg.conf''' haben. Leider muss man zumindest unter [:Hardy Heron:] an dieser Stelle noch auf die veraltete Syntax zurückgreifen, die folgende Eigenschaften erwartet{{{ "input.xkb.rules" "input.xkb.model" "input.xkb.layout" "input.xkb.variant" "input.xkb.options" }}} Es ist allerdings problemlos möglich beide Eigenschaften zu setzen. Ein fertiges Beispiel für Tastaturen mit deutscher Belegung: {{{#!code xml evdev evdev de }}} Eine alternative Möglichkeit mit dem gleichen Effekt ist im Beispiel am Artikelende zu finden. == Mausachsen invertieren == Mit diesen zusätzlichen Optionen kann man die Mausachsen invertieren: {{{#!code xml true true }}} In der '''/etc/hal/fdi/policy/10-x11-input.fdi''' trägt man es dann folgt ein für die Maus: {{{#!code xml evdev true true }}} == Hinzufügen von Touchpads == Touchpads sind dadurch gekennzeichnet, dass sie sich unter der Eigenschaft "`info.capabilities`" mit "`input.touchpad`" melden. Für Touchpads existiert ein eigener [:Archiv/Touchpad:Eintrag]. == Hinzufügen von Grafiktabletts == Grafiktabletts melden sich ebenfalls unter der Eigenschaft "`info.capabilities`" mit "`input.touchpad`", aber es erscheinen noch weitere Einträge, so kann sich ein Grafiktablett zusätzlich mit "`input.mouse`" melden. Der folgende Code-Block ist ein Beispiel, das wahrscheinlich mit der Mehrheit der Grafiktabletts funktionieren wird; er sollte jedoch nach dem Code-Block des Touchpads eingetragen werden, um Konflikte zu vermeiden. {{{#!code xml wacom stylus absolute }}} = Beispiel = {{{#!vorlage Hinweis Da aufgrund des regelbasierten Ansatzes nur Eingabegeräte konfiguriert werden, die auch tatsächlich vorhanden sind, kann folgende Beispieldatei ohne Bedenken auch als Ausgangsdatei für das eigene System verwendet werden. }}} Untenstehend eine Konfigurationsdatei, die die anfängliche Beispieldatei um die Benutzung einer deutschen Tastaturbelegung, Korrektur der Mausrad-Kipprichtung von einigen Logitech Funkmäusen und Laden des "`synaptics`"-Treibers für entsprechende Touchpads nachrüstet. {{{#!code xml synaptics on mouse evdev invert keyboard pc105 evdev evdev de input.x11_options.XkbModel input.x11_options.XkbLayout }}} = Links = * [ubuntu:X/Config/Input Configuring Input Devices: Eintrag] zum Einrichten von Eingabegeräten im englischen Ubuntu-Wiki * [https://cgit.freedesktop.org/xorg/xserver/tree/config/x11-input.fdi Allgemeine Ausführung] {en} * [http://howflow.com/tricks/migration_der_input_peripherie_von_xorg_conf_zu_hal Weiteres Beispiel] {de} #tag: Hardware, Installation, Server