同じコンピュータ上の他のユーザーへのオーディオパイプ

同じコンピュータ上の他のユーザーへのオーディオパイプ

一部のゲームでは、合成ウィンドウマネージャが好きではなく、私のお気に入りのデスクトップであるUnityでは合成をオフにできないため、同時に2人のユーザーを実行します。残念ながら互いに対話するので、同じユーザーに対して2つのTTYを実行したくありません。 Ubuntu 16.04を実行しています。

ユーザーjonathanはTTY7のUnityセッションにあり、他のユーザーsteamdudeはTTY2のXFCEセッションにあります。オーディオ以外のすべてが私が望む方法で動作します。両方のユーザーをオーディオグルー​​プに追加して再度ログインすると、あるTTYから別のTTYからのオーディオを聞くことができます。ただし、あるユーザーがサウンドカードを使用している間、他のユーザーはオーディオをまったく再生できません。

私が持っている最も近い解決策(なぜ動作するのかわかりません)は、paprefsを使用してRTPデバイスがUnityセッション内でループバックできるようにすることです。 steamdudeは何らかの理由でRTPデバイスを接続する必要はありません。ループバックはTTY2のサウンドを妨げません。問題は、モジュールのループバックに最大1秒まで遅延を引き起こす長いバグがあることです。手動サイクル

pacat -r --latency-msec=1 -d rtp.monitor | pacat --latency-msec=1 -d alsa_output.pci-0000_00_1b.0.analog-stereo

遅延の問題を解決しましたが、サウンドカードのロックの問題が再び発生して問題は解決されませんでした。

潜在的なソリューション(理想的には最初)は次のとおりです。

1) あるユーザーから別のユーザーへの直接オーディオストリーミング

私が試したがうまくいかなかった最初の明白なこと

pacat -r --latency-msec=1 -d rtp.monitor | sudo -u steamdude pacat --latency-msec=1 -d alsa_output.pci-0000_00_1b.0.analog-stereo

この操作は、次の出力で失敗します。

Home directory not accessible: Permission denied
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
write() failed: Broken pipe

2 人のユーザーはお互いのグループに属し、chmod と setfacl を介してホームディレクトリに対するフルアクセス権を与えました。

2)RTPマルチキャストを介してあるユーザーから別のユーザーへのオーディオストリーミング

Pulseが同じコンピュータのストリーミングデバイスを表示していないので、どうすればいいのかわかりません。

3)1つのTTYからRTPを介して別のTTYの軽量仮想マシン(または特別に設計されたchroot?)にオーディオを送信します。

これはうまくいきますが、すべての可能なソリューションの中で最もエレガントではなく、多くのシステムリソースを使用します。

私はこのようなことをしたいのですが、最も効率的な方法で行う方法を知りたいです。

関連情報