Keycodes (Sondertasten am Laptop)

Hallo,

ich habe mir vor einigen Tagen ein neues Notebook (Samsung X360) gekauft, welches (mittels Tastenkombination Fn+F1-F12) Sonderfunktionen unter Windows zur Verfügung stellt.
Diese wollte ich nun auch unter Linux einrichten.
Ich habe also xev gestartet und festgestellt, dass einige der Tasten gar keine Keycodes schicken. Also in dmesg nachgeschaut, wo beim drücken von Fn+F2 folgendes stand:
Code:
[ 1092.749191] atkbd.c: Unknown key pressed (translated set 2, code 0x83 on isa0060/serio0).
[ 1092.749204] atkbd.c: Use 'setkeycodes e003 <keycode>' to make it known.
Zum Ausprobieren wollte ich nun also a auf die Taste legen, Bei Fn+F2 sollte also einfach ein a ausgegeben werden.
Ein sudo setkeycodes e003 30 müsste dies erledigen, also führe ich es aus.
Auf die 30 kam ich, indem ich showkeys in einem Terminal laufen lies und dort a eingab. Komischerweise gibt mir showkeys für die Taste a 30, xev für die Taste a aber den Keycode 36 zurück (Woran liegt das?)
Nun soweit funktioniert es auch, bis auf eine Kleinigkeit - wenn ich nun einmal Fn+F2 drücke, bekomme ich ein Dauerfeuer von a's. Es ist nicht nur ein Tastendruck, sondern es werden fleißig weiter a's geschrieben, obwohl ich die Taste längst losgelassen habe. Dies ist natürlich nicht der Sinn der Sache, sonst startet nachher in der Endkonfiguration mein Mailprogramm pro Tastendruck gleich 1000-mal ;)
Woran liegt das und wie kann ich das korrigieren?
Hier noch ein paar Systeminfos: Ich nutze Ubuntu 8.10 (32bit) mit dem 2.6.27-11-generic Kernel.

Vielen Dank schonmal für eure Hilfe!
-Heinzi
 
die Sondertasten sind doch sicherlich hauptsächlich die Helligkeit/Standby und die Multimedia-Tasten?!

hab noch nie probiert, mit setkeycodes irgendwas einzeln zu setzen.

den ganzen Multimedia-Kram mach ich bei mir über die Datei ~/.Xmodmap (musst du evtl. erst anlegen)
http://wiki.ubuntuusers.de/Xmodmap

hier mal noch 2 Listen, was es da an XF86*-Codes und auch anderen Codes alles möglich ist:
http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap
http://wiki.linuxquestions.org/wiki/XF86_keyboard_symbols
 
Danke für die schnelle Antwort :)
Ja, um genau diese Tasten geht es. Hauptsächlich will ich WLAN an und ausschalten können.
Die Tasten, die z.B. von xev oder showkey erkannt werden (denen also bereits ein keycode zugeordnet ist), sind nicht das Problem.
Das Problem sind eben die Tasten, die noch keinen Keycode zugeordnet haben.
Wenn ich nämlich z.B. Fn+F2 drücke, reagiert weder xev noch showkey.
showkey -s reagiert übrigens auch nicht, aber nach einem Tastendruck steht in dmesg der oben zitierte Ausschnitt. Dann muss ich dem Hardware-Scancode der Taste mittels setkeycodes einen Keycode zuweisen. Anschließend kann ich dann diesem Keycode mit .Xmodmap eine Aktion zuordnen.
Oder habe ich in den Internet-Anleitungen zu Tastenzuordnungen etwas falsch verstanden?
Lg
 
Da wirst du evtl. Pech haben. Solche Laptop-"Sondertasten" benötigen oft zusätzliche Programme um angesteuert zu werden. Deswegen gibt es Programme wie toshutiils für Toshiba-Laptops, tpb für Thinkpads usw.
 
Die Tasten werden ja erkannt und ich kann damit arbeiten. Insofern glaube ich nicht, dass ich externe Treiber brauche. Das Problem ist, dass es zu gut funktioniert.
Wenn ich nach der Zuordnung von Fn+F2 zum Keycode 30 (entspricht der Taste A) Fn+F2 drücke, wird ein a geschrieben. Nur eben nicht nur eines, sondern das System tut so, als hätte ich die Taste gar nicht mehr losgelassen.

edit: noch ein paar Infos, die ich inzwischen herausgefunden habe:
1) Ich kann ja mit setkeycodes einem Scancode einen Keycode zuordnen, dem ich dann mit xmodmap eine Funktion zuordnen kann. Am Threadbeginn hatte ich mich darüber gewundert, dass die Zuordnung bei der Taste A nicht ganz stimmt, das kann ich jetzt präzisieren: Wenn ich der Taste mit dem Scancode e009 den Keycode 232 zuordnen will, muss ich nicht "setkeycodes e009 232", sondern "setkeycodes e009 224" schreiben. Ich muss in dem Zuordnungsbefehl also immer 8 vom Keycode abziehen und dann funktioniert die Zuordnung mit xmodmap.
Ich kann somit jetzt auch zum Beispiel schon die Taste für "Bildschirm heller" dem entsprechenden Keycode aus xmodmap zuordnen und der Bildschirm wird beim Drücken der Taste auch heller. Nur eben immer weiter heller, er merkt also nicht, dass ich die Taste längst losgelassen habe.

2) Bevor ich die Tasten mit setkeycodes zugewiesen habe, werden sie weder von showkey noch von xev erkannt. Nach der Tastenzuweisung erkennt sie showkey richtig (übrigens mit dem um 8 kleineren Keycode) und xev erkennt sie mit dem größeren Keycode. Während xev allerdings nach einem kurzen Tastendruck dauernd die KeyDown-Events bekommt, ist das bei showkey anders. Der zeigt genau 1x pro Tastendruck, dass die entsprechende Taste gedrückt wurde und bekommt kein Dauerfeuer der Taste. (showkey lasse ich übrigens im Strg+Alt+F1-Terminal laufen, xev natürlich in einem X11-Terminal). Also scheint es so, dass Hardwareseitig und Kernelseitig (showkey) alles funktioniert und erst der X-Server (xev) bzw xmodmap irgendwas durcheinander bringt und dann das Tastendauerfeuer schickt. Woran könnte das denn liegen?
 
Gibt es evtl. noch einen Scancode für "Taste losgelassen"?
Ich weis nur das Tastaturen bei gedrückter Taste einmal ein Scancode für "xy-wurde gedrückt" absenden, und dann halt auch einen für "xy-wurde losgelassen".
Die Wiederholung usw. macht dann das Bios bzw. das Betriebsystem auch immer solang bis die Releasemeldung durchkommt.
(Hab mal auf einem PowerPC eine Tastaturabfrage in ASM schreiben müssen)
Evtl. liegt hier die Lösung vergraben.

Beste Grüße, phx1024
 
Hm wenn ich showkey -s eingebe und dann eine Taste wie z.B. A drücke, kommt zuerst ein Scancode für "Taste gedrückt" (0x1e) und wenn ich die Taste gedrückt lasse, wird der dann vom System wiederholt und kommt ganz oft. Sobald ich die Taste dann loslasse, kommt ein anderer Scancode für "Taste losgelassen" (0x9e).
Wenn die gedrückte Taste nun aber eine der Tasten ist, die mittels setkeycodes zugewiesen wurde, werden gleich 2 Scancodes geschickt und ob ich sie danach gedrückt lasse und später loslasse oder gleich loslasse macht keinen Unterschied - es werden erst beim nächsten Drücken der Taste wieder ein Scancode geschickt.
Was übrigens auch komisch ist: scancode -s gibt die Scancodes der Tasten erst NACH der Zuweisung mittels setkeycodes aus. Davor tut es so, als sei die Taste nicht gedrückt worden. Sollte nicht die Taste sowieso immer einen Scancode schicken und setkeycodes dem nur einen Keycode zuweisen? setkeycodes ändert doch nichts am Scancode, also wieso wird der Scancode erst nach der Zuweisung ausgegeben?
 
Zurück
Oben