Kernel-Fehler im Treiber für Logitech Unified-Receiver Eingabegeräte
Inhaltsverzeichnis
Logitech Unified-Receiver Eingabegeräte sind Tastatur-Maus-Kombigeräte, die sich einen Funkempfänger (unified receiver) am USB-Port des Computers teilen.
Das Symptom
Ein Computer, an dem nur ein solches Geräte (Funktastaturmaus-Kombination) angeschlossen ist, hat eine US-amerikanische Tastaturbelegung, obwohl im X-Server ein deutsches Tastaturlayout eingestellt wurde und dieses auch mittels setxkbmap -pring auch angezeigt wird.
Führt man als Benutzer in einem X-Terminal den Befehl
$ setxkbmap -layout de -variant nodeadkeys
aus, dann schaltet das Tastaturlayout um.
Sobald man eine normale USB-Tastatur zusätzlich mit dem Linux-PC verbindet, schaltet der X-Server sofort auf das voreingestellte, deutsche Tastatur-Layout um.
Ursache
Der Linux-Kernel meldet den Unified Receiver als Virtual core pointer Device (Maus), jedoch aber nicht als Virtual core keyboard Device am System an. Aus Sicht des X-Servers ist keine Tastatur am System angeschlossen und die systemweiten Tastatureinstellungen werden nicht gesetzt.
Eine ausführliche Erklärung bietet ein Beitrag von Dirk Porezag im Ubuntu Bug-Tracker.
Problemlösung
Eine wirklich Problemlösung gibt es zur Zeit nicht. Sie muss von den Kernel-Entwicklern im Linux-Kernel (Treiber: hid-logitech-dj) implementiert werden. Wir haben allerdings einen Workaround für unsere Debian Edu Systeme gefunden.
Debian squeeze mit GDM
Auf unseren Debian Edu squeeze Systemen setzen wir den Display Manager gdm ein. Zwei Konfigurationsdateien von gdm müssen ein wenig modifiziert werden (hier auf dem Disklserver im Diskless Workstation Chroot):
root@disklserver:/etc/gdm/Init# diff -u Default.orig Default --- Default.orig 2014-02-11 21:17:33.000000000 +0100 +++ Default 2014-02-11 21:17:05.000000000 +0100 @@ -65,7 +65,17 @@ # FIXME: is this all right? Is this completely on crack? # What this does is move the xkb configuration from the GDM_PARENT_DISPLAY # FIXME: This should be done in code. Or there must be an easier way ... - if [ -n "$GDM_PARENT_DISPLAY" ]; then + + ### added for handling the hid-logitech-dh module (Logitech Wireless Keyboards) + if [ -f /etc/default/keyboard ]; then + . /etc/default/keyboard + $SETXKBMAP -model $XKBMODEL + $SETXKBMAP -layout $XKBLAYOUT + $SETXKBMAP -variant $XKBVARIANT + $SETXKBAMP -options $XKBOPTIONS + #### by Mike Gabriel (2014-02-11) + + elif [ -n "$GDM_PARENT_DISPLAY" ]; then XKBSETUP=`( DISPLAY=$GDM_PARENT_DISPLAY XAUTHORITY=$GDM_PARENT_XAUTHORITY $SETXKBMAP -v )` if [ -n "$XKBSETUP" ]; then XKBKEYMAP=`echo "$XKBSETUP" | grep '^keymap' | awk '{ print $2 }'`
root@disklserver:/etc/gdm/PreSession# diff -u Default.orig Default --- Default.orig 2014-02-11 21:20:06.000000000 +0100 +++ Default 2014-02-11 21:15:33.000000000 +0100 @@ -64,4 +64,19 @@ "$XSETROOT" -cursor_name left_ptr -solid "$BACKCOLOR" fi +SETXKBMAP=`gdmwhich setxkbmap` +if [ "x$SETXKBMAP" != "x" ] ; then + + ### added for handling the hid-logitech-dh module (Logitech Wireless Keyboards) + if [ -f /etc/default/keyboard ]; then + . /etc/default/keyboard + $SETXKBMAP -model $XKBMODEL + $SETXKBMAP -layout $XKBLAYOUT + $SETXKBMAP -variant $XKBVARIANT + $SETXKBAMP -options $XKBOPTIONS + #### by Mike Gabriel (2014-02-11) + fi + +fi + exit 0