如何使用PulseAudio和Multiseat配置声音?


12

本着完全公开的精神,我只是将这个问题发布到了ubuntu论坛上,但是我认为更多致力于这个问题的负责人不会受到伤害。

我有一个多座位的设置,运作良好。热插拔输入设备按预期方式工作。我仍然无法解决的唯一问题是获取每个座位的音频。

这是我尝试使音频正常工作的总结:

  1. 根据用户登录的$ DISPLAY来动态配置〜/ .pulse / default.pa。

  2. 将pulseaudio加载为系统范围的实例。

    • 无法解决这个问题。用户无法访问任何音频硬件。
  3. 使用udev规则在ConsoleKit中标记座位。遵循udev准则,可在此处找到:http : //www.freedesktop.org/wiki/Software/systemd/multiseat

    • 我认为这没有用,尽管irc.freenode中的某人可以“保证”使用它#pulseaudio

这些尝试都没有成功,这就是为什么我现在向社区求助。建议的方法很有可能起作用,而我只是弄乱了它的某些方面,idk。这是我需要去解决的最后一个难题,然后我才能更新MultiseatX页面以包含有关Ubuntu 12.04的说明。

我对这种情况的理解:对Pulseaudio的访问仅限于ConsoleKit标记的活动会话(有关ACL的内容)。CK一次只能将一个会话标记为活动。这个简单的小事实使我相信解决方案应该包括将pulseaudio作为系统级实例运行。每个用户都应连接到脉冲服务器,并且仅限于所有硬件的子集。也许每个用户都通过本地主机idk连接到Pulse服务器。我确实知道,无论我的尝试及其失败的结果如何,我总是能够使用sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wav它来对任何硬件进行播放。

我正在抓稻草,现在已经可以拔出头几根头发了。请帮我解决这个问题,以便我们分享财富。需要的任何其他信息将根据您的要求提供。


我是否正确理解:这是2席2声卡?您是微小的自定义文件替换了 default.pa还是自定义行添加到了其他未更改的default.pa中?
塔卡特2012年

我希望我会注意到这里的评论...所以,是的,这是2个声卡。一种是板载音频,另一种是来自GPU中HDMI的音频。很小的自定义文件位于〜/ .pulse中,但未修改/etc/pulse/default.pa。所以在这种情况下,据我了解,〜/ .pulse / default.pa不会取代/etc/pulse/default.pa,而是与其合并。
安东尼

尝试使用两个具有default.pa完整内容的自定义.pa文件,其中将添加两个现有文件中的不同设备部分(以防它们未合并)。
塔卡特2012年

另外,在系统级模式下运行的pulseaudio读取的default.pa应该位于/etc/pulse,而不是HOME中。
塔卡特2012年

主要在atm工作。一切解决后,我会报告。
安东尼

Answers:


7

我花了很多时间在线研究,测试各种设置并与Pulseaudio开发人员交谈。最重要的是,在正常用户模式下运行pulseaudio将仅允许ConsoleKit标记的活动会话访问音频硬件。由于当前的ConsoleKit一次只能将一个会话标记为活动会话,因此这意味着我们必须运行系统范围内的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

我们还需要将用户添加到Pulse-Access组。

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

现在所有用户都可以访问音频硬件,我们需要选择每个用户将使用的硬件。这可以使用pavucontrol完成。请注意,设置是按用户存储的,不会跟随座位。如果用户切换座位,则需要重新选择所需的音频硬件。

关于Pulseaudio的附加评论

我曾希望能有一个更优雅的解决方案来使每个座位的音频正常工作。在多座系统中使用系统范围的Pulseaudio具有许多缺点,并且在重新启动之间并不完全稳定。我曾尝试启动一个系统范围的实例,并让用户实例通过本地主机作为服务器连接到它。这似乎不起作用,因为当pulseaudio --start运行时,它将获取daemon.conf。

关于ConsolKit

我们在运行正常的每用户pulseaudio时看到的问题是,一个席位可以访问硬件,而其他席位可以访问虚拟输出。这是由于ConsoleKit无法完全识别座位。CK将我们所有的座位都视为seat1的会话,并且只能将一个会话标记为活动。通过运行getfacl / dev / snd / *可以看到这一事实。我想到,我们也许可以根据特定用户使用的$ DISPLAY编辑适当的/ dev / snd /文件的ACL。这是我没有探讨过的选项。请考虑探索此假设并根据您的发现编辑文档,以考虑为多座位原因做出贡献。

确实存在用于ConsoleKitGDM-2.3GDM-3.x的多座分支,这些分支应提供自动多座功能。

补充说明

1.)最好也禁止用户加载模块DISALLOW_MODULE_LOADING = 1。

2.)autospawn = no并非完全如我的示例文件所示。它没有问题。


1
安东尼,感谢您的帖子,它很有帮助!我遇到了同样的问题,并且发现了如何在系统模式下不运行Pulseaudio的情况下达到期望的结果。看看:unix.stackexchange.com/a/104344/34581。我希望它会有用。
Ilia Rostovtsev

1

我对这种情况的理解:对Pulseaudio的访问仅限于ConsoleKit标记的活动会话(有关ACL的内容)。CK一次只能将一个会话标记为活动。

ConsoleKit有一个补丁程序可以添加多座支持。这将使它可以将所有在座席报告为在座席。也许这可以解决您的问题。它需要与显示管理器合作,并且GDM的旧版本有一个补丁程序添加了此支持。

我使用修改过的ConsoleKit和来自PPA的 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分支。它们由Oracle的同一个人维护。您引用的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建议的系统范围的配置,但是如果您有很多卡并且只想共享一个或几个接收器/源,这是一个更多“外科”解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.