我经常有两个 KDE 会话作为两个不同的用户运行。当我在它们之间切换时(例如 Ctrl+Alt+F8),在其中一个帐户中播放的音乐在另一个帐户中被静音。当我切换到虚拟终端 (Ctrl+Alt+F1) 时也会发生同样的情况。
据我所知,这是故意的,对多个人类用户有意义,但在我的设置中很烦人。
每当我切换到另一个 KDE 会话或虚拟终端时,如何保持音乐可听?
我正在使用基于 Ubuntu 16.04 LTS (Xenial Xerus) 和 KDE 5.36.0 和 Pulseaudio 8.0 的 KDE Neon 5。
将所有应该可以回放的用户添加到脉冲访问组
# adduser problemofficer pulse-access
使用以下内容创建/etc/systemd/system/pulseaudio.service:
[Service]
Type=simple
PIDFile=/var/run/pulse/pid
ExecStart=/usr/bin/pulseaudio --daemonize=yes --system=yes --disallow-module-loading=yes --disallow-exit=yes
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)启用这个新的 systemd 服务,以便它在启动时启动: # systemctl enable pulseaudio
请注意,此配置是
重启
声音响起的原因是每次使用此用户权限登录时都会启动 Pulseaudio,并且系统¹不允许其他用户收听其他用户的音频。
为了解决这个问题,Pulseaudio 必须以 root 权限启动,这样它才能作为一个系统范围的守护进程运行,它只对所有用户开放。每个人都将连接到这个实例,并且能够播放和收听其他用户播放或录制的所有内容。
Pulseaudio 实际上不会一直以 root 身份运行,但会放弃这些权限并假设用户是pulse。
从 man pulseaudio
用户 脉冲,组 脉冲:如果 PulseAudio 作为系统守护进程运行(参见上面的 --system)并以 root 身份启动,守护进程将放弃特权并成为使用该用户和组的普通用户进程。如果 PulseAudio 作为用户守护程序运行,则此用户和组没有意义。
请注意,“用户守护进程”与“系统守护进程”不同。前者是 Pulseaudio 之前的运行方式,后者是应用更改后的运行方式。
为了能够连接到 Pulseaudio 系统服务,您需要成为脉冲访问组的成员。
再从 man pulseaudio
组 脉冲访问:如果 PulseAudio 作为系统守护程序运行(请参阅上面的 --system),则当该组的成员通过 AF_UNIX 套接字连接时,将授予他们访问权限。如果 PulseAudio 作为用户守护程序运行,则该组没有意义。
作为一种快速解决方法,可以简单地杀死 Pulseaudio 的所有“用户守护程序”实例,然后运行/usr/bin/pulseaudio --system=yes
. 这将启动 Pulseaudio 而不会使其成为守护程序,并且以更不安全的方式启动,但可能对快速的概念验证检查很有用。
为了使这个持久化并使 Pulseaudio 守护进程在启动时自动启动,它需要添加为 systemd 服务。这就是文件/etc/systemd/system/pulseaudio.service的用途。
当 Pulseaudio 已经找到系统守护程序时,它不会启动用户守护程序²,这就是该解决方案有效的原因。
Pulseaudio 官方文档建议不要使用 Pulseaudio 作为系统守护程序。提到的一些问题是:
...从安全的角度来看,一个特别成问题的事情是模块加载。任何有权访问的人都可以加载和卸载模块。可以禁用模块加载,但是蓝牙和 alsa 热插拔功能不起作用...
(这意味着当您插入耳机时,声音输出不会自动从扬声器切换到耳机。当您取下耳机时,反之亦然。两者都必须手动完成。)
...在系统模式下更高的内存使用率和 CPU 负载...
(虽然我个人没有注意到负载有任何变化。)
...所有有权访问服务器的用户都可以嗅探彼此的音频流,收听他们的麦克风,等等...
......你也失去了许多进一步的功能,比如桥接插孔......
可能还有其他我不理解因此认为不值得包括在这里的事情。
请注意有关 thecarpy 的回答:此解决方案不需要他的回答中描述的任何步骤。
man pulseaudio
¹如果有人能详细解释这一点,我将不胜感激。
² 假设 [需要引用]
归档时间: |
|
查看次数: |
3431 次 |
最近记录: |