Eingabe im Gänsemarsch

Linux-USB in der Praxis

01.11.2000 Mit dieser Ausgabe beginnt eine Artikelserie über USB-Peripheriegeräte. Dieses Mal sind Eingabegeräte an der Reihe: Tastaturen, Mäuse, Joysicks und Grafiktabletts.

Gleich zu Anfang darf festgestellt werden: Die Erfolgsquote ist erfreulich hoch. Keines unserer 10 Geräte verweigerte den Dienst. Das liegt vor allem daran, dass sowohl Mäuse als auch Tastaturen ein fest definiertes Protokoll verwenden. Bei den Joysticks gibt es hingegen Unterschiede: manche funktionieren mit dem Standardtreiber, bei anderen (zum Beispiel Logitech Wingman Force) müssen zusätzliche Module geladen werden.

Tastaturen

Wer ausschließlich eine USB-Tastatur an den Computer anschließen will, hat es einfach: Er aktiviert im BIOS seines Rechners einfach "Support USB-Keyboard" und kann den Rest des Artikels überspringen. Die Tastatur wird nämlich einfach vom BIOS erkannt und dann unter Linux wie eine ganz normale Tastatur angesprochen. Sobald jedoch unter Linux die Module für den USB-Controller geladen werden, wird dieser re-initialisiert und die Kommunikation über das BIOS ist nicht mehr möglich. Es muss dann eine Kernel-Unterstützung installiert werden. Zur Auswahl stehen zwei verschiedene Module, die mit USB-Tastaturen umgehen können: usbkbd und hid. Der einzigen Vorteil, den der usbkbd-Treiber hat, ist seine Größe: da es ein spezifischer Tastaturtreiber ist, braucht er nur ein Viertel soviel an Arbeitsspeicher (wobei die 16k von hid.o eigentlich auch nicht alle Welt sind). Der hid-Treiber hingegen unterstützt nebenbei auch gleich Mäuse, Joysticks und einige Grafiktabletts. Bei unserem Test stellte sich weiterhin heraus, dass die Sondertasten des Microsoft-Keyboards nur mit dem hid-Treiber nutzbar sind. Abschließend wird noch das Modul keybdev benötigt, welches die Tastatur-Ereignisse an den Konsolentreiber weitervermittelt.

SuSE 6.4 und USB

SuSE 6.4 verwendet kein dynamisches Verfahren, um die nötigen USB-Module zu laden. Dies kann dazu führen, dass bei Verwendung einer USB-Tastatur keine Eingabe mehr möglich ist. In der Datei /etc/config.d/usb.rc.config hat sich ein kleiner Fehler eingeschlichen: statt der zwei Module hid und keybdev wird das Modul usb-keyboard geladen, welches trotz des intuitiven Namens aber gar nicht existiert. Auch das Modul mouse gibt es nicht – mousedev wäre hier richtiger. Folglich sollte unter SuSE 6.4 die Zeile in der Konfigurationsdatei wie folgt aussehen:

USB_DRIVERS="hid keybdev mousedev"

Auch was die Device-Files betrifft, war SuSE in der noch weit verbreiteten Version 6.4 kein Vorbild. Schon beim Anschluss einer Maus wird man verzweifeln, wenn man nicht bemerkt, dass die vorinstallierten Dateien falsch sind. Lösung: Einfach die vorhandenen Dateien löschen und in USB-Introbeschrieben neu anlegen.

Keysonic ACK-298

Nicht nur die 105 Tasten, sondern auch der zusätzliche PS/2-USB-Maus-Anschluss des Keysonic ACK-298 funktionierten wie erwartet. Der integrierte Konverter wandelt die PS/2-Steuersignale auf das USB-Maus-Protokoll um. Dabei werden jedoch "nur" drei Maustasten und ein Rad unterstützt. Die Maus an der Keysonic-Tastatur wird dabei wie jede andere USB-Maus angesprochen – und auch entsprechend eingerichtet (siehe Abschnitt über Mäuse). Trotz des geringen Preises diese Produktes liegen die Hände auf dem mitgelieferten Vorbau bequem auf und die Tasten haben einen festen Druckpunkt – man ist sich also immer darüber im Klaren, ob die Taste gedrückt wurde oder nicht.

Microsoft Internet Keyboard Pro

Die Tastatur an sich besteht eigentlich aus drei Geräten: Den 105 normalen Tasten, den 19 Sondertasten und einem 4-Port-Hub (bei dem jedoch schon 2 Ports intern belegt sind). Der Hub funktioniert problemlos und unterstützt sowohl high- als auch low-Speed-Geräte. Auch die normale Tastatur stellt uns nicht vor Probleme – leider jedoch die Sondertasten. Dies ist aber kein USB-Problem – auch mit dem (ebenfalls vorhandenen) PS/2-Anschluss ist mindestens genauso viel zusätzliche Konfigurationsarbeit nötig, um die Tasten nutzbar zu machen. Da die dafür erforderliche Konfiguration auch bei anderen Tastaturen (zum Beispiel Logitech Cordless Desktop Pro) notwendig ist, haben wir diesem Thema einen eigenen Kasten ("Sondertasten unter Linux") gewidmet.

Integrierte Hubs erleichtern das Leben. Die Sondertasten des Microsoft Internet Keyboard Pro benötigen wie bei anderen Tastaturen eine Sonderbehandlung.

Sondertasten unter Linux

Wird eine Taste gedrückt, erzeugt die Tastatur einen sogenannten Scancode, beim Loslassen einen weiteren. Dass diese bei USB zuerst über hid (Human Interface Device) abgefragt wird und dann über das keybdev in den Kernel gelangen, spielt dabei keine Rolle. Die Scancodes bestehen aus einem (bei Steuertasten aus zwei oder mehren) Byte(s). Beim Loslassen wird immer ein um 0x80 erhöhter Wert generiert (zum Beispiel 0x1e für "a" gedrückt, 0x9e "a" losgelassen). Diese Scancodes können direkt abgefragt werden, etwa mit showkey -s. Anschließend lässt sich dann mit setkeycodes einer Taste ein "Keycode" zuweisen. Davon gibt es 128: Die ersten 88 sind equivalent mit ihren Scancodes – die restlichen dynamisch. Abfragen kann man diese mit getkeycodes. Diesen Keycodes müssen dann zu guter Letzt noch eine Aktion (zum Beispiel das Ausgeben eines Buchstabens an die Applikation) zugeordnet werden. Dies geschieht mit Hilfe von loadkeys. Im folgenden Beispiel konfigurieren wir die "Mailtaste" auf der Tastatur so, dass eine Betätigung derselben das Konsolenprogramm pine startet:

bash> showkey -s kb mode was XLATE press any key (program terminates 10s after last keypress)... 0x9c 0xe0 0x6c 0xe0 0xec bash> setkeycode e06c 120 # wir ordnen dem scancode e06c keycode 120 zu bash> loadkeys \EOF > keycode 120 = F70 > string F70 = "pine\n\n\n\n" > EOF

Bei XFree86 sieht die Sache allerdings etwas komplizierter aus: Der X-Server ist eine der Applikationen, welche die Scancodes direkt vom Kernel abfragen und diese dann weiterverarbeiten. Leider ist das Konzept nicht so gut wie das des Kernels – bei XFree86 sind die Scancodes den keycodes fest zugeordnet, so dass bei einer Änderung derselben der ganze X-Server neu kompiliert werden muss. Sollten Sie sich das zutrauen, finden Sie unter [1] und [2] Anleitungen.

Mäuse

Wie bei den Tastaturen gibt es auch hier zwei Module zur Auswahl: usbmouse und hid. Auch hier kann man bei Verwendung des hid-Moduls nichts falsch machen. Abschließend muss noch mousedev geladen werden, welches die Events an die Device-Datei(en) weiterleitet. Sie werden wie folgt erstellt:

bash> mknod mouse0 c 13 32  # 1. Maus
bash> mknod mouse1 c 13 33  # 2. Maus
bash> mknod mouse2 c 13 34  # 3. Maus
[...]
bash> mknod mice c 13 63  # Mischsignal aller Mäuse

Mit diesen Dateien können die USB-Mäuse wie ihre PS/2-Pendants angesprochen werden, bei der Textkonsole etwa mit /usr/sbin/gpm -tps2 -m /dev/mice.

Logitech MouseMan Wheel

Zusätzlich zu den zwei Tasten und dem Rad vorne hat das Produkt von Logitech noch eine weitere Taste an der Seite. Sie ist auch für größere Hände geeignet; Durch ihre Gummierung an der Seite und die etwas kantige Form liegt die Maus gut in der Hand. Bei der Inbetriebnahme unter Linux gab es keine nennenswerten Probleme.

Klappte Out of the Box: Logitech MouseMan Wheel

Logitech WingMan Gaming Mouse

Diese Maus bringt als einzige der hier getesteten Mäuse kein Rad mit – einziger Vorteil: ein Bauteil weniger, das kaputt gehen könnte. Das ist bei diesem Mausmodell wichtig, denn es ist für höchste Belastungen gebaut worden: zum Spielen. Verwunderlich ist nur, dass das Anschlusskabel nicht stabiler ausgelegt ist als das des oben vorgestellten MouseMan-Kollegen. Ansonsten lässt sich das Gerät sehr leichtgängig und widerstandsfrei positionieren, die Knöpfe sind sehr leichtgängig und bestätigen jeden Druck mit einem deutlich hörbaren "Klick".

Microsoft IntelliMouse Explorer

Diese Maus fällt auf jedem Schreibtisch/Arbeitplatz auf. Sobald sie nämlich aktiviert ist, leuchtet das Intelli-Logo in geheimnisvollem Rot. Dies soll an die neuartige Arbeitsweise erinnern, denn hier wird nicht mehr mit der traditionellen Kugel gearbeitet, sondern Bewegungen werden direkt durch Scannen des Untergrundes festgestellt. In unserem Test gelang dies vorzüglich – es gab mit keiner Unterlage Probleme. Auch die vier Tasten, zwei davon werden mit dem Daumen bedient, funktionierten auf Anhieb. Einziges Manko: unter dem sehr runden Gehäuse leidet etwas der Seitenhalt.

Räder unter X

Um unter XFree86 (ab 3.3.2) das Mausrad benutzen zu können muss es in der Konfigurationsdatei XF86Config (entweder in /etc oder /etc/X11) eingetragen sein. Dazu ergänzen Sie die "Pointer-Section" um folgende Zeile:

ZAxisMapping    4 5
# bzw. bei XFree86-4.0.x:
Option "ZAxisMapping" "4 5"

Hintergrund: Das Rad besteht eigentlich aus zwei Tasten: einer Aufwärts- (4) und einer Abwärts-Taste (5). Nach einem Neustart des X-Servers sollte nun mit xev die "Tastendrücke" als Radbewegungen interpretiert werden. Nach erfolgreicher Modifikation der XF86Config gibt es zwei Möglichkeiten, Applikationen "das Rad beizubringen": IMWheel oder Xdefaults. Diese zwei Methoden unterscheiden sich grundlegend in ihren Konzepten. So ist IMWheel ein Programm, welches explizit gestartet werden muss, während die Xdefaults Standard-Einstellungen für den X-Server enthalten. Dadurch werden keine zusätzliche Ressourcen benötigt, aber die Konfiguration ist nur eingeschränkt möglich: In den Xdefaults wird jeder Radbewegung ein X-Event zugeordnet – bei IMWheel können dagegen der Radbewegung zwei Tasten zugeordnet werden (z. B. Pfeiltaste nach oben und nach unten). Die Konfigurationsdatei hat folgende Struktur:

"Programname"
None,   Up,     Taste
None,   Down,   Taste2
# Und nun mit Tastenkombinationen:
Alt_L,  Up,     Taste3
Alt_L,  Down,   Taste4

So kann jeder Applikation auf einfache Weise das Mausrad beigebracht werden. Nachteil: Egal, an welcher Stelle man in dem Fenster ist, es wird immer die selbe Aktion ausgeführt - dies könnte etwa bei einem multiframed Netscape eher störend sein.

Es gibt auch einige Applikationen, die das Mausrad ohne spezielle Einrichtung nutzen können, da sie die Mausknöpfe 4 und 5 direkt verarbeiten. Hierzu zählen z. B. Staroffice, Wine, XMMS, Gimp und alle Xaw-Programme.

Joysticks

Erst seit Kernelversion 2.2.x ist die Unterstützung für Joysticks fest im Kernel integriert. Das hat dazu geführt, dass Entwickler von Anwendungen, bei denen Joystick-Support sinnvoll wäre (sprich Spiele), bis vor kurzem in der Regel keine Unterstützung für diese wichtige Eingabegeräteklasse angeboten haben. Dank Spiele-Portierer wie Lokigames gehört der Joystick-Einsatz inzwischen aber auch unter Linux zur Normalität. Die Verwendung von USB erfolgt transparent für die Anwendung und USB-Joysticks verhalten sich dabei so, als wenn sie am Gameport angeschlossen wären. Folgende Device-Dateien werden dafür jedoch benötigt, die sich (sofern nicht schon vom Distributor berücksichtigt) mit dem Befehl mknod anlegen lassen:

bash> mknod js0 c 13 0  # 1. Joystick
bash> mknod js1 c 13 1  # 2. Joystick

An Kernel-Modulen benötigt man dabei zusätzlich zu input und hid noch joydev.

Conrad Red Shooter USB

Dieser Joystick hat vier Tasten und sechs Achsen: zwei für die X/Y-Achsen, zwei drehbare Räder auf der Bodenplatte und zwei "Achsen" für die Steuerung der Blickrichtung (Hatstick). Neben dem Schubregler sind fünf LEDs angebracht, die die jeweils aktuelle Einstellung widerspiegeln. Der Joystick ist ausschließlich für Rechtshänder gebaut. Einziges Manko: die maximalen Eingabewerte der X/Y-Achsen werden deutlich vor der maximalen Auslenkung erreicht, was dazu führt, dass der Joystick im Randbereich "taub" ist.

Der "Red Shooter" vom Elektronikversandhändler Conrad hat ein gutes Preis/Leistungsverhältnis.

Logitech WingMan Extreme

Von außen lässt sich zunächst nicht erkennen, was in diesem Gamepad alles steckt: neben den elf Knöpfen gibt es noch eine digitale Richtungssteuerung oder alternativ dazu die Richtungssteuerung über einen Positionssensor. Ist dieser aktiv, wird eine Drehung nach rechts als Steuersignal nach rechts aufgefasst. Von den elf Knöpfen sind nur zehn belegbar – der elfte ist für das Umschalten zwischen Bewegungssensor und Cursor belegt. Die Steuerung über den Sensor funktioniert sehr gut. Die Null-Stellung ist gut zu treffen. Nur für Dauerspieler könnte die Zwangshaltung durch den Joysticks anstrengend werden. Auf jeden Fall ist ein hoher Körpereinsatz garantiert, und der Spielspaß kommt dabei auch nicht zu kurz.

Lässt auch mit Linux kaum Wünsche offen

Microsoft SideWinder Dual Strike

Dieses Gamepad ist etwas gewöhnungsbedürftig. Neben dem "normalen" Cursor und den neun Knöpfen gibt es noch zwei Achsen. Diese lassen sich betätigen, indem die zwei Hälften des SideWinders gegeneinander verdreht werden, aber Vorsicht: nicht jede Richtung ist erlaubt! Diese Art der Steuerung verlangt Disziplin vom Spieler, damit nichts kaputt geht. Dessen war sich anscheinend auch Hersteller Microsoft bewusst, der in die Achsen noch einen Sensor/Knopf eingebaut hat, damit das Betriebssystem warnen kann, sobald ein kritischer Zustand eintritt – mit Linux funktioniert diese Notlösung aber leider nicht.

Das ungewöhnliche Steuerungskonzept des Microsoft SideWinder Dual Strike kann bei heiklen Spielmanövern zu Schäden am Gerät führen.

Eingabe-Konzept

Gleichzeitig mit USB wird im kommenden Kernel 2.4 auch der Versuch gemacht, eine neue Eingabestruktur einzuführen. Diese beruht darauf, dass alle Hardware-Treiber ihre Signale zuerst an das zentrale input-Modul senden. Dort registrieren sich dann auch die sogenannten "Event Handlers", also die Module, welche die Signale verarbeiten und an die device-Dateien weiterleiten. Ein ganz spezieller "Event Handler" ist dabei evdev. Mit dem dazugehörigen Programm evtest [4] lassen sich alle Ereignisse, die ein bestimmtes Gerät aussendet (z. B. Bewegung einer Achse, Tastendruck) erfassen. Als Beispiel sei hier eine Tastatur erwähnt. Es funktioniert aber auch bei allen anderen Treibern, die das input-Modul verwenden. Leider wird diese allgemeine Eingabe-Architektur derzeit nur von USB benutzt:

bash> mknod input0 c 13 64
bash> mknod input1 c 13 65
bash> mknod input2 c 13 66
bash> evtest input0
Event: time 970205127.333596, type 1 (Key), code 29 (LeftControl), value 1
Event: time 970205127.549600, type 1 (Key), code 29 (LeftControl), value 0
Event: time 970205127.997621, type 1 (Key), code 28 (Enter), value 1
Event: time 970205128.133621, type 1 (Key), code 28 (Enter), value 0
Event: time 970205128.805643, type 1 (Key), code 1 (Esc), value 1
Event: time 970205128.901644, type 1 (Key), code 1 (Esc), value 0

Wacom Graphire USB

Grafiktabletts mit USB-Anschluss sind noch relativ selten. Eines der am meisten verkauften ist das Wacom Graphire USB. Es ist auch das einzige, welches direkt im Kernel schon unterstützt wird. Mit dem Modul wacom wird das Tablett als Maus erkannt. Um auch noch die Drucksensitivität nutzen zu können, muss man die XInput-Erweiterung von XFree86 verwenden. Das Modul hierfür finden Sie unter [5]. Um es einzubinden, sind folgende Angaben in der "Input-Section" der Konfigurationsdatei XF86Config nötig.

Section "Module"
  Load "xf86GraphireUSB.so"
EndSection
Section "XInput"
  Subsection "gmouse"
    Port        "/dev/input/input0"
    DeviceName  "Graphire Mouse"
    Mode        Relative
    AlwaysCore
  EndSubsection
  Subsection "gstylus"
    Port        "/dev/input/input0"
    DeviceName  "Graphire Pen"
    Mode        Absolute
    AlwaysCore
  EndSubsection
  Subsection "geraser"
    Port        "/dev/input/input0"
    DeviceName  "Graphire Eraser"
    Mode        Absolute
    AlwaysCore
  EndSubsection
EndSection

Hierbei muss beachtet werden, dass das device fest angegeben sein muss. Es empfiehlt sich, dafür zu sorgen, dass der Wacom-Treiber als erstes geladen wird und somit immer auf "input0" liegt. Nach einem Neustart des X-Servers benötigt man dann nur noch eine Applikation, welche auf XInput zugreift. Hier würde sich natürlich ein Malprogramm anbieten, etwa Gimp. Leider muss zuvor sowohl GTK als auch Gimp neu übersetzt werden. An dieser Stelle sei auf [6] verwiesen.

Nur wenige USB-Grafiktabletts laufen derzeit mit Linux, zum Beispiel das Wacom Graphire USB.

Zwischenbilanz

Die Erfolgsquote der bislang unter Linux getesteten USB-Geräte ist erfreulich hoch. Sie können also im Prinzip ohne Bedenken jede USB-Maus, jede USB-Tastatur und jeden USB-Joystick kaufen. Mit einigen kleineren Modifikationen sollten sich diese auch unter Linux für den Alltagseinsatz einrichten lassen. Lediglich bei den Grafiktabletts mangelt es derzeit noch an ausreichender Unterstützung. In der nächsten Ausgabe werfen wir einen Blick auf Datenspeicher mit USB-Anschluss.

Einem Freund empfehlen    Druckansicht beenden Bookmark and Share
Kommentare