Pulseaudio / dbusの偽/最小Xセッションを起動します


12

Pulseaudioを使用して、デスクトップとRaspberry Piの間でオーディオを共有します。

ただし、Pulseaudioにはdbusが必要で、dbusにはXセッションが必要です。グラフィカルセッションがない場合、Pulseaudioはシステムモードでのみ実行できますが、正式には推奨されていません。

Raspberry Piのほかに、Xセッションのコストは非常に高いため、最も効率的な(低コストの)方法でそれを取り除きたいと思います。

Pulseaudioの最小のXセッションを開始するにはどうすればよいですか?


UdevはXを必要としません。Pulseaudioについては知りません。Xがないと何が失敗するのでしょうか?これはD-Busに関連していますか?
ジル 'SO-悪であるのをやめる'

さて、私はそれを読みましたが、それはPulseaudioだけかもしれません。:X Pulseaudioのがない場合には、公式ウェブサイトが言うように悪いです何のユーザごとのセッション、意味ないシステムワイドモードで起動されfreedesktop.org/wiki/Software/PulseAudio/Documentation/User/...を
kursus

申し訳ありませんが、udevとdbusを混ぜて編集しました。
クルス

回答:


11

Xvfbを使用できます。これは、仮想フレームバッファーを備えたXサーバーです。つまり、メモリーにのみ表示され、ハードウェアに接続しないXサーバーです。そのサーバーで不要なクライアントを実行する必要はありません。特にデスクトップ環境やウィンドウマネージャーは必要ありません。

Xvfb :1 -screen 0 1x1x8 &

この後:

DISPLAY=:1 dbus-launch
DISPLAY=:1 pulseaudio --start

Xvfbディスプレイが使用可能になるには、開始後少し待つ必要があります。xinitXサーバーを起動し、準備ができたらクライアントを起動するために使用できます。実行するコマンドをスクリプトに入れます(スクリプトが終了すると、Xサーバーが終了することに注意してください)。

#!/bin/sh
dbus-launch
pulseaudio --start
sleep 99999999

で仮想Xサーバーを起動します

xinit /path/to/client.script -- /usr/bin/Xvfb :1 -screen 0 1x1x8

起動時に実行したい場合は、cronから起動できます。crontab -e(rootとしてではなく、ユーザーとして)実行し、行を追加します

@reboot xinit /path/to/client.script -- Xvfb :1 -screen 0 1x1x8

このセッションを強制終了する場合は、xinitプロセスを強制終了します。


申し訳ありませんが、起動時にpulseaudio startコマンド(例の4行目)を自動的に実行するのに苦労しています。それはDISPLAYプロパティなのでしょうか。rc.local、/ etc / init.d、rcSを試しましたが、スクリプトはpulseaudioを起動しません。SSH経由でスクリプトを実行すると、完全に機能します。アドバイスをいただければうれしいです。
クルサス

Xvfbは、X接続を受け入れる準備が整う前に何らかのセットアップを行う必要があるため、後のコマンドの実行が早すぎると、Xサーバーへの接続に失敗する場合があります。xinitを使用してXvfbを起動し、それらのコマンドを.xinitrcに入れて、Xvfbの準備ができてからxinitが起動するようにしたい場合があります。
アランク

すみません、うまくいきませんでした。.xinitrcでXvfbを起動する必要がありますか?現在、rc.localで開始されています。もしそうなら、私はPAコマンドをどこに置きますか?.xinitrcでPAコマンドを起動しようとしましたが、運がありません。何かが見つかりません。
クルス

@kursusこれらすべてのコマンドをユーザーとして実行する必要があります。を使用してcrontabから実行できます@reboot。また、alancは正しいです。Xvfbを起動した後に遅延が必要であり、xinitはこの問題を解決します。編集をご覧ください。
ジル「SO-悪であるのをやめる」

編集してくれてありがとう、今はもっとはっきりしている。ただし、スクリプト呼び出しの有無にかかわらず、xinitコマンドを起動するとXvfbという認識されないオプションが表示されます
クルス

1

私は昨日、同じ問題を抱えていました.x11を使用せずsystemdを使用せずにyoctoで作成したヘッドレス環境で、DBusでraspberrypi 0 WにPulseオーディオを使用すると、pulseaudioを実行する前にdbusを実行およびエクスポートする必要があります。

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
     echo "Starting dbus" 
     export $(dbus-launch)
fi

etc / pulse / client.confで、allow-autospawn-for-root = yesを有効にしてください

実行pulseaudio -vして、構成に別の問題があるかどうかを確認します。--systemスイッチは正しくないため、使用しないでください。

pulseaudio -D --disallow-exit

0

スクリプトを使用するよりも、スクリプトがEOFに到達しないようにするよりエレガントな方法がありsleep 99999999ます!

sleep infinity代わりに使用してください。それは言うことをします...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.