systemd를 통한 서비스로 작동


12

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

[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루트 터미널을 통해 명령 을 실행하면 모든 것이 잘 작동합니다. 왜 그런가요?

그것이 명백한 것이면 미안하지만, 나는 체계적인 비즈니스에 익숙하지 않지만 나에게 도움이되는 것을 찾을 수 없었습니다.

건배.

편집 : 이것은 여전히 ​​작동하지 않습니다. 누군가 시간이 있다면 그것을 시도하고 재현 할 수 있다면 고맙겠습니다. 가능하다면 버그 보고서를 제출할 것입니다.


나는 시도 아직 actkbdsystemd인한 시간의 부족,하지만 난 당신의 문제가 함께 할 수있는 뭔가가 의심 actkbd입력 시스템이 완전히 초기화되기 전에 시작되는이 - actkbd내 개발 노트북에 LSB 서비스로 시작했을 때 잘 작동합니다. evdev모듈 이 시작된 후 시작 되고 키보드의 eventX장치 노드 가 항상 같은지 확인해야 합니다.
thkala

회신 Theodoros 주셔서 감사합니다. 위에서 보여준 테스트는 모든 것이 부팅되는 동안 실행되었습니다. 따라서 이론적으로 모든 모듈을로드해야합니다. 명령을 수동으로 실행하면 항상 정상적으로 작동하므로 장치 노드도 양호해야합니다.
Azrael3000

답변:


5

사용자가 장치에 액세스하고 서비스 장치를 실행할 수있게하려면 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 배포판 Wiki를 참조하십시오. 규칙을 설정 한 후 재부팅하십시오. 그런 다음 X에 로그인 한 후 장치를 시작하십시오.

또한 여기에 제공 한 파일보다 훨씬 더 정상적인 시스템 파일이 있습니다.

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

[Service]
ExecStart=/usr/sbin/actkbd -Dd /dev/input/event3
RemainAfterExit=yes
Type=forking
Restart=always
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.