maxwell
다른 응용 프로그램( )의 D 버스 신호를 기반으로 다양한 작업을 수행하는 사용자 공간 데몬( )이 있습니다 room
. maxwell
사용자가 시작하자마자 실행 room
하고 종료 시 중지 하고 싶습니다 room
.
나는 이와 같은 실행 프로그램 스크립트가 원하는 동작을 생성할 것이라고 생각합니다.
#!/bin/sh
systemctl --user start maxwell
room
systemctl --user stop maxwell
그러나 예를 들어 systemd 자체를 통해 이를 수행하는 더 나은/표준 방법이 있습니까?
고쳐 쓰다:내가 찾고 있는 기능은 upstart
과거에 제공했던 기능과 유사한 것 같습니다.버스 이벤트. systemd
Stephen Kitt의 답변에 따르면 달성할 수 있는 가장 가까운 것은 특정 D 버스 이름이 처음 사용될 때 불행히도 이 경우 room
이름을 "소유"하는 서비스를 자동으로 시작하는 것 같습니다.
노트:내 생각엔 이게 아무 상관도 없는 것 같아systemd에는 "시스템이 아닌 일부 프로세스"가 필요합니까?또는 최소한 거기에 제공된 답변이 이 경우에 작동합니다. 내가 이해한 바에 따르면 을 사용하면 단위가 다음과 같이 표시 ExecStartPre
됩니다 .maxwell
실패room
아직 실행되고 있지 않은 경우 .
답변1
시스템 지원D-버스 활성, D-Bus 메서드 호출을 서비스하는 서비스를 시작합니다. 이것이 사용자 서비스로 이식 가능한지 확실하지 않습니다. 시스템 서비스의 경우 D-Bus 서비스 파일을 만듭니다.
[D-BUS Service]
Name=your.bus.name
Exec=/path/to/the/daemon
User=root
SystemdService=systemd-service-name.service
그리고 일치하는 버스 이름을 지정해야 하는 해당 systemd 서비스:
[Service]
BusName=your.bus.name
지정하다BusName
그러면 해당 서비스가 D-Bus 서비스로 자동 표시됩니다.
모든 것을 사용자 서비스로 설치하는 것이 가능해야 하지만( User
D-Bus 서비스 파일을 일치하도록 변경) 아직 시도하지 않았습니다.