Вопрос или проблема
Я использую Karabiner на Mac OS X, чтобы сделать некоторые клавиши
модификаторами: например, нажатие Enter — это Enter, а
удерживание — это Meta. Легко ли сделать то же самое в Linux?
PS. Я имею в виду: я хочу, чтобы Enter работал как клавиша модификатора и как Enter, в зависимости от того, удерживается ли он или нажимается и отпускается. (Это не то же самое, что липкие клавиши.)
Два варианта
Я использую At Home Modifier, чтобы достичь этой цели. Разработчик также предлагает
xcape в качестве альтернативы.
Сравнение
Разработчик At Home Modifier говорит следующее о xcape.
Плюсы: Не нужно перекомпилировать для каждого обновления X-сервера или xf86-input-evdev. Код меньше.
Минусы: Может быть недоступен для Wayland, так как расширения XTest и Record могут быть исключены. Вероятно, мешает другим программам, которые используют Record Extension, например, AutoKey или xnee.
Мой опыт
Я использовал оба варианта. Лично я предпочитаю At Home Modifier по нескольким причинам.
- Очень легко настроить At Home Modifier с правилом
xorg.conf
. Следовательно, это может быть применимо к конкретным клавиатурам, оставляя другие клавиатуры без изменений. - At Home Modifier работает на системном уровне, что означает, что он лучше подходит для многопользовательских сред (если только вам не нужны другие настройки, в этом случае xcape может быть более подходящим).
- At Home Modifier сопоставляет клавишу модификатора (например, Meta) с “нажатой” клавишей (например, Enter), тогда как xcape делает наоборот. Когда X не запущен, например, в консоли или дисплейном менеджере, я предпочел бы иметь доступ к “реальной” запасной клавише, т.е. Enter. Я использовал бы это гораздо чаще в этих ситуациях.
Первый плюс xcape, упомянутый выше, может или не может вас затронуть, в зависимости от вашего дистрибутива. Если вы сразу обновите Ubuntu (я так делал), возможно, вам придется перекомпилировать At Home Modifier самостоятельно, если ppa отстает (он отставал хотя бы на несколько месяцев). Если вы используете Arch Linux, пакет AUR актуален и довольно легко обновить номер версии. Старая версия, в любом случае, обычно совместима.
В 2024 году, работая на wayland
, X11
или в консоли, вы можете “просто” установить Interception Tools, вместе с некоторыми плагинами через менеджер пакетов, например, Debian:
apt-get install interception-tools interception-caps2esc
После этого вам просто нужно объявить пайплайн, включая caps2esc
, в /etc/interception/udevmon.yaml
Это превращает CapsLock в CTRL, когда удерживается, и ESC, когда нажимается.
Вы также можете установить плагин dual-function-keys
, чтобы применить произвольное сопоставление для любой клавиши на вашей клавиатуре.
Пример (основной) udevmon.yaml
будет выглядеть следующим образом:
- JOB: interception -g $DEVNODE | caps2esc | dual-function-keys -c /etc/interception/dual-function-keys.yaml | uinput -d $DEVNODE
DEVICE:
EVENTS:
EV_KEY: [KEY_CAPSLOCK, KEY_ESC, KEY_TAB, KEY_LEFTSHIFT]
с dual-function-keys.yaml
, выглядящим похоже на:
MAPPINGS:
- KEY: KEY_LEFTSHIFT
TAP: KEY_F8
HOLD: KEY_LEFTSHIFT
- KEY: KEY_LEFTALT
TAP: KEY_MENU
HOLD: KEY_LEFTALT
...
Ответ или решение
Использование одной клавиши как модификатора и для отправки обычного нажатия: Возможности в Linux
Вопрос о возможности использования одной клавиши как модификатора и для отправки обычного нажатия одновременно актуален для многих пользователей Linux, особенно тех, кто переходит с macOS. В этом ответе мы рассмотрим два основных решения, которые позволяют реализовать такую функциональность: At Home Modifier и xcape.
1. At Home Modifier
At Home Modifier – это инструмент, который позволяет назначать клавиши таким образом, чтобы при одиночном нажатии они выполняли обычное действие, а при долгом нажатии становились модификатором. Это решение является особенно полезным для специфических клавиатур, так как его можно настроить через файл конфигурации xorg.conf
. Преимущества использования этого инструмента включают:
- Легкость настройки: Пользователь может легко создать правила, применимые к конкретным клавиатурам, что позволяет избежать конфликтов с другими устройствами.
- Системный уровень: At Home Modifier функционирует на уровне системы, что делает его более подходящим для многопользовательских сред.
- Сохранение логики клавиш: При использовании At Home Modifier модификатор (например,
Meta
) назначается клавише, которая при обычном нажатии работает как стандартная клавиша (например,Enter
), что позволяет сохранить доступ к оригинальной функции клавиши в ситуациях, когда X-сервер не работает.
С точки зрения возможных недостатков, следует отметить, что при обновлениях X-сервера может потребоваться пересборка самого At Home Modifier, если его версия устарела. Однако для пользователей дистрибутивов, таких как Arch Linux, это обычно не создаёт значительных трудностей, поскольку пакеты актуализируются достаточно оперативно.
2. Xcape
Вторым вариантом является xcape. Этот инструмент предлагает аналогичную функциональность, но с некоторыми отличиями. Основные особенности:
- Преимущества: Пользователи могут не выполнять пересборку при каждом обновлении X-сервера. Код xcape меньше и проще в использовании.
- Недостатки: Это решение может столкнуться с проблемами совместимости при использовании Wayland, а также может конфликтовать с другими программами, использующими расширение Record.
Выбор предпочтений: Многие пользователи, в том числе и автор данного поста, выбирают At Home Modifier, поскольку его система назначения клавиш лучше подходит для многофункциональной работы и обеспечивает более предсказуемое поведение клавиш.
Альтернативные решения
В 2024 году пользователи, работающие под управлением Wayland, X11 или даже консоли, могут воспользоваться Interception Tools. Этот инструмент с доступными плагинами позволяет создать кастомизированную функциональность для клавиш. Например, можно настроить, чтобы клавиша CapsLock
работала как CTRL
при удерживании и как ESC
при нажатии.
Пример конфигурации Interception Tools
Для настройки можно использовать следующий базовый пример файла udevmon.yaml
:
- JOB: interception -g $DEVNODE | caps2esc | dual-function-keys -c /etc/interception/dual-function-keys.yaml | uinput -d $DEVNODE
DEVICE:
EVENTS:
EV_KEY: [KEY_CAPSLOCK, KEY_ESC, KEY_TAB, KEY_LEFTSHIFT]
В dual-function-keys.yaml
можно описать логику действий для различных клавиш:
MAPPINGS:
- KEY: KEY_LEFTSHIFT
TAP: KEY_F8
HOLD: KEY_LEFTSHIFT
- KEY: KEY_LEFTALT
TAP: KEY_MENU
HOLD: KEY_LEFTALT
Заключение
Выбор между At Home Modifier, xcape и Interception Tools зависит от ваших потребностей и окружения. Оба решения обеспечения функциональности, когда клавиша может использоваться как модификатор или выполнять обычные действия в зависимости от времени удержания. Для более сложных сценариев можно использовать Interception Tools, обеспечивающие кастомизацию этого поведения на более высоком уровне. Надеюсь, это руководство поможет вам выбрать подходящее решение для достижения желаемых результатов в вашей системе.