Allgemein
Knowledge Base
- Neue Struktur (In Arbeit)
- Computertechnisches
Community
Privat
Anliegen:
Sie wollen eine Tastatur mit speziellen 'Internet' oder anderen Zusatztasten unter Linux betreiben. Es handelt sich hierbei im wesentlichen um eine normale PC Tastatur die an den normalen Tastaturanschluß angeschlossen ist aber noch weitere Spezialtasten und damit deutlich mehr als 102 bzw. 105 Tasten besitzt. Es passiert keine sichtbare Reaktion wenn Sie auf eine der Zusatztasten drücken. Sie würden aber gerne diese Tasten nutzen.
Hintergrund
Diese Tasten verhalten sich im wesentlichen wie die anderen Tasten auf der Tastatur auch. Es existiert nur keine entsprechende Tabelle die diese Spezialtasten in die gewünschte Funktion `übersetzt'. Dabei gibt es im Linuxkernel sogar gleich zwei dieser Tabellen. Die erste Übersetzt den von der Tastatur generierten Scancode in einen sogenannten Keycode. Dieser wird über eine weitere, vom Benutzer ladbare und länderabhängige keymaps in die tatsächliche Tastenbelegung verwandelt.
Um die Sondertasten unter der grafischen Oberfläche - dem X-Window System - zu aktivieren können Sie hierzu Informationen aus SondertastenUnterX entnehmen.
Da die Spezialtasten unbekannte Scancodes erzeugen müssen Sie leider beide Tabellen verändern. Im folgenden aber eine Schritt für Schritt Anleitung.
Vorgehen:
Sie können das im folgende beschriebene Verfahren zur Zeit nur auf der Textconsole verwenden. Bedingt durch die spezielle Behandlung der Tastatur durch den X-Server werden diese Einstellungen leider nicht unter X übernommen.
Um die Zusatztasten auf der Console zu verwenden können Sie wie folgt vorgehen.
Finden Sie zuerst einmal heraus welche Spezialtaste welchen Scancode erzeugt. Dies können Sie mit dem Kommando showkey -s
erledigen. Betätigen Sie danach alle Spezialtasten die in der Regel einen mit 0xe0
beginnenden Code erzeugen den Sie sich am besten auf einem Zettel o.ä. notieren. Dies kann dann zum Beispiel folgendermassen aussehen:
erde:~# showkey -s
kb mode was XLATE
press any key (program terminates 10s after last
keypress)...
0x9c
0xe0 0x25
0xe0 0xa5
0xe0 0x26
0xe0 0xa6
0xe0 0x32
0xe0 0xb2
Um das Programm zu beenden müssen Sie einfach 10 Sekunden warten ohne in der Zwischenzeit eine Taste zu drücken. Im obigen Beispiel wurden 3 Spezialtasten gedrückt, jede Taste erzeugt einen 2 Byte Code beim Betätigen und beim wieder Loslassen, sie müssen sich nur den Wert der beim Herunterdrücken der Taste angezeigt wird notieren. Der allererste Wert der vom Programm angezeigt wird stammt übrigens vom Loslassen der Return Taste ...
Aus dem obigen Beispiel können Sie also die folgenden Codes entnehmen:
0xe0 0x25 für die 1. Taste
0xe0 0x26 für die 2. Taste
0xe0 0x32 für die 3. Taste
Dies können Sie dann z.B. über ein Shellskript wie folgt einem sogenannten Keycode zuordnen. Keycodes zwischen 112 und 125 sind noch nicht durch andere Tasten belegt, daher stehen diese für die Zuordnung an Spezialtasten zu Ihrer freien Verfügung. Dies erreichen Sie mit folgenden Kommandos.
setkeycodes e025 112
setkeycodes e026 113
setkeycodes e032 114
Nun erzeugt der Kernel also die entsprechenden Keycodes beim Betätigen der Spezialtasten, diesen müssen nun nur noch über die zweite Tabelle entsprechenden Funktionen zugeordnet werden. Dies erreichen Sie über die Tastaturtabelle die beim Booten über eines der Startskripte zum einstellen der deutschen Tastaturbelegung automatisch geladen wird. Sie finden die Tastaturtabelle für die deutsche Tastatur unter dem Dateinamen /usr/lib/kbd/keymaps/i386/qwertz/de-latin1-nodeadkeys.map.gz
. Entpacken Sie die Datei mit dem Kommando gunzip um Sie verändern zu können. Beachten Sie bitte die man-page zu dem Kommando loadkeys und zur Datei keymaps um spezielle Funktionalität auf diese Tasten zu legen. In meinem Beispiel lege ich die Tasten F13 - F15 auf diese Tasten und ordne einer Spezialtaste ein häufig gebrauchtes Kommando zu. Hängen Sie hierzu an diese Tastaturtabelle de-latin1-nodeadkeys.map
die folgenden Zeilen an.
keycode 112 = F13
keycode 113 = F14
keycode 114 = F15
string F13 = "ls\n"
Nach dem Laden der neuen Tastaturtabelle mit dem Kommando
loadkeys de-latin1-nodeadkeys.map
können Sie durch den Druck auf die erste definierte Spezialtaste das Kommando ls aufrufen. So können Sie auch allen anderen Tasten beliebige Tastenfunktionen (Die Sie der Manpage zu `keymaps' entnehmen können) oder auch ganze Zeichenketten zuordnen, die Ihnen dann auf der Konsole zur Verfügung stehen.