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
는 일반적으로 사용자 영역에서 작업합니다. 이는 시스템 자체를 실행하는 데 필요한 것이 아니라 사용자와 그래픽 세션에 특정한 것임을 의미합니다. 이 경우 --user
systemd의 버스를 사용합니다. 버스를 사용하면 --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