Карабинер для Linux?
Фон: последние пять лет я использовал аппаратные средства Mac (большинство ноутбуков MacBook Pro по большей части) и программное обеспечение после многих лет использования Gnu/Linux на обычном ПК с эргономичными клавиатурами. Что еще более важно, как тяжелый пользователь Emacs, переход на Mac был болезненным, а стандартная короткая клавиатура Apple была безумной и неизбежной. Я предотвратил RSI с помощью инструмента Karabiner для сделайте два небольших, но очень важных изменения: 1) изменение клавиши "колпачок" для генерации клавиши меню (f13) при нажатии в одиночку, а ключевой код с управляющим ключом - при нажатии другой клавиши; 2) сменить ключ возврата аналогичным образом, получить возврат при нажатии в одиночку и ключ ключа с измененным ключом при нажатии другой клавишей. Разочарованный недавними решениями Apple для аппаратного и программного обеспечения, теперь я возвращаюсь в Gnu/Linux (Ubuntu, если это имеет значение), но придерживается ноутбуков Mac.
Вопрос: поскольку Karabiner - это инструмент только для OS X, у которого нет доступного аналога Gnu/Linux, похоже, мне придется писать и/или модифицировать некоторый код, чтобы получить ключ caplock и return Карабинер допускает двойное поведение. Автор Karabiner пишет, что xbindkeys и rbindkeys выполняют ключевое переназначение, но на первый взгляд они, похоже, не обрабатывают поведение двойной функции. Теперь я борюсь с портированием Карабинера или созданием нового инструмента целиком. И, несомненно, могут быть и другие подходы. Поэтому мой вопрос: какие советы по программированию вы бы предложили для решения этой проблемы? Особенно тот, который может быть разработан в часах, днях или неделях, а не в месяцах.
Примечания
1) Существуют различные подходы, связанные с изменениями поведения, такими как управление переключением и командные ключи. Многие из них были испытаны с разной степенью удовлетворения. Параллельный подход Karabiner - это ИМХО, далеко и далеко, наиболее эффективный в том, что он обеспечивает симметрию управляющего ключа на домашней строке клавиатуры и для всех приложений!
2) Также может быть предложено другое оборудование. Я пробовал компьютеры Dell, HP, Lenovo, Acer и смотрел гораздо больше. Ни один из них не сопоставим с объединенной мощностью, размером, чувством и стилем лучших продуктов Apple, хотя и по высокой цене. Например, Dell Precision 7510 громоздка и имеет трекпад, который похож на наждачную бумагу; Lenovo X1 (очень хорошая система) не имеет порта Thunderbolt; и др.
3) Внешние клавиатуры также не являются стартером из-за требования к ноутбуку; внешняя клавиатура на самолете или поезде не происходит.
Ответы
Ответ 1
Вы можете добиться этого на TTY, Wayland и X11, используя Interception Tools, который напрямую взаимодействует с libevdev и libudev.
Установите Инструменты перехвата и такой плагин, как caps2esc или interception-k2k. Затем вам нужно настроить перехват для использования плагина. Для caps2esc вы можете использовать следующий файл /etc/udevmon.yaml
:
- JOB: "intercept -g $DEVNODE | caps2esc | uinput -d $DEVNODE"
DEVICE:
EVENTS:
EV_KEY: [KEY_CAPSLOCK, KEY_ESC]
Затем запустите его как root:
nice -n -20 /usr/bin/udevmon -c /etc/udevmon.yaml
Вы должны убедиться, что он начинается при входе в систему. Для systemd вы можете использовать следующий сервис:
[Unit]
Description=udevmon
[Service]
ExecStart=/usr/bin/nice -n -20 /usr/bin/udevmon -c /etc/udevmon.yaml
[Install]
WantedBy=multi-user.target
Для только для X11 вы можете использовать setxkbmap и xcape.
Сначала измените Caps Lock
, чтобы он действовал как модификатор Ctrl
:
setxkbmap -option caps:ctrl_modifier
Затем установите Caps Lock
в качестве клавиши Menu
, если она нажата меньше, чем время ожидания (по умолчанию 500 мс):
xcape -e 'Caps_Lock=Menu'
xcape
работает как демон, поэтому вам нужно убедиться, что он запускается при входе в систему. setxkbmap
устанавливает раскладку клавиатуры только для текущего сеанса X, вы можете установить ее постоянно в файлах конфигурации xinitrc, xprofile или X.
Постскриптум Для тех, кто хочет использовать внешнюю клавиатуру, Ultimate Hacking Keyboard (UHK) с открытым исходным кодом позволяет использовать эту функцию.