Intereting Posts
Как просмотреть основной файл (общий) ALSA не воспроизводит на HDMI Ошибка при попытке создания pango (1.34.1) и harfbuzz (0.9.18) из источника Создание сертификата * .local ssl Разделить разделенный запятыми список, игнорирующий запятые в соответствии с {} Использование цикла bash для запуска программы, которая использует одинарные кавычки в командной строке, где одинарные кавычки сводят на нет намерения сценария bash Использование «зарезервированных» кодов для статуса выхода сценариев оболочки Не удается запустить гаджет Intel power Ошибка ввода / вывода, когда rm / mkdir строки отсутствуют после конкатенирования двух или более переменных строк в bash Xfce 4.10 не работает после жесткого сброса Debian 7.11 Как изменить местоположение журналов SMF, зарегистрированных по умолчанию Правильный владелец, группа и разрешения при установке файла изображения Как прошивать прошивку под Linux на практике? Как убить все процессы с использованием данного GPU?

Переопределите несколько кодов клавиш с XKB

Я хочу перетасовать несколько ключей вокруг с XKB. (Почему? На ноутбуке, где некоторые клавиши неудобно расположены.) В настоящее время я использую xmodmap:

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

Вместо этого я хочу использовать XKB и назначать разные символические имена для определенных физических клавиш, а не назначать разные ключи для определенных кодов клавиш. ( Вот почему.) Я хочу, чтобы PGUP код 110 отправлял PGUP вместо HOME , код 115 для отправки DELE вместо END и т. Д. Остальная часть конфигурации не должна быть затронута (поэтому PGUP должен продолжать отправлять keyym Prior и т. Д. , и все остальные ключи остаются такими, какими они есть).

Как я могу изменить назначение этих конкретных кодов клавиш? Я xkbcomp somefile.xkb $DISPLAY файл с xkbcomp somefile.xkb $DISPLAY , что мне нужно добавить в somefile.xkb ?

Создайте файл, содержащий изменения вашего кода, и сохраните его как (например) ~/.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_keycodes и загружает его в компилятор XKB, добавляя ~/.xkb к пути include. (Если вы назвали свой файл чем-то иным, чем ~/.xkb/keycodes/local , вам, очевидно, нужно будет изменить +local и -I${HOME}/.xkb} .) Таким образом сохраняются все остальные настройки.

Вы можете начать с setxkbmap -print > somefile.xkb чтобы получить 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 вы используете в файл: xkbcomp $DISPLAY somefile.xkb и изменить те же строки (это та же самая xkbcomp $DISPLAY somefile.xkb ). Таким образом, для нескольких определений нет предупреждений, но это менее читаемо.