
У меня текущая настройка:
- Одна клавиатура PS2
- Одна USB-клавиатура
Затем я использую это:
xinput --create-master SecondKeyboard
xinput --reattach "Keyboard Id" "Master Id"
чтобы разделить их.
Я думал, что могу просто создать собственную раскладку и вуаля, одна клавиатура для письма и другая для сочетаний клавиш, но потом обнаружил, что xkb не позволяет создавать раскладки, которые нажимают несколько клавиш (например, нажимая capslockи выполняя ctrl+ alt+ f4).
Поэтому я подумал, что xbindkeys должен работать только на одной из клавиатур, поскольку у них разные идентификаторы. Могу ли я это сделать?
решение1
Краткое описание различных задействованных уровней:
Ваша клавиатура генерирует скан-коды. Они сопоставляются слоями ввода ядра с событиями кодов клавиш на /dev/input/eventX
. Драйвер X evdev
принимает эти события и транслирует их в символы клавиш. Затем расширение XInput делает все события от подчиненных устройств виртуальной базовой клавиатуры доступными как обычные события X, в то время как другие события доступны только как события XInput.
Итак, у вас есть следующие варианты:
1) Настройте пользовательское сопоставление сканкода и кода клавиши. Эти сопоставления относятся к каждому устройству, так что это на самом деле возможно, но это делается через IOCTL, и, похоже, для этого нет готовых инструментов, кромеhwdbв udev
. Затем вы можете использовать новые клавиши в xkb
. Обе клавиатуры сохраняются как основные клавиатуры.
2) Расширьте, xbindkeys
чтобы понимать события XInput, чтобы вы могли использовать его для привязки событий с неосновной клавиатуры. Это потребует программирования, но должно быть сравнительно просто. В этом случае отделите одну клавиатуру от основной клавиатуры, как вы уже сделали.