systemd를 통해 xmodmap 실행

systemd를 통해 xmodmap 실행

이스케이프를 Caps Lock으로 다시 매핑하는 스크립트가 있습니다. 나는 보통 수동으로 스크립트를 호출합니다.

xmodmap /home/myusername/.Xmodmap;

.Xmodmap은 다음을 포함하는 파일입니다.

remove Lock = Caps_Lock
keysym Escape = Caps_Lock
keysym Caps_Lock = Escape
add Lock = Caps_Lock

시작 시 이 명령을 실행하고 싶습니다. 내가 한 일은 /etc/systemd/system으로 이동하여 다음 내용으로 "startup.service"라는 파일을 만드는 것이었습니다.

[Unit]
Description=Startup Applications

[Service]
Type=oneshot
RemainAfterExit=false
ExecStart=/home/myusername/scripts/.qs

[Install]
WantedBy=multi-user.target

.qs는 -rwxr-xr-x 권한이 있는 스크립트이며 내용은 다음과 같습니다.

#!/bin/bash
/usr/bin/xmodmap /home/myusername/.Xmodmap; 
rm /home/myusername/stop_time; 
date +%D' '%T > /home/myusername/stop_time

(startup.service 대신) systemctl 활성화startup을 입력하여 명령을 활성화했습니다.

재미있게. 두 번째와 세 번째 명령은 새로 부팅할 때 제대로 작동하지만 첫 번째 명령은 그렇지 않습니다. 어떻게든 명령을 실행하거나 건너뛰는 것 같습니다. 이 명령은 터미널 창에서 실행될 때 제대로 작동합니다. 내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

xmodmap실행 중인 Xserver에서 실행합니다. 시스템 시작 시 실행하는 것이 아닙니다. 이는 일반적으로 사용자 초기화 스크립트의 일부로 그래픽 로그인 후에 실행하는 것입니다.

이론적으로는 systemd를 통해 이를 실행하여 디스플레이 관리자의 Xserver에서 키맵을 조정하고 파일 After=display-manager.service에서 사용할 수 있습니다 .service. 이렇게 하면 그래픽 로그인이 가능할 때까지 systemd가 실행되지 않습니다. 이는 Wayland 기반 디스플레이 관리자, Wayland 세션 또는 새로운 Xserver 프로세스를 사용하는 사용자 세션에 영향을 미치지 않으므로 사용자 초기화 중에 다시 실행하는 것이 좋습니다.


(XKB 옵션은 caps:swapescape사용자 작업과 유사하게 작동하며 작동을 위한 Xserver가 없는 Wayland 및 기타 libinput 인식 컨텍스트에서 잘 작동합니다. .Xmodmap기본적 으로 더 이상 사용되지 않으며 가능하면 사용을 피해야 합니다.)xmodmapxmodmap

관련 정보