设置或传递环境变量到 snap 应用程序(从 snap 应用程序内通过 tcp 到达另一台计算机上的pulseaudio 服务器)

设置或传递环境变量到 snap 应用程序(从 snap 应用程序内通过 tcp 到达另一台计算机上的pulseaudio 服务器)

亲爱的高级用户和开发人员,

我在调整快照的工作方式时遇到了一些问题。我始终拥抱 GNU/Linux 发行版为我提供的所有可能性。然而,我觉得 snap 包让我无法获得这些可能性。当然不是故意的。但是......好吧,我无法更改需要更改的内容......系统配置文件和应用程序配置文件,环境变量。

我的发行版:ubuntu桌面20.04 amd64

我想做的:

安装一个支持pulseaudio的(snap)程序,根据我为环境变量PULSE_SERVER设置的值,程序开始使用某个pulseaudio服务器或套接字。我希望能够始终选择使用本地的pulseaudio实例或在另一台机器上运行的pulseaudio实例。

我既找不到成功将环境变量传递给命令的方法,也找不到一般设置快照包的环境变量的方法。 (我也找不到任何真正的文档或方法来调整快照接口“音频播放”、“音频记录”和已弃用的“pulseaudio”......(我只是将这些接口连接到快照以测试然后断开它们)

因此,用snap安装的程序似乎绑定到主机的pulseaudio套接字,该套接字是由pulseaudio使用默认配置创建的(例如/run/user/1000/pulse/native,如果由UID为1000的用户启动)

请问你能帮我找到解决方案吗? (最好是成功设置/传递 PULSE_SERVER 变量的方法,但其他解决方案也很有趣)

提前致谢

答案1

这有点像 hack,但以下是如何将 env 变量传递给 snap,以 chromium 为例:

echo "PULSE_SERVER=$PULSE_SERVER; chromium.launcher" | snap run --shell chromium

它的工作原理是获取主机上设置的 $PULSE_SERVER 并将其通过管道传输到 snap 内的 shell,然后用于启动主进程。

答案2

不知道是否总是这样,但目前(在我的例子中是 Ubuntu 22.04)将自定义环境变量传递给 snap 应用程序与任何其他应用程序相同:

#Only to show that it is a snap version of firefox
$ which firefox
/snap/bin/firefox

#Passing a variable
$ MOZ_ENABLE_WAYLAND=1 firefox

就我而言,我可以看到它适用于我的眼睛(firefox 在 XWayland 上不再模糊)。但如果你需要一种“科学”的方法来检查:

$ JUST_A_TEST=hello snap run --shell firefox
#The next comman is inside a snap shell
$ env | grep hello
JUST_A_TEST=hello
#To exit snap shell
$ exit

相关内容