Dieser Artikel ist eventuell veraltet.
Nach dem Kauf eines Logitech Cordless Desktop S510 kam der Wunsch auf, die Sondertasten dieses Keyboards auch unter KDE nutzen zu können. Hier eine kleine Beschreibung, was zum Erfolg führte.
Das grundlegende Element zur Keyboard-Abfrage ist xkb (http://www.xfree86.org/current/XKB-Config.html). Die Konfigurationsdateien
dürften sich unter in der Regel unter /etc/X11/xkb
.
WICHTIG: Unter Debian mit Xorg7 gibt es auch unter /etc/X11/xkb
die erwarteten Dateien, doch leider werden die
überhaupt nicht mehr genutzt. Diese scheinen noch ein Überbleibsel aus Xfree86-Zeiten zu sein. Unter Debian sind die
Dateien unter /usr/share/X11/xkb
abgelegt.
Im weiteren Verlauf spreche ich nur noch von XKBROOT.
Zunächst hatte ich die Hoffnung, dass bereits ein fertiges Keyboard-Layout für meine neue Tastatur passt. Also habe ich Kontrollzentrum unter Regionaleinstellungen & Zugangshilfen→Tastaturlayout mal unterschiedliche Tastaturdefinitionen ausprobiert. Dabei stellte ich fest, dass nach Auswahl von Logitech Cordless Desktop iTouch schon sehr viele Tasten funktionieren:
Das ist doch schon mal ein vielversprechender Anfang. Es fehlen also nur noch
Zunächst muss ein symbolischer Name für die neue Keyboard-Definition gewählt werden. Logitech-Keyboards beginnen immer mit
logi. Ich habe meine Definition mit logis510 bezeichnet. Dieser Name muss jetzt unter XKBROOT/rules
in drei Dateien
eingetragen werden.
In XKBROOT/rules/xorg
muss eine Zeile in „! $inetkbds
“ um logis510 erweitert werden:
logiaccess logicdp logicdpa logicdit logis510 logicink logiciink logiclx300 \
In XKBROOT/rules/xorg.lst
muss eine Zeile an passender Stelle eingefügt werden (dort, wo auch die anderen Logitech-Definitionen stehen:
logis510 Logitech Cordless Desktop S510
Der Vollständigkeit halber sollte auch eine Eintragung in XKBROOT/rules/xorg.xml
gemacht werden. Dies wird derzeit noch nicht von KDE
ausgewertet, doch man kann ja nie wissen:
<model> <configItem> <name>logis510</name> <description>Logitech Cordless Desktop S510</description> <description xml:lang="af">Logitech Cordless Desktop S510</description> <description xml:lang="az">Logitech Cordless Desktop S510</description> <description xml:lang="cs">Logitech Cordless Desktop S510</description> <description xml:lang="da">Logitech Cordless Desktop S510</description> <description xml:lang="en_GB">Logitech Cordless Desktop S510</description> <description xml:lang="es">Logitech Cordless Desktop S510</description> <description xml:lang="fi">Logitech Cordless Desktop S510</description> <description xml:lang="fr">Logitech Cordless Desktop S510</description> <description xml:lang="hu">Logitech Cordless Desktop S510</description> <description xml:lang="it">Logitech Cordless Desktop S510</description> <description xml:lang="ka">Logitech Cordless Desktop S510</description> <description xml:lang="nl">Logitech Cordless Desktop S510</description> <description xml:lang="ru">Logitech Cordless Desktop S510</description> <description xml:lang="sk">Logitech Cordless Desktop S510</description> <description xml:lang="sl">Logitech Cordless Desktop S510</description> <description xml:lang="sq">Logitech Cordless Desktop S510</description> <description xml:lang="sr">Logitech Cordless Desktop S510</description> <description xml:lang="sr@Latn">Logitech Cordless Desktop S510</description> <description xml:lang="sv">Logitech Cordless Desktop S510</description> <description xml:lang="tr">Logitech Kablosuz MasaÃŒstÃŒ S510</description> <description xml:lang="uk">Logitech Cordless Desktop S510</description> <description xml:lang="vi">Logitech Cordless Desktop S510</description> <description xml:lang="zh_CN">çœ~Wæ~J~@çœ~Qé~Y~Eæ~W| 圱æ~I~K</description> <description xml:lang="zh_TW">çŸ~Eæ~J~@ç¶²é~Z~[ç~D¡åœ±æ~I~K</description> </configItem> </model>
Wenn nun das KDE-Kontrollzentrum aufgerufen wird, erscheint unter Regionaleinstellungen & Zugangshilfen→Tastaturlayout die
gerade eben eingerichtete Keyboard-Definition. Man kann diese auch auswählen, doch leider funktioniert noch gar nix. Aber es ist zumindest schon mal ein erstes Erfolgserlebnis
Jetzt wird's kompliziert, denn die Logitech-Tastatur sendet Keycodes, die derzeit vom Keyboard-Treiber nicht erkannt werden. Doch unter Linux lässt sich ja alles anpassen. Also ist Verzweiflung nicht angesagt.
Exemplarisch stelle ich das jetzt mal an der Taste <Mode>+<F1>
dar. Zunächst einmal benötigen wir ein Shell-Fenster (konsole), wo
wir mit sux -
root-Rechte bekommen. Hier lässt man sich mit tail -f /var/log/messages
Fehlermeldungen und Hinweise des Systems anzeigen.
Jetzt drücken wir einmal die <Mode>
-Taste und danach <F1>
. Jetzt zeigt /var/log/messsages folgende Meldungen:
atkbd.c: Unknown key pressed (translated set 2, code 0xbb on isa0060/serio0). atkbd.c: Use 'setkeycodes e03b ' to make it known.
In einem zweiten Konsole-Fenster schaut man sich jetzt die Datei /usr/include/linux/input.h an, um dort einen passenden Keycode herauszusuchen. Diese Datei definiert symbolische Namen und ordnet diese einem Keycode zu. Ich habe mich für KEY_PROG1 mit dem Code 148 entschieden. Nun kann man mit
setkeycodes e03b 148
den Keycode festlegen. Nach der Eingabe des Kommandos kann man die <Mode>+<F1>
-Taste drücken, diesmal erscheinen jedoch keine Meldungen
mehr in /var/log/messages
. Die Taste wird also vom Tastaturtreiber erkannt. Das kann man auch mit Hilfe des Tools showkey
sichtbar machen:
# showkey kb Modus war RAW (Warning: Currently running in a pseudoterminal.) The reported keycodes are probably wrong. Taste drücken (Programm beendet sich 10s nach dem letzten Tastendruck)...) 0x00 0x81 0x94 0x80 0x81 0x94
Die erste Zeile steht für das Drücken, die zweite Zeile für das Loslassen der Taste <F1>
. Der Hexwert 0x94 entspricht unserem Keycode 148.
Die Taste verhält sich also wie gewünscht.
Bis hier hin war noch alles logisch und nachvollziehbar. Doch jetzt wird es magisch (dass heißt, ich habe nicht verstanden was da passiert ).
Das kleine Tool 'xev' zeigt an, welcher Keycode letztlich in X11 ankommt und das ist merkwürdigerweise nicht die 148
xev
muss aus dem Konsole-Fenster aufgerufen werden. Es öffnet sich ein kleines Fenster, dass Maus- und Tastatureingaben verarbeitet.
Der wirklich spannende Teil passiert im Konsole-Fenster, denn hier werden die verarbeiteten X11-Events angezeigt. Das Drücken einer Taste
löst ebenfalls ein Event aus:
KeyPress event, serial 31, synthetic NO, window 0x4a00001, root 0x65, subw 0x0, time 2598767338, (-449,-191), root:(149,250), state 0x10, keycode 159 (keysym 0x1008ff40, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False
Doch interessanterweise, wird hier nicht der Keycode 149, sondern 159 angezeigt. Hier scheint X11 auch noch mal zu mappen. Ich habe dazu
aber bislang noch keine Dokumentation gefunden Ok, dann müssen wir das erst mal akzeptieren. In der Datei XKBROOT/keycodes/xfree86 findet
sich die zu 159 passende X11-Bezeichnung. In unserem Fall ist das <I1F>.
OK, so weit so gut. Jetzt kommt echte Handarbeit, denn nun müssen die oben beschriebenen Einzelschritte für alle unbekannten Tasten
wiederholt werden. Daraus entsteht dann nachfolgende Datei mit setkeycodes-Anweisungen. Ich habe die Datei als root unter
/etc/init.d/logitech_s510 abgelegt und nach /etc/rc2.d/S35logitech_s510
(Debian) bzw. /etc/rc5.d/S35logitech_s510
gelinkt.
Dadurch ist sichergestellt, dass die Keycodes auch beim nächsten Neustart wieder korrekt belegt sind.
Datei /etc/init.d/logitech_s510
# SCAN KEYCODE LX-code X11-code Keyboard #----------------------------------------------------------------------------- setkeycodes e03b 148 # KEY_PROG1 <I1F> (Mode+F1, Battery) setkeycodes e03c 149 # KEY_PROG2 <I17> (Mode+F2, OOWriter) setkeycodes e03d 202 # KEY_PROG3 <I28> (Mode+F3, OOCalc) setkeycodes e03e 203 # KEY_PROG4 <I29> (Mode+F4, OOImpress) setkeycodes e03f 131 # KEY_UNDO <I07> (Mode+F5, Undo) setkeycodes e040 182 # KEY_REDO <I0A> (Mode+F6, Again) setkeycodes e041 210 # KEY_PRINT <I39> (Mode+F7, Print) setkeycodes e042 234 # KEY_SAVE <I55> (Mode+F8, Save) setkeycodes e043 189 # KEY_F19 <I04> (Mode+F9) setkeycodes e044 190 # KEY_F20 <K5A> (Mode+F10) setkeycodes e057 191 # KEY_F21 <K74> (Mode+F11) setkeycodes e058 192 # KEY_F22 <I79> (Mode+F12) setkeycodes 6a 183 # KEY_F13 <I77> (Rotate) setkeycodes 55 184 # KEY_F14 <K5D> (Zoom+) setkeycodes e004 185 # KEY_F15 <K5E> (Zoom+, lang gehalten) setkeycodes 6f 186 # KEY_F16 <K5F> (Zoom-) setkeycodes 6b 187 # KEY_F17 <MDSW> (Zoom-, lang gehalten) setkeycodes 71 188 # KEY_F18 <NFER> (Zoom100%) setkeycodes 72 193 # KEY_F23 <K6D> (Shuffle)
Nun muss jedem Keycode noch eine entsprechende X11-Bezeichnung zugeordnet werden. Dazu muss die Datei XKBROOT/symbols/inet um folgenden Eintrag erweitert werden:
// Logitech Cordless Desktop S510 partial alphanumeric_keys xkb_symbols "logis510" { include "inet(logitech_base)" key <I1F> { [ XF86Launch0 ] }; // Mode+F1 key <I17> { [ XF86Launch1 ] }; // Mode+F2 key <I2B> { [ XF86Launch2 ] }; // Mode+F3 key <I2C> { [ XF86Launch3 ] }; // Mode+F4 key <I07> { [ Undo ] }; // Mode+F5 key <I0A> { [ Redo ] }; // Mode+F6 key <I39> { [ Print ] }; // Mode+F7 key <I55> { [ XF86Save ] }; // Mode+F8 key <I04> { [ XF86Launch4 ] }; // Mode+F9 key <K5A> { [ XF86Launch5 ] }; // Mode+F11 key <K74> { [ XF86Launch6 ] }; // Mode+F12 key <I79> { [ XF86Launch7 ] }; // Mode+F13 key <I77> { [ XF86Search ] }; // Rotate key <K5D> { [ XF86Forward ] }; // ZoomIn key <K5F> { [ XF86Back ] }; // ZoomOut key <NFER> { [ XF86Launch8 ] }; // Zoom 100% key <K6D> { [ XF86Launch9 ] }; // Shuffle };
Wenn man nun im KDE-Kontrollzentrum das frisch angelegte Tastaturlayout Logitech Cordless Desktop Pro S510 auswählt, können anschließend die neu definierten Tasten im KDE-Menüeditor verwendet werden. Die Mühe hat sich also gelohnt.