Вопрос или проблема
Под X я могу настроить Caps Lock как Esc при кратком нажатии и как Ctrl при удерживании с помощью:
setxkbmap -option 'caps:ctrl_modifier'
xcape -e 'Caps_Lock=Escape' -t 100
Как можно воспроизвести это поведение на Sway / Wayland?
Добавьте следующее в конфигурацию sway:
input "type:keyboard" {
xkb_options caps:ctrl_modifier
}
Источник: https://github.com/swaywm/sway/wiki#keyboard-layout
ОБНОВЛЕНИЕ: автор спрашивает “Caps Lock — это Escape, но Control при удержании”. Оказывается, есть простая программа, которая делает именно это на уровне libevdev (поэтому работает с любым сервером отображения, в том числе Wayland, и вышеуказанная конфигурация sway не нужна).
Связанная тема обсуждения: https://github.com/swaywm/sway/issues/719
Демон переназначения клавиш, такой как keyd
(есть и другие), будет решением, не зависящим от X/Wayland. У них есть пример того, что вам нужно, прямо в начале их быстрого старта:
https://github.com/rvaiya/keyd?tab=readme-ov-file#quickstart
[ids]
*
[main]
# Преобразовывает Caps Lock в Escape при нажатии и в Control при удержании.
capslock = overload(control, esc)
Другие подобные утилиты, которые могут это сделать, перечислены здесь:
Ответ или решение
Для решения задачи настройки поведения клавиши Caps Lock, чтобы она работала как клавиша Escape при быстром нажатии и как клавиша Control при удержании, необходимо перейти от устаревших решений на основе Xorg, таких как использование setxkbmap
и xcape
, к более современным инструментам, которые совместимы с Wayland и в частности Sway. Ниже приведу разбор решения с подробностями.
Теория
При использовании Xorg (который Sway не поддерживает напрямую) ранее упоминаемая комбинация setxkbmap
и xcape
позволяла достаточно гибко управлять поведением клавиш. Это возможно благодаря т.н. "xkb options", которые позволяют переопределять стандартное поведение клавиш. Однако, в среде Wayland и, в частности, в менеджере окон Sway, поддержка подобных утилит отсутствует, что требует поиска альтернативных решений, работающих независимо от Xorg.
Пример
-
Использование Sway конфигурации:
Sway предлагает возможность задавать раскладку клавиатуры и модификаторы напрямую в своем конфигурационном файле. Пример соответствующей настройки в конфигурации Sway:input "type:keyboard" { xkb_options caps:ctrl_modifier }
Эта настройка позволяет настроить Caps Lock как модификатор Control. Однако, она не решает проблему короткого нажатия для выполнения Escape.
-
Программа caps2esc:
Для решения задачи требуется комбинированное поведение клавиши. На помощь приходит программа caps2esc, которая работает на уровне libevdev. Данная утилита обеспечивает необходимую функциональность и совместима с различными серверными окружениями, включая Wayland. -
Использование keyd:
В более универсальном подходе можно использовать утилиты для ремаппинга клавиш, работающие независимо от графического окружения. Пример такой утилиты – keyd:[ids] * [main] # Maps capslock to escape when pressed and control when held. capslock = overload(control, esc)
Keyd предоставляет декларативный способ конфигурации клавиш через файл конфигурации, который можно адаптировать под индивидуальные нужды пользователя.
Применение
В реальных условиях, для того чтобы задействовать вышеуказанные инструменты и конфигурации, вам потребуется проделать следующие шаги:
-
Установка выбранного инструмента:
Для установкиcaps2esc
илиkeyd
обычно достаточно воспользоваться пакетным менеджером вашей дистрибуции Linux. Например, в системах на базе Arch Linux можно использоватьpacman
. -
Конфигурация:
Создайте (или модифицируйте) соответствующий конфигурационный файл. В случае Sway, это файл~/.config/sway/config
. Если вы выбралиkeyd
, отредактируйтеkeyd.conf
согласно документации. -
Запуск программы:
Удостоверьтесь, что программа или служба запускается при старте системы. Это можно сделать, добавив нужную строку в скрипты автозагрузки или в конфигурации сервиса systemd, если программа предоставляет такой метод запуска. -
Тестирование работы:
Протестируйте поведение клавиши Caps Lock – она должна вести себя как Escape при быстром нажатии и как Control при удержании. При необходимости, отладьте конфигурацию в соответствии с личными предпочтениями.
Таким образом, при грамотном подходе и использовании современных инструментов можно достичь желаемого результата и настроить клавиатуру согласно индивидуальным потребностям даже в таких современных окружениях как Sway и Wayland.