PulseAudioはCentOS 7のシステムモードでは起動できません。

PulseAudioはCentOS 7のシステムモードでは起動できません。

簡単に言えば、ローカル音楽ストリーミングのためのループバックインターフェイスとして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サーバーは、ヘッドがないかのように実行され続けます。

関連情報