为Pulseaudio / dbus启动假/最小X会话


13

我使用Pulseaudio在台式机和Raspberry Pi之间共享音频。

但是,Pulseaudio需要dbus,而dbus需要X会话。没有图形会话,Pulseaudio只能在系统模式下运行,这是官方不建议使用的模式。

除了在Raspberry Pi上,X会话的成本非常高,所以我想以最高效(成本更低)的方式摆脱它。

如何启动最小的X会话以使Pulseaudio参与?


Udev绝对不需要X。我不了解Pulseaudio:如果没有X,什么会失败?这和D-Bus有关吗?
吉尔(Gilles)“所以,别再邪恶了”

好吧,我读过,但可能只是Pulseaudio。在没有X pulseaudio的在全系统模式,这意味着没有每用户会话,这是糟糕的官方网站推出说:freedesktop.org/wiki/Software/PulseAudio/Documentation/User/...
kursus

抱歉,我将udev和dbus混合在一起,进行了编辑。
kursus

Answers:


11

您可以使用Xvfb,它是带有虚拟帧缓冲区的X服务器,即仅显示在内存中并且不连接到任何硬件的X服务器。您不需要在该服务器上运行任何不需要的客户端,尤其是不需要桌面环境或窗口管理器。

Xvfb :1 -screen 0 1x1x8 &

在这之后:

DISPLAY=:1 dbus-launch
DISPLAY=:1 pulseaudio --start

开始Xvfb显示后,您需要稍等片刻。您可以xinit用来启动X服务器,然后在就绪时启动客户端。将要运行的命令放在脚本中(请注意,当脚本退出时,X服务器退出):

#!/bin/sh
dbus-launch
pulseaudio --start
sleep 99999999

使用启动虚拟X服务器

xinit /path/to/client.script -- /usr/bin/Xvfb :1 -screen 0 1x1x8

如果要在引导时运行它,则可以从cron启动它。运行crontab -e(以您的用户身份,而不是以root用户身份)并添加该行

@reboot xinit /path/to/client.script -- Xvfb :1 -screen 0 1x1x8

如果要终止此会话,请终止xinit进程。


很抱歉打扰我在引导时自动执行pulseaudio start命令(示例的第4行)。我想知道它是否是DISPLAY属性。我尝试了rc.local,/ etc / init.d,rcS,但是脚本从未启动pulseaudio。当我通过SSH运行脚本时,它可以完美运行。如果您能提出建议,我将很高兴。
kursus

Xvfb在准备好接受X连接之前必须进行一些设置,因此,如果以后的命令运行得太早,您可能会发现它们无法连接到X服务器。您可能想研究使用xinit启动Xvfb,并将这些命令放在.xinitrc中,以便只有在Xvfb准备好它们时,xinit才能启动它们。
alanc

对不起,我没有让你好起来。我必须以.xinitrc启动Xvfb吗?现在,它以rc.local开始。如果是这样,我应该在哪里放置PA命令?我尝试在.xinitrc中启动PA命令,但是没有运气,我缺少了一些东西。
kursus

@kursus您需要以用户身份运行所有这些命令。您可以使用crontab从中进行操作@reboot。同样,alanc是正确的,启动Xvfb之后需要延迟,而xinit解决了此问题。看到我的编辑。
吉尔(Gilles)“所以,别再邪恶了”

感谢您的修改,现在更加清晰了。但是我得到了一个无法识别的选项:启动xinit命令时的Xvfb,有或没有脚本调用。
kursus

1

昨天我遇到了同样的问题,在无头环境中使用DBus在树莓派0 W和DBus上使用Pulse音频,而yocto没有x11且没有systemd,则在运行pulseaudio之前需要运行和导出dbus。

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
     echo "Starting dbus" 
     export $(dbus-launch)
fi

在etc / pulse / client.conf中,请启用allow-autospawn-for-root = yes

运行pulseaudio -v以检查您的配置中是否还有其他问题。不要使用--system开关,因为它不正确。

pulseaudio -D --disallow-exit

0

与使用sleep 99999999!相比,还有一种更优雅的方法可以防止脚本到达EOF 。

使用sleep infinity代替。它说了什么...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.