VIA처럼 키맵핑하기 2 - kmonad autostart
들어가며
이전 포스팅에서는 kmonad를 설치하고 사용하는 방법에 대해서 알아봤다. 그렇지만 약간 불완전한 부분이 있었다. 그것은 바로 원하는 kmonad config 실행이 부팅과 함께 자동으로 이뤄지도록 만드는 부분이다.
Kmonad의 autostart는 생각보다 까다로웠다.
sudo 권한이 필요없는 패키지들은 .xinitrc나 .xprofile에 daemon으로 실행하는 스크립트를 추가해주는 방법으로 autostart되도록 하면 된다.
그러나 kmonad는 커널의 /dev/uinput를 사용하여 키맵핑을 수행하기 때문에, 실행할 때 sudo 권한을 필요로 한다.
그래서 다른 패키지들과 같은 간단한 방법을 사용할 수 없었다.
그래도 어찌어찌 해결 방안을 찾아냈다. 다음 내용을 차근차근 따라가보자.
Autostart 설정하기
Kmonad의 autostart를 위해 우리는 크게 두 가지 단계를 따라 간다.
1)$USER를 input 그룹에 포함시키고, input 그룹에 /dev/uinput 권한을 부여한다.
2)통상적인 autostart 방법으로 kmonad가 실행되도록 설정한다.
사용자 계정을 input 그룹에 추가하기
다음 단계에 input 그룹에 /dev/uinput 접근 권한을 부여할 것이므로 사용중인 계정($USER)을 input 그룹에 추가해준다.
sudo usermod -aG input $USER/dev/uinput 모듈이 로드되어있나 확인하기
자동 실행을 위해서는 uinput 모듈이 사전에 로드되어야 한다. 따라서, 다음의 명령어로 uinput 모듈이 로드되어있는지 확인해보자.
ls /dev/uinput혹시 load가 되어있지 않다면 다음의 명령어로 자동으로 load되도록 만들어주자.
echo uinput | sudo tee /etc/modules-load.d/uinput.confsystemd로 input 그룹의 /dev/uinput rw권한 부여하기
처음에는 다음처럼 udev rule을 추가하여 input group에 rw권한을 부여하려 해봤으나, 커널 loading과 udev 적용의 시기가 안맞는지 부팅할 때 자동으로 적용이 되지 않았다.
# 이 방법은 동작하지 않았음.
KERNEL=="uinput", MODE="660", GROUP="input"그래서 systemd service를 추가함으로써 위와 같은 동일한 기능을 하도록 만들었다.
다음의 service 파일을 /etc/systemd/system/kmonad-uinput.service의 형태로 작성하고 저장해주자.
sudo nano /etc/systemd/system/kmonad-uinput.service[Unit]
Description=/dev/uinput permissions for kmonad
After=systemd-modules-load.service systemd-udevd.service # udev가 로드된 후에 실행되도록 설정
ConditionPathExists=/dev/uinput # uinput이 존재할 때만 실행
[Service]
Type=oneshot # 부팅 시 딱 한번만 실행하고 데몬 종료
ExecStart=/bin/chmod 660 /dev/uinput # /dev/uinput의 사용자와 그룹에 rw 권한 부여
ExecStartPost=/bin/chgrp input /dev/uinput # /Dev/uinput의 그룹을 input 그룹으로 변경
[Install]
WantedBy=multi-user.target저장 후 다음의 명령어를 실행하여 해당 service가 enable/start 되도록 해준다.
sudo systemctl enable --now kmonad-uinput.service그리고 다음의 명령어로 해당 서비스가 잘 실행되고 있는 지 확인해보자.
sudo systemctl status kmonad-uinput.service그러면 결과는 Loaded는 enable로 되어 있고, Active는 inactive로 되어있는 걸 확인할 수 있다.
이렇게 되어 있다면 정상적으로 해당 service가 등록되었다는 말이다.
○ kmonad-uinput-fix.service - /dev/uinput permissions for kmonad
Loaded: loaded (/etc/systemd/system/kmonad-uinput.service; enable>
Active: inactive (dead) since Thu 2025-05-08 20:01:48 KST; 44min ago
Invocation: fd60341l957f498fad7f2e3264b00100d
Process: 482 ExecStart=/bin/chmod 660 /dev/uinput (code=exited, status>
Process: 486 ExecStartPost=/bin/chgrp input /dev/uinput (code=exited, >
Main PID: 482 (code=exited, status=0/SUCCESS)
Mem peak: 1.8M
CPU: 41ms여기까지 성공했다면 지금부터는 kmonad를 실행할 때 sudo권한이 필요없어진다.
따라서 다른 패키지들의 autostart 등록 방식을 그대로 사용할 수 있다.
kmonad autostart 항목으로 추가하기
필자는 별도의 display manager를 사용하지 않고 tty에서 직접 startx 명령어를 통해 x11 환경을 실행하고 있다.
그래서 자동실행을 위해 .xinitrc 파일에 kmonad 명령어를 추가해줬다.
# set keyboard layer mapping by kmonad
# 키보드를 여러 개 사용한다면 각각의 config에 대한 kmonad 명령어를 다수 추가해줘도 된다.
kmonad /home/will/.config/kmonad/annepro2.kbd & # sudo를 사용하지 않아도 된다.display manager를 사용할 경우 arch linux의 autostart 문서를 참고하여 본인이 사용하는 환경에 가장 적합한 방식으로 위와 같은 kmonad 실행 명렁어를 추가해주면 된다.
마치며
축하한다. 우리는 지난 포스팅부터 지금까지 kmonad를 설치하고, 원하는 키보드 레이어를 설정하고, 그리고 자동실행하도록 설정하였다. 이로써 우리는 더이상 VIA의 도움을 필요로하지 않게 되었다.