inputplug를 실행하는 시스템 서비스의 종료 코드 1을 수정하는 방법은 무엇입니까?

inputplug를 실행하는 시스템 서비스의 종료 코드 1을 수정하는 방법은 무엇입니까?

systemd블루투스 키보드가 연결되어 있을 때 사용자 정의 키맵을 설정하는 서비스를 설정하고 싶습니다 . inputplug제안한 대로 을 사용하고 있습니다 .여기.

공백 없이 실행 가능한 명령이 필요하기 때문에(참조여기, 옵션 -c), 실행 가능한 래퍼 스크립트를 작성했습니다.

/home/maddin/.local/bin/setmykeymap:

#!/bin/sh

setxkbmap us-de

inputplug이제 터미널에서 실행하면 사용 여부에 관계없이 모든 것이 예상대로 작동합니다 sudo.

$ [sudo] /usr/bin/inputplug -c /home/maddin/.local/bin/setmykeymap
Linked without daemon(), running in foreground.

키보드에 연결하면 키보드 레이아웃이 설정됩니다. 사용하든 안하든 메시지는 동일합니다 -d. 그 이유는 터미널에서 실행했는데 어떻게 든 감지 되었기 때문인 것 같습니다.

여태까지는 그런대로 잘됐다.

systemd이제 다음과 같이 서비스를 설정했습니다.이 가이드. 내 모습은 다음과 같습니다 /etc/systemd/system/inputplug-keymap-daemon.service::

[Unit]
Description=Sets xkbmap to us-de anytime a device is plugged or unplugged

[Service]
Type=simple
ExecStart=/usr/bin/inputplug -c /home/maddin/.local/bin/setmykeymap
Restart=on-failure
RestartSec=10
KillMode=mixed

[Install]
WantedBy=multi-user.target

서비스를 활성화하고 다시 시작하면 다음을 얻습니다.

$ sudo systemctl status inputplug-keymap-daemon.service                                                                                                                              
● inputplug-keymap-daemon.service - Sets xkbmap to us-de anytime a device is plugged or unplugged
     Loaded: loaded (/etc/systemd/system/inputplug-keymap-daemon.service; enabled; vendor preset: disabled)
     Active: activating (auto-restart) (Result: exit-code) since Tue 2021-01-19 13:26:48 CET; 1s ago
    Process: 74130 ExecStart=/usr/bin/inputplug -c /home/maddin/.local/bin/setmykeymap (code=exited, status=1/FAILURE)
   Main PID: 74130 (code=exited, status=1/FAILURE)

내가 뭘 잘못했나요?

Wants그러한 서비스를 위해 어느 After것을 설정하시겠습니까 ?WantedBy

답변1

귀하의 의견을 바탕으로 문제를 해결했습니다 203. 이제 오류 코드가 표시됩니다 1. 이는 응용 프로그램 자체에서 발생합니다.

journalctl -u inputplug-keymap-daemon.service애플리케이션이 stdout 또는 stderr에 무엇인가 쓰고 있는지 모니터링합니다 . 더 많은 정보를 얻으려면 명령줄 인수에 -v를 추가하는 것이 도움이 될 수 있습니다.

내가 볼 때매뉴얼 페이지DISPLAY, 이 애플리케이션이 환경 변수를 사용한다는 것은 명백합니다 . 이것은 시스템 데몬이 일반적으로 작동하는 것이 아니며 이것이 실패한 이유에 대한 내 추측입니다.

DISPLAY및 에 대한 액세스가 필요한 서비스를 처리한 후에 XAUTHORITY는 일반적으로 사용자 영역에서 작업합니다. 이는 시스템 자체를 실행하는 데 필요한 것이 아니라 사용자와 그래픽 세션에 특정한 것임을 의미합니다. 이 경우 --usersystemd의 버스를 사용합니다. 버스를 사용하면 --user서비스가 다음을 포함한 환경에 액세스할 수 있습니다 DISPLAY.

이 작업을 수행하려면 다음을 수행하십시오.

sudo systemctl disable inputplug-keymap-daemon.service
cp /etc/systemd/system/inputplug-keymap-daemon.service ~/.config/systemd/user/
sudo rm /etc/systemd/system/inputplug-keymap-daemon.service
systemctl --user start inputplug-keymap-daemon.service

sudo마지막 줄이 누락되었습니다. 확인해 systemctl --user status ...보세요journalctl --user -u inputplug-keymap-daemon.service

작동하는 경우 [Install]서비스를 활성화하기 전에 섹션을 변경하십시오.

[Install]
WantedBy=default.target

이제 할 수 있다systemctl --user enable inputplug-keymap-daemon.service

관련 정보