Я недавно купил клавиатуру Unicomp, которая поставляется со сменными правыми и клавишами Windows. Клавиатура идентифицирует как это на lsusb:
Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc
Есть ли способ заставить ядро (то есть не основанное на xmodmap) поменять местами правые клавиши и клавиши Windows, чтобы каждое приложение видело их в местах перестановки, даже если они получают необработанный ввод с клавиатуры (замена содержимого с помощью xmodmap этого не сделает) ? Есть ли способ сделать это только для этой клавиатуры?
linux
keyboard-layout
FUZxxl
источник
источник
Ответы:
Да, это возможно с помощью XKB. В отличие от xmodmap, XKB может переназначать ваши ключи для отдельных устройств.
Примечание: убедитесь, что у вас есть xkbcomp> 1.2.0
Сначала перечислите свои устройства с:
xinput list
Вы получите что-то вроде этого:
Определите строку вашего устройства и отредактируйте следующий скрипт оболочки, заменив строку sed на строку, соответствующую имени вашего устройства. Затем измените ключи, которые вам нужно переназначить.
Пример: загрузите
xev
и нажмите клавишу, которую вы хотите переназначить. Предположим, вы узнали, что это ключевой код 84. Найдите 84 в https://gist.github.com/zoqaeski/3880640 . Ключевое имя там есть<KP5>
. Затем найдите ключ, которым вы хотите заменить его (в той же ссылке, ниже ) и скопируйте то, что находится внутри скобок. Повторите процесс для всех ключей, которые вы хотите.Затем отправьте его (вы можете добавить его в свой .xinitrc). Все сделано! Теперь нажатие клавиш должно генерировать желаемый вывод только для указанного вами устройства.
Изменить : Недавно я заметил, что по какой-то причине новая конфигурация не применяется сразу. Сначала необходимо нажать клавишу на другой клавиатуре, а затем проверить настроенные клавиши на измененной клавиатуре. Я не знаю, почему это происходит, может быть, какой-то кеш.
источник
sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p'
в) Да, вам обязательно нужно сначала проверить его, заменив$remote_id
его идентификатором. Обратите внимание, что там есть две ссылки$remote_id
, вы изменили обе?$remote_id
кода обязательно закомментируйте строку,[ "$remote_id" ] || exit
если вы еще этого не сделали, иначе она просто вылетит.$9
не сработает, ты имел ввиду9
?Для всех, кто приезжает сюда из Google и хочет получить ответ, более соответствующий тому, на что изначально надеялся спрашивающий, мне известны два способа переназначения событий на
evdev
уровне, чтобы изменение относилось ко всем приложениям:udev предоставляет API для изменения записей аппаратной базы данных, которые управляют отображениями между кодами сканирования и кодами клавиш. Эта страница ArchiWiki , которая содержит инструкции, прямо говорит, что она будет работать как для X11, так и для ввода с консоли.
Суть заключается в том, что вы создаете пользовательскую запись, в
/etc/udev/hwdb.d/
которой содержатся шаблон сопоставления устройств и некоторые определения повторного сопоставления кода скан-кода, а затем запускаетесь,systemd-hwdb update
чтобы перестроить базу данных иudevadm trigger
применить ее без перезагрузки.Учитывая, что Wayland не использует клавиатурную подсистему X11, а основные композиторы Wayland, такие как GNOME Shell и Weston, не реализуют пользовательские интерфейсы для настройки соответствующих аспектов libinput, кто-то написал демон с именем evdevremapkeys, который решает проблему аналогично драйверу пространства пользователя G15Daemon для Logitech. G15 игровые клавиатуры.
(Он проглатывает события, которые он намеревается переназначить, так что ничто другое, прослушивающее устройство, не сможет их увидеть, затем генерирует исправленные события через
uinput
API для создания устройств ввода уровня ядра из пространства пользователя.)источник
Для тех, кто не справился с опцией @Watcom, просто добавьте новый файл сопоставления, например:
в / usr / share / X11 / xkb / symbols / как root (ubuntu, может отличаться для вашего дистрибутива), назовите файл «custom». Запросите текущую строку макета с помощью
setxkbmap -device <device id> -print | grep xkb_symbols
и добавьте+custom
к ней. Установите новый макет с переназначенными ключами и измененной строкой макета:Эффект не является постоянным и, к сожалению, сбрасывается при подключении другой клавиатуры, пока не понял, как это исправить. Вы можете добавить указанную выше команду к своему устройству
.bashrc
, поэтому при перезапуске ключи меняются местами.источник