kbd를 시스템 서비스로 사용

kbd를 시스템 서비스로 사용

얼마 전 화면이 잠겨 있을 때 뮤직 플레이어를 중지하는 방법을 물었습니다. 대답은 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)

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

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

프로덕션 및 명명 udev규칙 에 대한 자세한 내용은 man udevLinux 배포판의 위키를 참조하세요. 규칙을 설정한 후 재부팅하세요. 그런 다음 X에 로그인하고 장치를 시작하십시오.

또한 여기에는많은귀하가 제공한 것보다 더 강력한 시스템 단위 파일입니다.

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

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

관련 정보