🥱

【Hyprland】CapsLockをctrlに割り当てる

2024/01/12に公開

先日SwayからHyprlandに移行した際にCapsLockをControlとして使う設定に手こずったので備忘録として書き残しておきます。
ドキュメント通りの設定(input.kb_options = ctrl:nocaps)やxmodmapが動かなかった人向けです。

TLDR;

caps2escを使う
https://gitlab.com/interception/linux/plugins/caps2esc

環境

Hyprland: 03ebbe18ed8517ee22591eac82cd54322f42cb7d
Kernel Version: Linux 6.6.10-arch1-1

caps2escのインストール

sudo pacman -S interception-caps2esc

udevmonのconfig

お好みのエディタで/etc/udevmon.yamlに以下の内容を書き込みます。

udevmon.yaml
- JOB: intercept -g $DEVNODE | caps2esc | uinput -d $DEVNODE
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_CAPSLOCK, KEY_ESC]
escを保持する設定

上記の設定ではescをCapsLockに割り当てています。
単純にCapsLockをctrlに置き換えたい場合は以下の内容を/etc/udevmon.yamlに書き込んでください。

udevmon.yaml
- JOB: intercept -g $DEVNODE | caps2esc -m 1 | uinput -d $DEVNODE
  DEVICE:
    EVENTS:
      EV_KEY: [KEY_CAPSLOCK]

systemd serviceの追加

systemdのserviceファイル/etc/systemd/system/udevmon.serviceを追加します。

[Unit]
Description=udevmon
Wants=systemd-udev-settle.service
After=systemd-udev-settle.service

[Service]
ExecStart=/usr/bin/nice -n -20 /usr/bin/udevmon -c /etc/udevmon.yaml

[Install]
WantedBy=multi-user.target

最後にこのサービスを有効化し起動することでCapsLockとCtrlを入れ替えることができます。

sudo systemctl daemon-reload
sudo systemctl enable --now udevmon

参考文献

https://www.ejmastnak.com/tutorials/arch/caps2esc/
https://unix.stackexchange.com/questions/378169/map-capslock-to-control-on-wayland

Discussion