Ant*_*ony 12 multiseat pulseaudio
本着完全公开的精神,我刚刚将这个问题发布到了 ubuntu 论坛,但我认为更多的人在研究它不会受到伤害。
我有一个多座位设置工作得很好。热插拔输入设备按预期工作等。我仍然无法解决的唯一问题是获取每个座位的音频。
以下是我尝试使音频正常工作的摘要:
根据用户登录的 $DISPLAY 动态配置 ~/.pulse/default.pa。
加载pulseaudio作为系统范围的实例。
使用 udev 规则在 ConsoleKit 中标记座位。遵循此处找到的 udev 指南:http : //www.freedesktop.org/wiki/Software/systemd/multiseat
这些尝试都没有成功,这就是为什么我现在转向社区寻求帮助。建议的方法很有可能奏效,而我只是把它的某些方面搞砸了,idk。这是在我可以去更新 MultiseatX 页面以包含 Ubuntu 12.04 的说明之前需要的最后一块拼图。
我对这种情况的理解:访问pulseaudio仅限于由ConsoleKit标记的活动会话(与ACL有关)。CK 一次只能将一个会话标记为活动。这个简单的生活小事实让我相信解决方案应该包括将pulseaudio作为系统范围的实例运行。每个用户都应该连接到脉冲服务器,并被限制在所有硬件的一个子集上。也许每个用户都通过 localhost、idk 连接到脉冲服务器。我确实知道,无论我的尝试和失败的结果如何,我总是能够sudo aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Center.wav
在任何硬件上播放一些东西。
我正抓着稻草,现在只能从头上拔出最后几根头发。请帮我解决这个问题,这样我们就可以分享财富。将应您的要求提供所需的任何其他信息。
我花了很多时间在线研究、测试各种设置并与 Pulseaudio 开发人员交谈。最重要的是,在普通用户模式下运行 pulseaudio 将只允许由 ConsoleKit 标记的活动会话访问音频硬件。由于当前的 ConsoleKit 一次只能将一个会话标记为活动的,这意味着我们必须运行一个系统范围的 pulseaudio 实例。好处:每个座位都可以有单独的音频。缺点:任何用户都可以使用所有音频硬件,并且可以随意操作。对于网吧或其他真正需要考虑安全性的公共场所,这不是理想的情况。在创建站点安全策略时请记住这一点。将 pavucontrol 的执行限制为仅限管理员可能是谨慎的。
与往常一样,备份所有默认配置文件。如果您在没有备份的情况下修改了配置,则可以使用 apt-get -d install pulseaudio 检索 pulseaudio 包。这将仅下载包(到 /var/cache/archives/apt),您可以提取内容以检索默认配置。请注意 client.conf 不包含在那里。
要将pulseaudio 作为系统范围的守护程序运行,我们需要编辑一些文件。
PULSEAUDIO_SYSTEM_START=1
Run Code Online (Sandbox Code Playgroud)
2.) /etc/pulse/daemon.conf - 有关更多信息,请参阅 man pulse-daemon.conf。
daemonize = yes
local-server-type = system
Run Code Online (Sandbox Code Playgroud)
autospawn = no
Run Code Online (Sandbox Code Playgroud)
我们还需要将用户添加到脉冲访问组。
sudo usermod -a -G pulse-access <username>
Run Code Online (Sandbox Code Playgroud)
现在所有用户都可以访问音频硬件,我们需要选择每个用户将使用的硬件。这可以使用 pavucontrol 来完成。请注意,设置是按用户存储的,不会跟随座位。如果用户切换座位,您将需要重新选择所需的音频硬件。
Pulseaudio 的附加评论
我曾希望有一个更优雅的解决方案来让每个座位的音频工作。在 multiseat 中使用系统范围的 Pulseaudio 有许多缺点,并且在重新启动之间并不完全稳定。我曾尝试启动一个系统范围的实例,并让用户实例通过 localhost 作为服务器连接到它。这似乎不起作用,因为在运行 pulseaudio --start 时它会提供 daemon.conf。
关于ConsolKit
我们在运行普通的每用户脉冲音频时看到的问题是,一个席位可以访问硬件,而所有其他席位都有虚拟输出。这是因为 ConsoleKit 并不完全了解座位。CK 将我们所有的席位都视为席位 1 的会话,并且只能将一个会话标记为活动会话。这个事实可以通过运行 getfacl /dev/snd/* 看到。我想到我们可能能够根据特定用户使用的 $DISPLAY 来编辑适当的 /dev/snd/ 文件的 acl。这是我没有探索过的选项。请考虑通过探索此假设并使用您的发现编辑文档来为多座问题做出贡献。
ConsoleKit、GDM-2.3和GDM-3.x 的多座分支确实存在,它们应该提供自动多座功能。
补充说明
1.) 禁止用户加载模块 DISALLOW_MODULE_LOADING=1 也是明智之举。
2.) autospawn = no并非完全必要,如我的示例文件所示。它不会引起任何问题。
归档时间: |
|
查看次数: |
13386 次 |
最近记录: |