无需设置系统范围的脉冲服务器,是否可以混合 Linux 上不同用户拥有的多个进程的音频输出?

无需设置系统范围的脉冲服务器,是否可以混合 Linux 上不同用户拥有的多个进程的音频输出?

无需设置系统范围的脉冲服务器,是否可以混合 Linux 上不同用户拥有的多个进程的音频输出?

当所有进程都由同一用户拥有时,我可以毫无困难地混合音频,但一旦我尝试在不同用户拥有的进程中使用声音(具体来说,mpd 和当前登录用户的程序),就会按照先到先得的原则。哪个用户先获得声卡,就可以获得访问权限,而任何其他用户的进程都必须等待,直到声卡被释放。

答案1

我设法通过 TCP 在本地用户之间共享用户模式脉冲服务器。

编辑/etc/pulse/default.pa以启用 TCP 模块。我基本上禁用了身份验证以简化配置。请注意,如果您不是唯一使用该计算机的人,则可能会存在安全隐患。

加载模块模块本机协议 tcp 身份验证 ip acl=127.0.0.1 身份验证匿名=1

重新启动 PulseAudio,如果您使用的是 systemd,可以使用 完成此操作systemctl --user restart pulseaudio。请注意,如果已经有多个 PulseAudio 服务器正在运行,您可能需要停止它们。否则,只有第一个启动的服务器可以工作。

现在 PulseAudio 应该正在监听 TCP 端口,可以使用命令进行验证ss -ltp。您可能会看到类似以下内容:

LISTEN     0    0        *:4713       *:*                    
users:(("pulseaudio",pid=3130,fd=31))

这表明 PulseAudio 正在监听端口 4713。

要配置客户端,编辑/etc/pulse/client.conf并启用自动连接:

自动连接本地主机 = 是

出于安全原因,PulseAudio 的新版本默认禁用此功能。

接下来尝试播放一些音频,干杯!

答案2

将其放在你~/.pulse/default.pa当前运行 X 的用户上

.include /etc/pulse/default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

然后使用以下命令重新启动 pulseaudiopulseaudio -k;pulseaudio -D

然后把这个放在所有其他用户身上~/.pulse/client.conf

default-server = 127.0.0.1

我最初是在http://billauer.co.il/blog/2014/01/pa-multiple-users/,并做了一些调整(包含行)

在 Ubuntu 20.04 上工作

混合了来自不同用户的 2 首音乐

答案3

对我来说,在 Debian 9 上它是这样的:

# add all your users to the audio group
usermod -aG audio user1
usermod -aG audio user2
usermod -aG audio user3

# pulseaudio config:    
# remove old per-user configs
rm -rf /home/*/.config/pulse/

# common client config
echo '
auto-connect-localhost = yes
' >> /etc/pulse/client.conf

# common server config - only the first one get started on login
echo '
load-module module-native-protocol-tcp listen=127.0.0.1 auth-ip-acl=127.0.0.1 auth-anonymous=1
' >> /etc/pulse/default.pa

然后重启,登录,检查:

ps aux | grep pulseaudio
# should be sth

netstat -ltunp | grep pulseaudio
# should be sth

# play sample file
cvlc 'https://file-examples.com/wp-content/uploads/2017/11/file_example_OOG_1MG.ogg'

相关内容