プログラムがSSHで実行され、実行されているマシンのPulseAudioにアクセスする


10

プログラムをリモートで(sshを介して)実行したいのですが、プログラムが実際に実行されているリモートマシンにオーディオが送信されます。これは通常ALSAで機能しますが、pulseaudioはクライアントからの接続を許可する前に、いくつかのセッション認証システムをチェックするようです。

このチェックをそれほど厳しくしない方法は?

local: $ ssh remote           # remote is running pulseaudio and has sound hardware

remote:$ paplay something.wav
Connection failure: Connection refused

pa_context_connect() failed: Connection refused
remote:$ audacious something.mp3 # opens on local's X11 display
pulseaudio: Failed to connect to server: Connection refused
pulseaudio: Failed to connect to server: Connection refused

Hansの回答で更新を確認してください。pax11publish -r私のUbuntu 19.10で動作します。
スティーブンボストン

回答:



2

犯人は、sshがDBUS_SESSION_BUS_ADDRESSPulseaudioへの接続に使用されるものを設定しないことです。(この投稿に基づく)解決策は~/.bashrc、ssh経由で接続するときに使用される次の行をmyに追加することでした。

if [[ -n $SSH_CLIENT ]]; then
    export DBUS_SESSION_BUS_ADDRESS=`cat /proc/$(pidof nautilus)/environ | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-`
fi

nautilusのPIDを使用し(セッションで常に実行されるプロセスを取得するためにこれを変更する必要がある場合があります)、その環境変数を検索しDBUS_SESSION_BUS_ADDRESSてエクスポートします。

これにより、Pulseに接続するプログラムが正常に実行されます。セッションd-busを介して通信する他のプログラムも機能します(コマンドラインで大胆な操作を行うaudtoolなど)。


Ubuntu 16.04では、export DBUS_SESSION_BUS_ADDRESS=$(sudo cat /proc/$(pidof nautilus | cut -f1 -d" ")/environ | tr '\0' '\n' | grep DBUS_SESSION_BUS_ADDRESS | cut -d '=' -f2-)pidofがプロセスIDと親プロセスIDの両方を返すため、コマンドは必ず実行する必要があります。しかし、私の場合、このソリューションは機能しません。私はまだconnection refused問題に苦しんでいます。
Hans Deragon 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.