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

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

건배.

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


나는 시도 아직 actkbd로 systemd인한 시간의 부족,하지만 난 당신의 문제가 함께 할 수있는 뭔가가 의심 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.