내 시스템 서비스를 실행할 수 없습니다.

내 시스템 서비스를 실행할 수 없습니다.

부팅 시 노트북에서 xinput 설정을 지정하려고 하므로 모든 설정과 기본 systemd 서비스 파일이 포함된 스크립트를 만들었습니다.

[Unit]
Description=Sets my preferred xinput settings

[Service]
ExecStart=/usr/local/bin/SCRIPTS/xinput.sh

[Install]
WantedBy=multi-user.target

실행했는데 systemctl enable xinput-settings.service작동하지 않지만 systemctl start실행 sudo bash /usr/local/bin/SCRIPTS/xinput.sh(스크립트에 루트가 필요함)도 작동하지 않지만 이 시스템 서비스는 작동하지 않습니다. 내가 본 몇 가지 다른 수정 사항과 함께 사용자를 루트로 설정하려고 시도했지만 아무것도 해결되지 않았습니다.

스크립트 내용은 다음과 같습니다.

xinput --set-prop "TPPS/2 IBM TrackPoint" 320 -0.4
exit 0

저는 Arch Linux 커널 5.6.12-arch1-1을 사용하고 있습니다.

systemctl status xinput-settings설명하다:

● xinput-settings.service - Sets my preferred xinput settings
     Loaded: loaded (/etc/systemd/system/xinput-settings.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Fri 2020-05-15 23:34:35 +04; 42ms ago
    Process: 16809 ExecStart=/usr/local/bin/SCRIPTS/xinput.sh (code=exited, status=203/EXEC)
   Main PID: 16809 (code=exited, status=203/EXEC)

May 15 23:34:35 ThinkX250 systemd[1]: Started Sets my preferred xinput settings.
May 15 23:34:35 ThinkX250 systemd[16809]: xinput-settings.service: Failed to execute command: No such file or directory
May 15 23:34:35 ThinkX250 systemd[16809]: xinput-settings.service: Failed at step EXEC spawning /usr/local/bin/SCRIPTS/xinput.sh: No such file or directory
May 15 23:34:35 ThinkX250 systemd[1]: xinput-settings.service: Main process exited, code=exited, status=203/EXEC
May 15 23:34:35 ThinkX250 systemd[1]: xinput-settings.service: Failed with result 'exit-code'.

답변1

다음 서비스 단위를 고려해 보십시오.

[Unit]
Description=Sets my preferred xinput settings

[Service]
Type=oneshot
ExecStart=/usr/local/bin/SCRIPTS/xinput.sh
Environment="DISPLAY=:0"
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

한 줄씩 설명:

  • Type=oneshot한 번 실행된 후 종료되는 스크립트에 적합합니다. 이를 지정하지 않으면 Type=simple기본값은 systemd로 설정되며 systemd는 서비스가 너무 빨리 종료되는 것에 놀랄 수 있습니다. 내 생각엔 이게 첫 번째 이유일지도 몰라Active: failed
  • Environment="DISPLAY=:0". 여러 사용자가 로그인하여 동시에 여러 모니터를 활성화할 수 있습니다. systemd는 데스크탑/모니터에 연결되어 있지 않으므로 xinput을 실행하면 xinput이 실패합니다. 이 환경 변수를 설정하면 사용할 디스플레이를 xinput에 알릴 수 있습니다.
  • RemainAfterExit=yes. 꼭 필요한 건 아니지만, 저는 이런 oneshot걸 좋아해요. 즉, 서비스가 완료되면 상태가 active (exited)됩니다 inactive (dead).
  • WantedBy=graphical.target이는 xserver가 시작된 후에 이 서비스가 시작된다는 의미입니다.

여전히 문제가 있는 경우 xauthority와 관련이 있을 수 있습니다. 이 경우 여기에서 좋은 답변을 확인하세요.

systemd 서비스 파일에 DISPLAY 설정

답변2

KDE 자동 시작에 내 스크립트를 추가하면 sudo에서도 작동합니다.

관련 정보