Überschreiben Sie einige Schlüsselcodes mit XKB

10

Ich möchte ein paar Schlüssel mit XKB mischen. (Warum? Auf einem Laptop, auf dem sich einige Schlüssel ungünstig befinden.) Ich verwende derzeit xmodmap:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

Stattdessen möchte ich XKB verwenden und bestimmten physischen Schlüsseln unterschiedliche symbolische Namen zuweisen, anstatt bestimmten Schlüsselcodes unterschiedliche Schlüsselsymbole zuzuweisen. ( Dies ist der Grund.) Ich möchte, dass der Schlüsselcode 110 PGUPanstelle von HOME, der Schlüsselcode 115 DELEanstelle von ENDusw. gesendet wird. Der Rest der Konfiguration darf nicht beeinflusst werden (also PGUPdas Senden des PriorSchlüsselsymbols usw., und alle anderen Schlüssel bleiben erhalten so wie sie sind).

Wie kann ich die Zuordnung dieser spezifischen Schlüsselcodes ändern? Ich lade eine Datei mit xkbcomp somefile.xkb $DISPLAY, was muss ich einfügen somefile.xkb?

Gilles 'SO - hör auf böse zu sein'
quelle

Antworten:

13

Erstellen Sie eine Datei mit Ihren Keycode-Änderungen und speichern Sie sie beispielsweise als ~/.xkb/keycodes/local. (Das keycodesVerzeichnis ist fest codiert; das Basisverzeichnis kann etwas anderes sein, und der Dateiname auch.) Dies wird in Ihrem Fall enthalten

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

Führen Sie zum Laden aus

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

Dies gibt die aktuellen Einstellungen, fügt +localzu der xkb_keycodes includeAussage, und lädt es in den XKB Compiler, das Hinzufügen ~/.xkbzu dem Include - Pfad. (Wenn Sie als Ihre Datei etwas anderes genannt ~/.xkb/keycodes/local, werden Sie natürlich ändern müssen +localund -I${HOME}/.xkb}.) Auf diese Weise sind alle anderen Einstellungen bleiben erhalten.

Stephen Kitt
quelle
1
Also dies ist der erwartete Pfad und Weise , sie zu dem passieren -ISchalter! Danke, ich konnte das nicht auf der Manpage herausfinden.
L. Levrel
Lief wie am Schnürchen! es hat funktioniert, wenn Sie xkb_symbols aktualisieren möchten, ersetzen Sie einfach xkb_keycodes damit, funktioniert
zw963
5

Sie können zunächst setxkbmap -print > somefile.xkbdie Keymap abrufen, die Sie als Basis verwenden, und dann die gewünschten Schlüsselnamen in dem folgenden xkb_keycodesAbschnitt neu definieren :

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

Dies generiert Warnungen, dass einige Schlüsselnamen mehrfach zugewiesen werden, funktioniert jedoch, da nur der letzte zählt (daher ist es wichtig, die benutzerdefinierten Einstellungen nach dem Einschließen zu setzen). Und die Datei hat den Vorteil, lesbar zu sein.

Eine andere Möglichkeit besteht darin, die von Ihnen verwendete Keymap in eine Datei zu kopieren xkbcomp $DISPLAY somefile.xkbund dieselben Zeilen zu ändern (es handelt sich um dieselbe Keymap mit den ausgewerteten Includes). Auf diese Weise gibt es keine Warnungen für mehrere Definitionen, aber es ist weniger lesbar.

Leiaz
quelle
1
Woher kommen all diese Namen ( evdev+aliases(azerty)usw.)? Ich möchte ausdrücklich eine relative Änderung durchführen, keine vollständige Neukonfiguration. Andere als die in den Fragen aufgeführten 6 Schlüssel dürfen nicht betroffen sein. Sie müssen in dem Zustand bleiben, in dem sie sich befanden, als ich den Befehl erteilte.
Gilles 'SO - hör auf böse zu sein'
1
Sie kommen aus dem setxkbmap -print, sie sind Dateien aus /usr/share/X11/xkb/. Ich denke, Sie müssen eine ganze Keymap geben, xkbcompaber ich könnte mich irren ...
Leiaz