Возможно, я пропускаю что-то, но это кажется xkb, не загружает раздел microsoft4000 из/usr/share/X11/xkb/symbols/inet.
$ setxkbmap -print -verbose 10
Setting verbose level to 10
locale is C
Trying to load rules file ./rules/evdev...
Trying to load rules file /usr/share/X11/xkb/rules/evdev...
Success.
Applied rules from evdev:
rules: evdev
model: microsoft4000
layout: us
options: caps:escape
Trying to build keymap using the following components:
keycodes: evdev+aliases(qwerty)
types: complete
compat: complete
symbols: pc+us+inet(evdev)+capslock(escape)
geometry: microsoft(natural)
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+us+inet(evdev)+capslock(escape)" };
xkb_geometry { include "microsoft(natural)" };
};
Теперь, в inet, с microsoft4000 клавиатуры существует раздел
// Microsoft Natural Ergonomic Keyboard 4000
partial alphanumeric_keys
xkb_symbols "microsoft4000" {
include "inet(media_nav_common)"
key <I192> { [ XF86Launch1 ] };
key <I193> { [ XF86Launch2 ] };
key <I194> { [ XF86Launch3 ] };
key <I195> { [ XF86Launch4 ] };
key <I196> { [ XF86Launch5 ] };
// Missing because of lack of support from kbd driver: Zoom in and
// slider.
};
Но это, кажется, проигнорировано. Если я контролирую, нажатия клавиш с концом xev нажимают клавиши запуска 1-5, я получаю следующее:
$ xev | awk -F'[ )]+' '/^KeyPress/ { a[NR+2] } NR in a { printf "%-3s %s\n", $5, $8 }'
192 XF86Launch5
193 XF86Launch6
194 XF86Launch7
195 XF86Launch8
196 XF86Launch9
который должен быть похожим на XF86Launch1-5? Действительно ли это - ошибка, или я пропускаю что-то?
Я работаю на Ubuntu 16.04.
Реальный вопрос, можно ли сделать вещи, которые Вы хотите сделать с этими ключами?
Они - всегда те же ключи после перезагрузки или перевхода? Можно ли установить их как ярлыки (с и без модификаторов)? Видит ли XKB ключ как XF86Launch1 или XF86Launch5 менее важны, чем:
Действительно ли это - ошибка?
Возможно. Это, конечно, не загружается inet(microsoft4000)
символы (это microsoft4000
раздел /usr/share/X11/xkb/symbols/inet
Вы заключаете в кавычки). Похоже, что это могло быть включено из образцового определения или как отдельная опция, но нет никакого правила для него (в /usr/share/X11/xkb/rules/evdev*
). Изменение на microsoft7000
модель может стать ближе к тому, что Вы ожидаете.
... но вероятно нет. Точное определение этих ключей действительно не имеет значения - пока они определяются как что-то распознаваемое, и уникальные друг от друга, XKB сделал свое задание. С этой целью Ваши ключи, кажется, работают просто великолепно. Я подозреваю inet(microsoft4000)
дата символов от с 2006 выходами, но была позже заменена более широким inet(evdev)
раздел.
Вы видите XF86Launch5 и так далее потому что inet(evdev)
раздел определяет эти ключи:
// Evdev Standardized Keycodes
partial alphanumeric_keys
xkb_symbols "evdev" {
...
key <FK14> { [ XF86Launch5 ] };
key <FK15> { [ XF86Launch6 ] };
key <FK16> { [ XF86Launch7 ] };
key <FK17> { [ XF86Launch8 ] };
key <FK18> { [ XF86Launch9 ] };
};
... и /usr/share/X11/xkb/keycodes/evdev
подтверждает, что они переводятся как коды клавиши 192-196
:
default xkb_keycodes "evdev" {
...
<FK14> = 192;
<FK15> = 193;
<FK16> = 194;
<FK17> = 195;
<FK18> = 196;
...
Давайте загрузим его так или иначе!
Во-первых, скажите настройкам GNOME оставлять клавиатуру в покое:
gsettings set org.gnome.settings-daemon.plugins.keyboard active false
# change false to true to reenable
Затем выполните это для тестирования:
setxkbmap -print |
sed -e '/xkb_symbols/s/"[[:space:]]/+inet(microsoft4000)&/' |
xkbcomp - $DISPLAY
Этот конвейер выводит Ваш setxkbmap -print
вывод, sed
добавляет inet(microsoft4000)
определение в строку символов:
xkb_symbols { include "pc+us+inet(evdev)+capslock(escape)+inet(microsoft4000)" };
... который затем передается по каналу к xkbcomp
для компиляции и установки в Xserver. Теперь xev
должен показать Вам XF86Launch1-5
ключи.
Если это работает, можно сделать это постоянным изменением несколькими способами.
Можно уехать gsettings
отключенный, и добавляют setxkbmap ... | sed ... | xkbcomp ...
конвейерно обработайте к a $HOME/.xprofile
сценарий, который будет работать при входе в систему. (Поочередно, перенаправьте вывод sed к $HOME/.config/my-xkb-map
и Вам только будет нужно xkbcomp
команда при входе в систему.)
Можно отредактировать /usr/share/X11/xkb/rules/evdev*
добавить файл символов как официальную опцию. evdev
перевод опции в файл; evdev.lst
перечисляет описание для каждой опции; evdev.xml
версия XML описаний. Я полагаю, что необходимо разобраться в нем в evdev.xml
чтобы инструменты GUI показали новый вариант, но только evdev.lst
необходим для setxkbmap
понять это. Изменения в этих системных файлах могли быть перезаписаны будущими обновлениями, тем не менее, так сделайте резервные копии или a sed
сценарий или a patch
файл для добавления их въезжает задним ходом при необходимости.
XKB является большим! Давайте заставим эти ключи сделать что-то еще полностью!
Стоп там, ковбой. Можно, конечно, создать собственную настройку, если Вы хотите. Скопируйте это inet(microsoft4000)
пункт символа в другой файл и определяет те ключи однако, Вам нравится. F13? XF86AudioMicMute?
Посмотрите ресурсы в конце того ответа суперпользователя для большего количества кроличьей норы XKB.