Пожалуйста, помогите мне решить следующую проблему: у меня есть USB-педаль, которую я хочу использовать как контрольный ключ для моей работы. Пока система идентифицирует, что эта педаль работает как клавиша F2 (я использую Ubuntu 17), и я хотел бы переназначить систему, чтобы понять ключ F2 как клавишу управления. Я попробовал несколько руководств, некоторые из которых относятся к решению Xmodmap, которое кажется устаревшим, другое - к XKB, которое я из-за своей глупости не понял. Я рассматриваю некоторые предложения от вас, как я могу это сделать. Спасибо заранее.
XKB не может быть лучшим способом изменить поведение этого устройства, но он должен быть возможен в традиционных X-средах. Более новые контексты XKB, такие как Wayland или kmscon, могут не обеспечивать детализацию, необходимую для настройки отдельных макетов XKB на произвольных устройствах. Он также не будет функционировать под традиционной консолью.
Применение udev hwdb переопределения для выполнения этого изменения должно работать под всеми этими.
В традиционных средах X setxkbmap принимает -device ] и xkbcomp использует -i:
-device device Указывает идентификатор цифрового устройства устройства ввода, которое будет обновляться с новой раскладкой клавиатуры.Используйте xinput -list, чтобы найти номера идентификаторов устройства.
Чтобы доказать этот функционал, используйте setxkbmap ... -print для создания основного макета, сохраните его в файл, затем загрузите это с помощью xkbcomp filename.xkb $DISPLAY. Возможно, вам понадобится setxkbmap во время тестирования.
$ setxkbmap -layout us -option '' -print > f2toctrl.xkb
Отредактируйте файл f2toctrl.xkb - мы меняем только строку xkb_symbols:
// generated with `setxkbmap -print` and modified
// load: xkbcomp -i DeviceID# filename $DISPLAY
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols {
include "pc+us+inet(evdev)"
// existing key definition (see `xkbcomp $DISPLAY - | grep -A 3 FK02`)
// key <FK02> {
// type= "CTRL+ALT",
// symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]
// };
// patterned after ctrl:nocaps option
// see /usr/share/X11/xkb/symbols/ctrl
replace key <FK02> { [ Control_L, Control_L ] };
modifier_map Control { <FK02>, <LCTL> };
};
xkb_geometry { include "pc(pc105)" };
};
Теперь загрузите его (замените N на идентификатор устройства, который вы нашли в xinput -list):
$ xkbcomp -i N f2toctrl.xkb $DISPLAY
Вы можете проверить свои изменения с помощью xkbcomp -i N $DISPLAY - | less и проверить кнопку
Для обычных (не-DE) X-окружений, команда загрузки может быть добавлена в ~/.xinitrc или другие сценарии запуска windowmanager , Вам нужно добавить это переопределение в базу данных XKB системы для использования с большинством композиторов Wayland и DE, таких как GNOME / KDE, но в этих контекстах я не уверен, как вы примените переопределение только к устройству педали. Если это было возможно, я бы создал /usr/share/X11/xkb/symbols/pedal, чтобы удерживать переопределение Ctrl, продемонстрированное выше (и потенциально другие полезные переопределения для устройства).
Очень упрощенный файл макета может выглядеть так: [ ! d21] // /usr/share/X11/xkb/symbols/pedal
// convert F2 key operation to Ctrl
default partial modifier_keys
xkb_symbols "basic" {
name[Group1]= "USB Pedal as Ctrl";
replace key <FK02> { [ Control_L, Control_L ] };
modifier_map Control { <FK02>, <LCTL> };
};
XKB не может быть лучшим способом изменить поведение этого устройства, но он должен быть возможен в традиционных X-средах. Более новые контексты XKB, такие как Wayland или kmscon, могут не обеспечивать детализацию, необходимую для настройки отдельных макетов XKB на произвольных устройствах. Он также не будет функционировать под традиционной консолью.
Применение udev hwdb переопределения для выполнения этого изменения должно работать под всеми этими.
В традиционных средах X setxkbmap принимает -device ] и xkbcomp использует -i:
-device device Указывает идентификатор цифрового устройства устройства ввода, которое будет обновляться с новой раскладкой клавиатуры.Используйте xinput -list, чтобы найти номера идентификаторов устройства.
Чтобы доказать этот функционал, используйте setxkbmap ... -print для создания основного макета, сохраните его в файл, затем загрузите это с помощью xkbcomp filename.xkb $DISPLAY. Возможно, вам понадобится setxkbmap во время тестирования.
$ setxkbmap -layout us -option '' -print > f2toctrl.xkb
Отредактируйте файл f2toctrl.xkb - мы меняем только строку xkb_symbols:
// generated with `setxkbmap -print` and modified
// load: xkbcomp -i DeviceID# filename $DISPLAY
xkb_keymap {
xkb_keycodes { include "evdev+aliases(qwerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols {
include "pc+us+inet(evdev)"
// existing key definition (see `xkbcomp $DISPLAY - | grep -A 3 FK02`)
// key <FK02> {
// type= "CTRL+ALT",
// symbols[Group1]= [ F2, F2, F2, F2, XF86Switch_VT_2 ]
// };
// patterned after ctrl:nocaps option
// see /usr/share/X11/xkb/symbols/ctrl
replace key <FK02> { [ Control_L, Control_L ] };
modifier_map Control { <FK02>, <LCTL> };
};
xkb_geometry { include "pc(pc105)" };
};
Теперь загрузите его (замените N на идентификатор устройства, который вы нашли в xinput -list):
$ xkbcomp -i N f2toctrl.xkb $DISPLAY
Вы можете проверить свои изменения с помощью xkbcomp -i N $DISPLAY - | less и проверить кнопку
Для обычных (не-DE) X-окружений, команда загрузки может быть добавлена в ~/.xinitrc или другие сценарии запуска windowmanager , Вам нужно добавить это переопределение в базу данных XKB системы для использования с большинством композиторов Wayland и DE, таких как GNOME / KDE, но в этих контекстах я не уверен, как вы примените переопределение только к устройству педали. Если это было возможно, я бы создал /usr/share/X11/xkb/symbols/pedal, чтобы удерживать переопределение Ctrl, продемонстрированное выше (и потенциально другие полезные переопределения для устройства).
Очень упрощенный файл макета может выглядеть так: [ ! d21] // /usr/share/X11/xkb/symbols/pedal
// convert F2 key operation to Ctrl
default partial modifier_keys
xkb_symbols "basic" {
name[Group1]= "USB Pedal as Ctrl";
replace key <FK02> { [ Control_L, Control_L ] };
modifier_map Control { <FK02>, <LCTL> };
};