간단히 말해서, 로컬 음악 스트리밍을 위한 루프백 인터페이스로 PulseAudio를 설정하려고 합니다. 그런데 설정을 하다가 한계점에 부딪혔습니다.
내가 이해한 바로는 X 서버가 실행되지 않으면 "비시스템 모드"에서 pulseaudio를 시작할 수 없지만 서버는 헤드리스이므로 이는 옵션이 아닙니다. 그래서 저는 데몬을 시스템 전체 인스턴스로 시작하기 위해 잘 짜여진 systemd 스크립트를 작성하기 시작했습니다. 그러나 설명할 수 없는 이유로 이는 실패했습니다.
systemd 스크립트에서 명령을 실행하면 시스템 전체 펄스가 정상적으로 시작됩니다! 그러나 시작 스크립트 내에서 실행하면(예: systemctl startpulseaudio 사용) 실패합니다 Failed to create '/var/run/pulse': Permission denied
. 동일한 사용자에 대해 어떻게 다르게 작동하는지 평생 알 수 없습니다. 또한 ls /var/run/pulse
스크립트를 "펄스"로 설정하면 로그에 아무것도 인쇄되지 않습니다. 그러나 전체 호출을 로 래핑하면 sudo -u pulse
동일한 내용이 인쇄됩니다 /var/run/pulse
. 펄스 시작 명령을 에 래핑하면 sudo -u root
동일한 오류로 인해 충돌이 발생합니다.
[root@ian-primary ian]# ls -al /var/run/pulse
total 4
drwx------. 3 pulse pulse 80 Nov 5 23:10 .
drwxr-xr-x. 29 root root 840 Nov 5 23:03 ..
drwxr-xr-x. 3 pulse pulse 60 Nov 5 23:04 .config
-rw-------. 1 pulse pulse 16 Nov 5 23:04 .esd_auth
[root@ian-primary ian]# sudo -u pulse ls -al /var/run/pulse
total 4
drwx------. 3 pulse pulse 80 Nov 5 23:10 .
drwxr-xr-x. 29 root root 840 Nov 5 23:03 ..
drwxr-xr-x. 3 pulse pulse 60 Nov 5 23:04 .config
-rw-------. 1 pulse pulse 16 Nov 5 23:04 .esd_auth
Nov 06 13:56:02 ian-primary systemd[1]: Starting PulseAudio system server...
Nov 06 13:56:02 ian-primary pulseaudio[23251]: W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading not set.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Timer slack is set to 50 us.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: setpriority() worked.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Successfully gained nice level -11.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Found user 'pulse' (UID 171) and group 'pulse' (GID 171).
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Home directory of user 'pulse' is not '/var/run/pulse', ignoring.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: E: [pulseaudio] main.c: Daemon startup failed.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Failed to create '/var/run/pulse': Permission denied
Nov 06 13:56:02 ian-primary systemd[1]: pulseaudio.service: main process exited, code=exited, status=1/FAILURE
Nov 06 13:56:02 ian-primary systemd[1]: Failed to start PulseAudio system server.
Nov 06 13:56:02 ian-primary systemd[1]: Unit pulseaudio.service entered failed state.
Nov 06 13:56:02 ian-primary systemd[1]: pulseaudio.service failed.
[root@ian-primary ian]# /bin/pulseaudio -vvv --daemonize --system --realtime
W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set.
W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading not set.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
I: [pulseaudio] main.c: Daemon startup successful.
[root@ian-primary ian]# cat /etc/systemd/system/pulseaudio.service
[Unit]
Description=PulseAudio system server
[Service]
Type=notify
Environment=PULSE_RUNTIME_PATH=/run/pulse
# ExecStart=/bin/printenv
# export PULSE_RUNTIME_PATH="/run/pulse"
ExecStart=/bin/pulseaudio -vvv --daemonize --system --realtime
[Install]
WantedBy=multi-user.target
답변1
이것은 실제로 메시지를 설명하지는 않지만 systemd 서비스 장치에서 PulseAudio를 실행하고 있고 systemd가 실제로 포그라운드에서 실행되기를 원한다는 Failed to create '/var/run/pulse': Permission denied
점에서 구성에 명백한 문제가 있습니다 . --daemonize
로 변경해야 합니다 --daemonize=no
.
로그 메시지에 제안된 대로 및 를 명시적으로 나열할 수도 있습니다 --disallow-exit
.--disallow-module-loading
PulseAudio는 또한 사용자 pulse
의 홈 디렉토리가 존재하지 않는다고 불평합니다 /var/run/pulse
. 예상대로 이를 반영하려면 시스템 계정을 업데이트해야 할 수도 있습니다.
추가 연구를 위해 다음을 확인해 보세요.이 기사PulseAudio의 시스템 전체 인스턴스 실행에 대한 자세한 내용 및 지침이 페이지PulseAudio wiki에서(이 작업을 수행할 수 있는 이유에 대한 일부 참조 포함)아니요PulseAudio를 시스템 전체 서비스로 실행하고 싶습니다. )
답변2
--user를 사용하여 셸 스크립트에 넣어 pulseaudio.service를 시작해 볼 수 있습니다. 이제 일반 사용자로 화면 내 시작 스크립트를 실행하십시오. 그런 다음 화면을 분리하고 로그아웃하세요. Pulse Audio 서버는 헤드가 없는 것처럼 계속 실행됩니다.