Funktionstasten von Microsoft Sculpt Mobile Keyboard unter Linux neu zuordnen

665
daniel.neumann

Situation

Ich habe ein Microsoft Sculpt Mobile Keyboard, das über Bluetooth verbunden ist. Auf meinem Laptop läuft eine xUbuntu 16.04.

Die F1auf F12Tasten der Sculpt Mobile Keyboard Arbeit als Funktionstasten Wiedergabe / Pause, Mute, .... Um die Verwendung F1zu F12Tasten, wie beabsichtigt, muss man die Presse die FnTasten, die auf der rechten Seite . Dies ist ziemlich unangenehm, wenn Sie ALT+ F4... drücken möchten . Ich möchte dauerhaft zu den FxSchlüsseln wechseln (oder den FnSchlüssel sperren ). Außerdem würde Ich mag schalten PageUpund PageDownSchlüssel gegen Homeund End.

Windows-Lösung

Verwenden Sie AutoHotKey wie in beschrieben

Nicht funktionierende Lösung

Die Antwort gilt für eine andere Tastatur

Linux-Lösung für andere Keyboards (funktioniert nicht)

Es sollte möglich sein, Schlüssel mit den Befehlszeilenwerkzeugen xkbcompoder setxkbmapwie hier beschrieben zu ändern oder zu wechseln :

Basierend auf diesen Fragen und Antworten habe ich xevdie Schlüsselnamen (XKB-Bezeichner) der betreffenden Schlüssel gefunden. Ich wollte folgendes Mapping erstellen:

# F1 to F5 (F5 probably does not work) I172 -> FK01 MUTE -> FK02 VOL- -> FK03 VOL+ -> FK04 FIND -> FK05  # F11 and F12 FK22 -> FK11 FK23 -> FK12  # switch Page Up and Page Down with Home and End PGUP -> HOME HOME -> PGUP PGDN -> END END -> PGDN 

So habe ich den entsprechenden Code erstellt:

xkb_symbols "remote" { key <I172> { type= "CTRL+ALT", symbols[Group1]= [ F1, F1, F1, F1, XF86Switch_VT_1 ] }; key <MUTE> { type= "CTRL+ALT", symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ] }; key <VOL-> { type= "CTRL+ALT", symbols[Group1]= [ F3, F3, F3, F3, XF86Switch_VT_3 ] }; key <VOL+> { type= "CTRL+ALT", symbols[Group1]= [ F4, F4, F4, F4, XF86Switch_VT_4 ] }; key <FIND> { type= "CTRL+ALT", symbols[Group1]= [ F5, F5, F5, F5, XF86Switch_VT_5 ] }; key <FK22> { type= "CTRL+ALT", symbols[Group1]= [ F11, F11, F11, F11, XF86Switch_VT_11 ] }; key <FK23> { type= "CTRL+ALT", symbols[Group1]= [ F12, F12, F12, F12, XF86Switch_VT_12 ] }; key <PGDN> { [ End ] }; key <END> { [ Next ] }; key <PGUP> { [ Home ] }; key <HOME> { [ Prior ] }; }; 

Und fügte sie der vorhandenen Keymap-Definition xkbcomphinzu und fügte +custom(remote)sie der xkb_symbolsVariablen des Key-Mappings des jeweiligen Geräts hinzu. Es hat nicht funktioniert.

Ich denke, dass sie vielleicht nicht funktionieren, weil die Tastatur als Zeiger und nicht als Tastatur erkannt wird. Die xinput listAusgabe sagt:

⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Logitech USB Mouse id=11 [slave pointer (2)] ⎜ ↳ AlpsPS/2 ALPS DualPoint TouchPad id=14 [slave pointer (2)] ⎜ ↳ AlpsPS/2 ALPS DualPoint Stick id=15 [slave pointer (2)] ⎜ ↳ Microsoft Sculpt Mobile Keyboard id=17 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Power Button id=6 [slave keyboard (3)] ↳ Video Bus id=7 [slave keyboard (3)] ↳ Video Bus id=8 [slave keyboard (3)] ↳ Power Button id=9 [slave keyboard (3)] ↳ Sleep Button id=10 [slave keyboard (3)] ↳ Laptop_Integrated_Webcam_E4HD id=12 [slave keyboard (3)] ↳ AT Translated Set 2 keyboard id=13 [slave keyboard (3)] ↳ Dell WMI hotkeys id=16 [slave keyboard (3)] 

Alternative Lösungen (nicht versucht)

Ich las über einige Mäuse, die als Tastatur und nicht als Zeiger erkannt wurden. Das Ändern des Linux-Kernel-Codes + Neukompilieren war eine der Lösungen. Ich möchte den Kernel nicht neu kompilieren, nur damit meine Tastatur richtig funktioniert.

Hardware-Lösung (Arbeit)

Funktionstasten von Microsoft Sculpt Mobile Keyboard unter Linux neu zuordnen

Frage

  • Ist meine Annahme in "Linux-Lösung für andere Keyboards" falsch?
  • Wenn die Antwort auf die erste Frage nein ist : Wie löse ich das beschriebene Problem softwarebasiert (Schlüssel wechseln und ersetzen), ohne meinen Kernel neu zu kompilieren?
0
Andere Lösungen zufällig anzuwenden, ohne die Details zu verstehen, funktioniert selten. Zunächst müssen Sie herausfinden, welche Ereignisse für F1-F12 sowohl mit als auch ohne Fn-Taste generiert werden. Verwenden Sie "evtest" für die Kernel-Eingabeschicht und "xev" für die X-Schicht, und bearbeiten Sie die Frage entsprechend. * Nachdem * das bekannt ist, kann man die richtige Tastaturbelegung finden (und Sie können dies auch selbst tun, indem Sie nach Tutorials / Erklärungen suchen). Das Neukompilieren des Kernels ist für eine Tastaturbelegung nie erforderlich. dirkt vor 5 Jahren 0
@dirkt Danke für den Kommentar. Ich habe die Frage bearbeitet und die geänderte Tastenbelegung hinzugefügt, die ich gestern ausprobiert habe. Ich habe auch das aktuelle Key-Mapping mit `xkbcomp -xkb $ DISPLAY my_xkbmap` extrahiert, es manuell geändert und das geänderte Mapping mit xkbcomp geladen (ich habe den Befehl vergessen). Die neue Tastenzuordnung hat nicht funktioniert. Durch erneutes Extrahieren der Schlüsselzuordnung mit `xkbcomp` wurde die neue geänderte Zuordnung zurückgegeben (die neue Schlüsselzuordnung wurde jedoch gespeichert, funktionierte jedoch aus irgendeinem Grund nicht). Da meine Tastatur als Zeiger und nicht als Tastatur erkannt wird, denke ich, dass sie nur für Tastaturen funktioniert daniel.neumann vor 5 Jahren 0
Ich werde evtest später versuchen. daniel.neumann vor 5 Jahren 0
Selbst wenn Ihre Tastatur standardmäßig als Zeiger klassifiziert ist, kann sie immer noch Schlüsselereignisse generieren. Dies ist also nicht das Problem. Schauen Sie sich unbedingt auch evtest und die Eingabeebene an, denn als Erstes müssen Sie entscheiden, ob Sie die Eingabeebene oder die X-Ebene verwenden, um die Zuordnung zu ändern. dirkt vor 5 Jahren 0
@dirkt `evtest` liefert ähnliche Ergebnisse wie` xev`. Die Funktionstaste bei 'F1' ist 'Play / Pause', 'F2' ist 'Stummschaltung' usw. Die Funktionstasten bei 'F5' bis 'F12' Triggertastenkombinationen (z. B. Drücken von 'F10' liefert die Ereignisse 'CTRL_L + Windows_L + Tab ') - `xev` und` evtest` sind in diesem Fall konsistent. daniel.neumann vor 5 Jahren 0
@dirkt OK. Da ich es nicht über die x-Ebene zum Laufen gebracht habe (was auch immer ich falsch gemacht habe), werde ich es über die Eingabeebene versuchen. Ich habe eine schnelle Suche nach "Input Layer Keyboard Mapping" durchgeführt und finde es schwierig, einen Ausgangspunkt zu finden .... Können Sie mir ein paar Schlüsselwörter oder den Namen eines Befehlszeilentools geben? daniel.neumann vor 5 Jahren 0

0 Antworten auf die Frage