← На главную

Keyd — демон для переназначения клавиш на уровне ядра Linux

10.06.2026 17:27 · hackernews

Linux — проблема с переназначением клавиш. xmodmap, xcape и прочие инструменты работают только в X11 и дают ограниченные возможности. keyd решает это иначе — системный демон, написанный на C, перехватывает ввод на уровне ядра через evdev и uinput.

Время срабатывания меньше миллисекунды. Конфиг интуитивный, модификаторы дружат со слоями. Архитектура модульная: ядро на C, расширяется через IPC. Есть клиент-серверная модель, поддержка X, sway, Gnome (Wayland) и даже работа в чистом VT.

Среди фич — слои с гибридными модификаторами, перегрузка клавиш (разное поведение на тап и зажатие), отдельные конфиги для каждой клавиатуры, Unicode и мгновенное переназначение — никакой перепрошивки. Например, CapsLock можно настроить как Control при зажатии и Escape при тапе. Или сделать все модификаторы «oneshot»: нажал и отпустил Shift, потом букву — и получаешь заглавную, не нужно держать клавишу.

Клонируешь репозиторий, собираешь make и включаешь службу через systemctl enable --now keyd. Конфиг — /etc/keyd/default.conf. Если что-то пошло не так и машина перестала отвечать, есть аварийная комбинация backspace+escape+enter — она завершит процесс.

Для экспериментального переназначения под конкретные приложения (например, Alacritty или Chromium) есть keyd-application-mapper. Его лучше добавить в автозапуск дисплейного сервера. Есть поддержка одноплатных компьютеров через usb-gadget — спасибо Джорджи Чавчанидзе.

Пакеты есть в Arch, Debian 13 («trixie»), Ubuntu 25.04 («plucky»), openSUSE, через COPR и в GURU. Найдётся и PPA для Ubuntu.

keyd вдохновлён QMK, но написан с нуля на C, менее 2000 строк. В отличие от kmonad — дружеского проекта на Haskell, keyd сознательно минималистичен и не будет запускать произвольные бинарники от root. Если чего-то не хватает — можно открыть issue на GitHub. Контрибьютят через PR.

Есть нюанс с трекпадом: libinput при включённом keyd перестаёт отличать встроенную клавиатуру от внешней, из-за чего функция отключения трекпада при печати ломается. Решается добавлением quirk-файла в /etc/libinput/local-overrides.quirks, чтобы виртуальное устройство keyd считалось внутренним.

Подробности — в man keyd и man keyd-application-mapper. IRC-канал проекта: #keyd на oftc.

Читать оригинал →