Zastąp kilka kodów dostępu za pomocą XKB

10

Chcę przetasować kilka klawiszy za pomocą XKB. (Dlaczego? Na laptopie, na którym niektóre klucze są niewygodnie zlokalizowane.) Obecnie używam xmodmap:

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

Zamiast tego chcę użyć XKB i przypisać różne nazwy symboliczne dla niektórych kluczy fizycznych, zamiast przypisywać różne klucze do niektórych kodów. ( Właśnie dlatego.) Chcę, aby kod klucza 110 był wysyłany PGUPzamiast HOME, kod klucza 115, aby wysyłać DELEzamiast END, itp. Nie można wpływać na resztę konfiguracji (tak PGUPaby nadal wysyłać Priorklucze itp., A pozostałe klucze pozostaną tak jak oni).

Jak mogę zmienić przypisanie tych konkretnych kodów? Załaduję plik xkbcomp somefile.xkb $DISPLAY, co muszę włożyć somefile.xkb?

Gilles „SO- przestań być zły”
źródło

Odpowiedzi:

14

Utwórz plik zawierający zmiany kodu klucza i zapisz go jako (na przykład) ~/.xkb/keycodes/local. ( keycodesKatalog jest zakodowany na stałe; katalogiem podstawowym może być coś innego, a także nazwa pliku.) Będzie to zawierać w twoim przypadku

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

Aby załadować to, uruchom

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

Spowoduje to wyświetlenie bieżących ustawień, dodanie +localdo xkb_keycodes includeinstrukcji i załadowanie jej do kompilatora XKB, dodając ~/.xkbdo ścieżki dołączania. (Jeśli nazwa twojego pliku jest inna niż ~/.xkb/keycodes/local, oczywiście musisz zmienić +locali -I${HOME}/.xkb}). W ten sposób wszystkie pozostałe ustawienia zostaną zachowane.

Stephen Kitt
źródło
1
Więc to jest oczekiwany przebieg i sposób przekazać go do -Iprzełącznika! Dzięki, nie byłem w stanie zrozumieć tego na stronie podręcznika.
L. Levrel,
działało jak urok! działało, jeśli chcesz zaktualizować xkb_symbols, po prostu zamień na niego xkb_keycodes, działało
zw963
5

Możesz zacząć od setxkbmap -print > somefile.xkbuzyskania mapy klawiszy, której używasz jako podstawy, a następnie ponownie zdefiniuj nazwy klawiszy, które chcesz w tej xkb_keycodessekcji:

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

To generuje ostrzeżenia, że ​​niektóre nazwy kluczy są przypisywane wiele razy, ale działa, ponieważ liczy się tylko ostatnia (dlatego ważne jest, aby umieścić niestandardowe ustawienia po dołączeniu). Plik ma tę zaletę, że jest czytelny.

Innym sposobem jest zrzucenie użytej mapy klawiszy do pliku: xkbcomp $DISPLAY somefile.xkbi zmodyfikowanie tych samych linii (jest to ta sama mapa klawiszy z ocenianą zawartością). W ten sposób nie ma ostrzeżeń dla wielu definicji, ale jest mniej czytelny.

Leiaz
źródło
1
Skąd pochodzą te wszystkie nazwy ( evdev+aliases(azerty)itp.)? Wyraźnie chcę dokonać zmiany względnej, a nie pełnej rekonfiguracji. Nie można wpływać na klucze inne niż 6 wymienione w pytaniach, muszą pozostać w stanie, w jakim były, kiedy wydałem polecenie.
Gilles „SO- przestań być zły”
1
Pochodzą z setxkbmap -print, są plikami /usr/share/X11/xkb/. Myślę, że musisz podać całą mapę klawiszy, xkbcompale mogę się mylić ...
Leiaz