PulseAudioとMultiseatでサウンドを構成するにはどうすればよいですか?


12

完全な開示の精神で、私はこの質問をubuntuフォーラムに投稿しましたが、それについて取り組んでいる他のヘッドが傷つくことはないと思います。

マルチシートのセットアップが非常にうまく機能しています。入力デバイスのホットプラグは期待どおりに機能します。それでも解決できない唯一の問題は、各座席の音声を取得することです。

オーディオを機能させるための私の試みの概要を以下に示します。

  1. ユーザーがログインする$ DISPLAYに基づいて、〜/ .pulse / default.paを動的に構成します。

  2. pulseaudioをシステム全体のインスタンスとしてロードします。

    • これを機能させることができませんでした。ユーザーはオーディオハードウェアにアクセスできませんでした。
  3. ConsoleKitで座席をマークするには、udevルールを使用します。ここにあるudevガイドラインに従ってくださいhttp : //www.freedesktop.org/wiki/Software/systemd/multiseat

    • irc.freenodeの誰かによって動作することが「保証」されていましたが、これが動作するとは思いませんでした#pulseaudio

これらの試みはどれも成功しませんでした。だから私は今、助けを求めてコミュニティに頼ります。提案されたメソッドが機能する可能性は十分にありますが、私はそれの一部をめちゃくちゃにしただけです、idk。これは、MultiseatXページを更新してUbuntu 12.04の手順を含める前に必要なパズルの最後のピースです。

状況に関する私の理解:pulseaudioへのアクセスは、ConsoleKit(ACLについての何か)でマークされているアクティブなセッションに制限されています。CKは、一度に1つのセッションのみをアクティブとしてマークできます。人生のこの単純で小さな事実は、ソリューションがシステム全体のインスタンスとして実行されるpulseaudioを含むべきだと私を信じさせます。各ユーザーはPulseサーバーに接続し、すべてのハードウェアのサブセットに制限する必要があります。各ユーザーは、localhost、idkを介してPulseサーバーに接続する可能性があります。私の試みと失敗した結果に関係なく、私は常にsudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wavハードウェアのいずれかで何かをプレイするために使用できたことを知っています。

私はストローを握っていて、頭から抜け出すことができる最後の数本の毛になりました。私たちが富を分かち合えるように、これを理解するのを手伝ってください。必要に応じて追加情報が提供されます。


私は正しく理解しましたか:2席2サウンドカードですか?default.paを小さなカスタムファイルに置き換えましたか、それとも変更されていないdefault.paにカスタム行を追加しましたか?
Takkat

私はここでコメントに気づいたと思います...だからはい、それは2枚のサウンドカードです。1つはオンボードオーディオ、もう1つはGPUのHDMIからのオーディオです。小さなカスタムファイルは〜/ .pulseにありますが、/ etc / pulse / default.paは変更されていません。その場合、私が理解する限り、〜/ .pulse / default.paは/etc/pulse/default.paを置き換えず、代わりにマージします。
アンソニー

default.paの完全なコンテンツを持つ2つのカスタム.paファイルを試してみてください。2つの既存のファイルとは異なるデバイスセクションが追加されます(それらがマージされない場合)。
Takkat

また、システム全体のモードで実行されるpulseaudioによって読み取られるdefault.pa /etc/pulseは、HOMEではなくである必要があります。
Takkat

私はそれが主に作業ATMを持っています。私はそれをすべて使い果たしたら報告します。
アンソニー

回答:


7

私は何時間もオンラインで調査し、さまざまな設定をテストし、Pulseaudio開発者と話しました。要するに、pulseaudioを通常のユーザーモードで実行すると、ConsoleKitでマークされたアクティブセッションのみがオーディオハードウェアにアクセスできるようになるということです。現在のConsoleKitは、一度に1つのセッションのみをアクティブとしてマークできるため、pulseaudioのシステム全体のインスタンスを実行する必要があります。利点:各座席に個別の音声を入れることができます。欠点:すべてのオーディオハードウェアはすべてのユーザーが利用でき、ウィルで操作できます。これは、セキュリティが真の関心事であるインターネットカフェやその他の公共の場にとって理想的な状況ではありません。サイトのセキュリティポリシーを作成するときは、このことに留意してください。pavucontrolの実行を管理者のみに制限するのが賢明かもしれません。

いつものように、すべてのデフォルト設定ファイルのバックアップを作成します。バックアップせずに設定を変更した場合は、apt-get -d install pulseaudioを使用してpulseaudioパッケージを取得できます。これにより、パッケージが(/ var / cache / archives / aptに)ダウンロードされるだけで、コンテンツを抽出してデフォルトの構成を取得できます。client.confはそこに含まれていないことに注意してください。

pulseaudioをシステム全体のデーモンとして実行するには、いくつかのファイルを編集する必要があります。

1.)/ etc / default / pulseaudio

    PULSEAUDIO_SYSTEM_START=1

2.)/etc /pulse/daemon.conf-詳細については、man pulse-daemon.confを参照してください。

    daemonize = yes
    local-server-type = system

3.)/etc/pulse/client.conf

    autospawn = no

また、ユーザーをパルスアクセスグループに追加する必要があります。

sudo usermod -a -G pulse-access <username>

すべてのユーザーがオーディオハードウェアにアクセスできるようになったので、各ユーザーが使用するハードウェアを選択する必要があります。これは、pavucontrolを使用して実行できます。設定はユーザーごとに保存され、座席には従わないことに注意してください。ユーザーが座席を切り替える場合、目的のオーディオハードウェアを再選択する必要があります。

Pulseaudioに関する追加コメント

私は、座席ごとのオーディオを機能させるためのよりエレガントなソリューションがあることを望んでいました。マルチシートでシステム全体のPulseaudioを使用すると、多くの欠点があり、リブート間で完全に安定しません。システム全体のインスタンスを起動し、ユーザーインスタンスをローカルホスト経由でサーバーとして接続しようとしました。pulseaudio --startを実行するとdaemon.confが読み込まれるため、これは機能していないようです。

ConsolKitについて

通常のユーザーごとのpulseaudioを実行するときに見られる問題は、1つのシートがハードウェアにアクセスし、他のすべてがダミー出力を持っていることです。これは、ConsoleKitが完全に座席に対応していないためです。CKはすべての座席をseat1のセッションと見なし、1つのセッションのみをアクティブとしてマークできます。この事実は、getfacl / dev / snd / *を実行することで確認できます。特定のユーザーがどの$ DISPLAYを使用しているかに基づいて、適切な/ dev / snd /ファイルのACLを編集できる可能性があると思いました。これは私が検討したことのないオプションです。この仮説を調査し、調査結果に合わせてドキュメントを編集することにより、複数のシートの原因に貢献することを検討してください。

用Multiseat枝ConsoleKitGDM-2.3GDM-3.xが自動multiseat機能を提供すべきであるが存在しません。

その他の注意事項

1.)ユーザーがモジュールDISALLOW_MODULE_LOADING = 1をロードできないようにすることも賢明です。

2.)autospawn = noは、サンプルファイルに見られるように、必ずしも必要ではありません。問題は発生しません。


1
アンソニー、投稿してくれてありがとう。同じ問題に直面し、Pulseaudioをシステムモードで実行せずに目的の結果を達成する方法を見つけました。見てみましょう:unix.stackexchange.com/a/104344/34581を。役に立つことを願っています。
イリアロストフツェフ

1

状況に関する私の理解:pulseaudioへのアクセスは、ConsoleKit(ACLに関する何か)でマークされているアクティブなセッションに制限されています。CKは、一度に1つのセッションのみをアクティブとしてマークできます。

ConsoleKitには、マルチシートサポートを追加するパッチがあります。これにより、すべてのアクティブな座席をアクティブとして報告できます。おそらくこれで問題が解決するでしょう。ディスプレイマネージャーとの連携が必要であり、このサポートを追加するGDMの古いバージョンへパッチがあります。

PPAから変更されたConsoleKitおよびGDMパッケージを使用して、Natty(11.04)でマルチシートが動作するようにしました。私はまだNattyからアップグレードしていません。それを動作させる方法を見つけるのに長い時間がかかり、LightDMがパッチを適用したConsoleKitで動作しないのではないかと心配しています。

編集:Fedora 17にはいくつかの印象的なマルチシート機能があり、その一部はQuantalにあることに注意してください。彼らは彼らのアプローチを説明するwikiページを持っています。Ubuntuは、Fedoraのアプローチを単純にコピーすることはできません。なぜなら、大きな変更が必要になるからです。FedoraはsystemdとGDMを使用し、UbuntuはupstartとLightDMを使用します。


笑。マルチシートConsoleKitとGDMブランチについて知っています。更新中のUbuntu MultiseatXページでリンクしていることに気づくでしょう。実際、ckブランチはgdmブランチに依存しています。これらは、オラクルの同じ人が管理しています。あなたが参照したPPAも私が知っているものであり、12.04用ではありません。私は、標準リポジトリの外に出ることを伴わない方法でそれをやろうとしています。Fedoraとsystemdについて... systemdのマルチシートアプローチはnvidiaバイナリでは動作しません。
アンソニー

0

私は最近、PulseAudioとMultiseatの問題を解決しようとしていました。エレガントな解決策がないことを見て、私の回避策はネットワークを使用することでした。

このソリューションは、私がほとんどの場合マシンにいるユーザーであり、私の座席が最も頻繁にログインしているため、私のシナリオに適しています。

~/.config/pulse/default.paのシステム構成をコピーし/etc/pulse/default.pa、次の行を追加しました:

load-module module-native-protocol-tcp auth-anonymous=1 auth-ip-acl=127.0.0.1

他のユーザーのpulseaudioの設定で、トンネルを追加します(または、必要に応じていくつかのトンネルを追加します)。

load-module module-tunnel-sink server=127.0.0.1 sink=alsa_output.pci-0000_00_XX.X.iec958-stereo

シンク名をマシンの名前と一致するように変更します。よりわかりやすい名前を構成することを決定できます(つまり、pulseaudio設定ファイルで構成する必要があります)が、指定した名前はで検索して使用しましたpacmd list-sinks

これはエレガントなソリューションではありません。おそらく、次のリグで@Anthonyが提案するシステム全体の構成を使用しようとします。より「外科的」なソリューション。

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