Benutzer-Werkzeuge

Webseiten-Werkzeuge


Neues Tastaturlayout in KDE hinzufügen

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.

Welches Keyboard passt zu mir

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:

  • Poweroff
  • Internet-Browser (Homepage)
  • MediaPlayer
  • Mediaplayer Start/Pause
  • Mediaplayer Stop
  • Mediaplayer Nächstes Stück
  • Mediaplayer Vorheriges Stück
  • Mediaplayer Lautstärke +/-
  • Mediaplayer Mute

Das ist doch schon mal ein vielversprechender Anfang. Es fehlen also nur noch

  • Rotate
  • Zoom +
  • Zoom -
  • Zoom 100%
  • Shuffle
  • Sonderfunktionen für die Funktionstasten F1-F12

Neue Keyboard-Beschreibung im KDE-Kontrollzentrum auftauchen lassen

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 ;-)

Keycodes ermitteln

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 8-o 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)

Die Kür

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.

Cookies helfen bei der Bereitstellung von Inhalten. Diese Website verwendet Cookies. Mit der Nutzung der Website erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Computer gespeichert werden. Außerdem bestätigen Sie, dass Sie unsere Datenschutzerklärung gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website. Weitere Information
Zuletzt geändert: 29.01.2015 21:11

Seiten-Werkzeuge