systemd를 사용한 서비스로 Actkbd

systemd를 사용한 서비스로 Actkbd

얼마 전 화면이 잠겨 있는 동안 음악 플레이어를 중지하는 방법에 대해 문의했습니다. 대답은 매력처럼 작동하는 actkbd를 사용하는 것이었습니다. 이제 부팅할 때 자동으로 시작하기 위해 actkbd를 systemd에 서비스로 추가하고 싶었습니다. 보시다시피 서비스가 올바르게 시작되고 htop에도 표시됩니다. 아래의 일부 출력은 다음과 같습니다.

[root@hostname init.d]# systemctl start actkbd.service
[root@hostname init.d]# systemctl status actkbd.service
actkbd.service - Actkbd: Daemon for X-independent shortcuts
      Loaded: loaded (/etc/systemd/system/multi-user.target.wants/actkbd.service)
      Active: active (running) since Tue, 10 Apr 2012 17:50:36 +0200; 2s ago
     Process: 23526 ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D (code=exited, status=0/SUCCESS)
    Main PID: 23527 (actkbd)
      CGroup: name=systemd:/system/actkbd.service
              └ 23527 /usr/local/sbin/actkbd -d /dev/input/event3 -D
[root@hostname init.d]# systemctl stop actkbd.service
[root@hostname init.d]# ps -C actkbd
  PID TTY          TIME CMD

다음 actkbd.service파일이 있습니다/etc/systemd/system/multi-user.target.wants/

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
Type=forking
ExecStart=/usr/local/sbin/actkbd -d /dev/input/event3 -D
ExecReload=/bin/kill -HUP $MAINPID
ExecStop=/bin/kill -15 $MAINPID
Restart=always
User=root

따라서 문제는 systemctl로 서비스를 시작한 후 Rhythmbox를 일시 중지하는 일반적인 바로 가기를 눌러도 아무 일도 일어나지 않는다는 것입니다. 대신 /usr/local/sbin/actkbd -d /dev/input/event3 -D루트 터미널을 통해 명령을 실행하면 모든 것이 잘 작동합니다. 왜 그럴까요?

당연한 일이라면 죄송합니다. 저는 시스템 비즈니스를 처음 접했지만 도움이 되는 어떤 것도 찾을 수 없었습니다.

건배.

편집: 아직 작동하지 않습니다. 누군가 시간이 있다면 시도해 보고 재현해 주시면 감사하겠습니다. 가능하다면 버그 보고서를 제출하겠습니다.

답변1

사용자가 장치에 액세스하고 서비스 장치를 실행할 수 있도록 하려면 사용자가 장치에 액세스할 수 있는 권한을 허용하도록 udev규칙을 만들고 적절하게 설정 해야 합니다. 세션을 루트가 아닌 사용자로 실행하기 때문에 MODES단순히 유닛 파일을 시작하는 것은 올바르지 않습니다. User=root루트 터미널에서 실행하면 사용자 세션 내부에서 루트 터미널이 활성화됩니다. 이에 대한 자세한 정보를 얻으려면 에서 정보를 검색하세요 systemd --user.

udev 규칙 정리

규칙 을 채우는 데 필요한 정보를 제공하려면 다음 명령을 사용하십시오 udev.

udevadm info --path=$(udevadm info -q path -n /dev/input/event3)

위 명령의 출력에서 /etc/udev/rules.d/<device>.conf​​. 즐겨 사용하는 텍스트 편집기에서 열고 변수를 입력하세요.

 SUBSYSTEM=="device",
 SYSFS{idVendor}=="ID Vendor Here" ,
 SYSFS{idProduct}=="ID Model Here",
 MODE="666"

규칙 만들기 및 명명 규칙에 대한 자세한 내용은 Linux 배포판의 Wiki를 udev참조하세요 . man udev규칙을 설정한 후 재부팅하세요. 그런 다음 X에 로그인하면 장치를 시작합니다.

또한 여기에는많이귀하가 제공한 것보다 더 정상적인 시스템 단위 파일입니다.

[Unit]
Description=Actkbd: Daemon for X-independent shortcuts

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always

관련 정보