Замініть декілька ключових кодів за допомогою XKB


10

Я хочу пересунути кілька клавіш навколо XKB. (Чому? На ноутбуці, де деякі клавіші незручно розташовані.) Зараз я використовую xmodmap:

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

Натомість я хочу використовувати XKB і призначати різні символічні імена певним фізичним клавішам, а не присвоювати різні ключові символи певним клавішним кодам. ( Це чому.) Я хочу скан 110 послати PGUPзамість HOME, скан 115 відправити DELEзамість ENDі т.д. Інша частина конфігурації не повинні бути порушені (так PGUP, щоб продовжувати посилати на символ клавіші Priorі т.д., і всі інші клавіші залишаються як вони є).

Як я можу змінити призначення цих конкретних кодових клавіш? Я завантажую файл xkbcomp somefile.xkb $DISPLAY, що мені потрібно вкласти somefile.xkb?

Відповіді:


14

Створіть файл, що містить зміни вашого коду, і збережіть його (наприклад) ~/.xkb/keycodes/local. ( keycodesКаталог жорстко закодований; базовий каталог може бути чимось іншим, і ім'я файлу теж.) Це буде міститись у вашому випадку

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

Щоб завантажити це, запустіть

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

Це виводить ваші поточні налаштування, додає +localдо xkb_keycodes includeоператора та завантажує його у компілятор XKB, додаючи ~/.xkbдо шляху включення. (Якщо ви назвали свій файл чимось іншим, ніж ~/.xkb/keycodes/localвам, очевидно, потрібно буде змінити +localі -I${HOME}/.xkb}.) Таким чином всі інші налаштування збережені.


1
Отже, це очікуваний шлях і спосіб передати його -Iкомутатору! Дякую, мені не вдалося зрозуміти це на сторінці сторінки.
Л. Леврель

працював як шарм! він працював, якщо хочете оновити xkb_symbols, просто замініть на нього xkb_keycodes, працював
zw963

5

Ви можете почати з того, setxkbmap -print > somefile.xkbщоб отримати карту клавіш, яку ви використовуєте в якості основи, а потім перезначте ключові імена, які ви хочете в xkb_keycodesрозділі, як це:

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

Це генерує попередження про те, що деякі імена ключів присвоюються кілька разів, але це працює, тому що враховується лише останній (тому важливо поставити власні налаштування після включення). І файл має перевагу в читанні.

Інший спосіб - це скидання ключової карти, яку ви використовуєте, у файл: xkbcomp $DISPLAY somefile.xkbта зміна тих самих рядків (це та ж сама клавішна карта з включеною оцінкою). Таким чином, немає попереджень для кількох визначень, але воно менш читабельне.


1
Звідки беруться всі ці імена ( evdev+aliases(azerty)тощо)? Я явно хочу зробити відносну зміну, а не повну конфігурацію. Ключі, крім 6, перелічених у питаннях, не повинні впливати, вони повинні залишатися в тому стані, в якому вони були, коли я видав команду.
Жил 'ТАК - перестань бути злим'

1
Вони походять від setxkbmap -print, вони файли /usr/share/X11/xkb/. Я думаю, ви повинні дати цілу xkbcomp
ключову карту,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.