我在不同的用户帐户下运行多个应用程序实例,包括 Firefox,所有实例都显示到同一个 X 服务器。
在过去,作为 X 用户,我仅执行了相当于以下的操作:ssh -X user2@localhost firefox
自从使用 snap firefox 切换到 22.04 后,firefox 就不再播放音频了。(需要说明的是,直接以 X 用户身份运行的 firefox 运行正常,但不再以 user2 身份通过 ssh 启动任何实例。)
最初,我甚至无法让 Firefox 通过 ssh 运行,但是我发现了一些提示,引导我将这些命令 Cargo-cult 到 user2 中~/.bash_aliases
:
export XAUTHORITY=~/.Xauthority
dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
第一行允许 snap 与 X 服务器对话;第二行消除了启动缓慢的问题并且恢复了下载能力(下载只会报告失败(++ Ctrl),并且+另存为文件选择器对话框从未出现过)。ShiftYCtrlS
然而,虽然视频现在可以正常显示,但音频仍然无法正常工作。当以不同的 user2 通过 ssh(到本地主机)运行时,Snap 版本的 Firefox 要么找不到,要么无法连接到 X 用户运行的 pulseaudio 守护程序。
我发现一个建议,启动 Firefox 如下:
echo 'export PULSE_SERVER=<PATH>; /snap/firefox/current/user/lib/firefox/firefox' |\
snap run --shell firefox
可以解决问题,但对于我的情况这没有什么区别。
我设置<PATH>
为unix:/var/tmp/pulse-socket
。
(我认为)我配置了 X 用户的 pulseaudio 守护进程也在那里监听:
pacmd load-module module-native-protocol-unix auth-anonymous=1 socket=/var/tmp/pulse-socket
pax11publish
显示合理信息。
以 user2 身份通过 ssh运行非 snap 应用程序(比如mpv video.mp4
或 tar 版本zoom
)无需进一步配置就可以正常工作(我猜他们找到并使用了 X root 窗口属性)。
我对 pulseaudio 了解不多(对 pipewire 了解更少,我在 Firefox snap 中看到了它的一些配置)。我对 dbus 几乎一无所知。
有没有简单的方法可以让“远程” Firefox snap 使用 X 用户的 pulseaudio 守护进程?
答案1
拼图中缺失的一块是/dev/snd/*
我的配置现在是:
以 root 身份:
setfacl -m u:user2:rw /dev/snd/[chpst]*
作为用户2:
export XAUTHORITY=~/.Xauthority
dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
此后firefox
音频即可正确播放。