您需要在干净的环境中测试一个应用程序的性能。我为此使用 chroot。但是声音没有播放:(
PulseAudio 在主机上正常运行,如何在 chroot 环境中转发它?在阅读了FAQ的建议并了解了一点之后,我尝试这样做(目标目录表示为
$new_root_path,在那里执行chroot,并在那里部署Debian Unstable):
mkdir $new_root_path/tmp/myrundir
chmod 700 $new_root_path/tmp/myrundir
sudo mount --bind /var/lib/dbus $new_root_path/var/lib/dbus
sudo mount --bind $XDG_RUNTIME_DIR $new_root_path/tmp/myrundir
sudo mount --bind /dev/shm $new_root_path/dev/shm
sudo chroot $new_root_path su guest_user
export XDG_RUNTIME_DIR=/tmp/myrundir
mplayer ...
chroot 内的用户 UID 与我在环境外的 UID 相同。在 chroot 内部有包pulseaudio==10.0-1和dbus==1.10.18-1,在外部 -
pulseaudio==8.0-0ubuntu3.2和dbus==1.10.6-1ubuntu3.3,它们的设置没有改变。
那么,如何在测试环境中运行我的应用程序(在 MPlayer 示例中)以便它可以播放声音?同时,我不想在 chroot 笼内连续转发所有目录,尤其是 home 和临时文件。
目录/var/lib/dbus中只有一个链接machine-id指向
/etc/machine-id. 在 chroot 内部,它将引用一个具有不同内容的文件。老实说,这让我很困惑,但是常见问题解答并没有对此做出任何澄清……怎么办?
所以,它似乎已经想通了。该指令有点奇怪……在我的例子中,只需将套接字
$XDG_RUNTIME_DIR/pulse/native和共享内存块转发/dev/shm到 chroot 环境中,并使用套接字地址设置PULSE_SERVER环境变量就足够了。例如,像这样:如果您尝试以不同的用户身份在 chroot 中运行程序,您可能需要在 chroot 之外授予对 X 服务器的访问权限(为什么 - 我不知道,如果 PulseAudio 服务器未在系统模式)。
好消息是在 chroot 中安装 pulseaudio 包是可选的。
警告:如果您没有更改 PulseAudio 服务器的设置并且使用了 Unix 套接字,那么默认情况下它会在目录中创建
$XDG_RUNTIME_DIR/pulse,但前提是服务器启动时未设置PULSE_RUNTIME_DIR环境变量。作为后备,可以在临时文件夹中创建套接字/tmp。如果 PulseAudio 使用它们,共享内存文件必须可用。这是在启动时设置的,并且是 Ubuntu 16.04 中的默认设置。