如何让 pulseaudio 在 Ubuntu 17.04 和 17.10 中的 Firefox 中自动启动?

如何让 pulseaudio 在 Ubuntu 17.04 和 17.10 中的 Firefox 中自动启动?

我正在尝试让 Ubuntu 17.04 和 17.10 上的 Firefox 56.0 在 Facebook 上播放视频声音(甚至不确定这是否特定于 Facebook)。我已经将问题归结为播放视频时 pulseaudio 无法启动,或者根本无法启动。但如果我从命令行执行 pulseaudio,然后从 Facebook 内播放视频,我就可以听到声音。

令我困惑的是试图弄清楚我应该期待这个 pulseaudio UNIX 进程究竟何时启动。

  1. 在启动时?
  2. 在用户登录之前 X11 启动时?
  3. 在用户登录时(“欢迎者”;GDM 或其他什么)?
  4. Firefox 在执行某些共享库中的代码时会要求启动 pulseaudio

https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Running/对我来说这意味着它应该在用户登录时进行。

/etc/xdg/autostart 目录包含有关图形会话管理器应在用户登录时自动启动的会话服务的信息。PulseAudio 在此处提供了自己的文件。pulseaudio.desktop 告诉会话管理器运行 start-pulseaudio-x11,这是一个加载几个 X11 相关模块的脚本(在 KDE 上还加载 module-device-manager,这是 KDE 的音频路由配置工具所必需的)。start-pulseaudio-x11 通常是需要运行 PulseAudio 服务器的第一件事,因此通常在会话管理器在登录会话开始时运行 start-pulseaudio-x11 时启动服务器。

如果禁用自动生成,start-pulseaudio-x11 则不起作用,因为 start-pulseaudio-x11 不会明确启动服务器。它在加载 X11 模块时依赖于自动生成。从这个意义上说,脚本名称具有误导性。start-pulseaudio-x11 脚本过去用于明确启动服务器,这解释了脚本名称。

我最近执行的命令是为了确保我从良好的基础开始,按照以下说明执行http://support.system76.com/articles/audio/(由于不同的原因,因为我的机器的前置音频连接器不工作,执行以下操作后问题得到解决):

rm -r ~/.config/pulse
sudo apt install --reinstall alsa-base alsa-utils pulseaudio linux-sound-base libasound2

我目前并不认为丢失的~/.config/pulse目录是罪魁祸首,但是它是吗?

dmesg | grep pulse

没有显示任何内容,就好像某些东西没有在正确的时间执行正确的脚本一样。

我需要更改什么才能启用此功能?我不想pulseaudio每次运行 Firefox 时都手动调用(我可以通过脚本来解决问题,但我不想)。

我得出结论,自动生成已启用,因为它被注释掉了(假设注释掉的意思是被注释掉的东西程序的默认值):

drunkard@norehab:~$ ps -ef --forest --cols=10000 | grep pulse
drunkard    3448  2721  0 14:25 pts/0    00:00:00  |               \_ grep pulse
drunkard@norehab:~$ ls -ld ~/.config/pulse
ls: cannot access '/home/drunkard/.config/pulse': No such file or directory
drunkard@norehab:~$ ls -ld /etc/xdg/autostart/pulseaudio-kde.desktop
ls: cannot access '/etc/xdg/autostart/pulseaudio-kde.desktop': No such file or directory
drunkard@norehab:~$ ls -ld /etc/xdg/autostart/pulseaudio*
-rw-r--r-- 1 root root 4836 Mar 29  2017 /etc/xdg/autostart/pulseaudio.desktop
drunkard@norehab:~$ grep auto /etc/pulse/client.conf
; autospawn = yes
; auto-connect-localhost = no
; auto-connect-display = no
drunkard@norehab:~$ 

更新 #1

我尝试过这个:

cp -p /etc/pulse/client.conf ~/.config/pulse/client.conf

并重新启动但仍然无法自动启动。

更新 #2

下面的事情向我证明/usr/bin/start-pulseaudio-x11不是被执行:

我保存了/usr/bin/start-pulseaudio-x11

drunkard@norehab:~$ sudo cp -p /usr/bin/start-pulseaudio-x11 /usr/bin/start-pulseaudio-x11.orig

然后在末尾添加一行,简单地将当前时间戳写入日志文件/tmp/start-pulseaudio-x11.log

drunkard@norehab:~$ sudo sh -c 'echo "date >> /tmp/start-pulseaudio-x11.log" >> /usr/bin/start-pulseaudio-x11'
drunkard@norehab:~$ tail /usr/bin/start-pulseaudio-x11

    if [ x"$KDE_FULL_SESSION" = x"true" ]; then
       /usr/bin/pactl load-module module-device-manager "do_routing=1" > /dev/null
    fi

    if [ x"$SESSION_MANAGER" != x ] ; then
      /usr/bin/pactl load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null
    fi
fi
date >> /tmp/start-pulseaudio-x11.log
drunkard@norehab:~$

然后重启并登录,发现/tmp/start-pulseaudio-x11.log不存在。

因此,登录之前或之后应该调用的任何内容/usr/bin/start-pulseaudio-x11都没有执行。

更新 #3

这在 Ubuntu 17.10 中仍然存在问题。但是评论提示我可以使用我的解决方法来systemctl代替直接执行。

但我认为这仍然有问题,因为为什么不为所有使用桌面的用户启用声音?我的意思是,在任何情况下,我都不会不想听到从任何浏览器播放的视频的声音。无论什么声音守护进程(在这种情况下是pulseaudio,但这并不重要)都应该默认为桌面用户“启用”。服务器安装并非如此,但这里的情况并非如此。

答案1

几天前,pulseaudio 停止了 18.04 的加载 - 以前它工作正常。在查看了所有建议但没有永久结果后,我只是在文件中添加了以下行.profile

pulseaudio --start

答案2

这是一个解决方法,我将其视为答案,直到有人可以向我指出这个问题已在处理桌面用户配置的上游 Ubuntu 安装逻辑中得到修复:

我有一个在启动时运行的脚本,使用此答案中显示的启动应用程序:https://unix.stackexchange.com/a/32616/21372,因此我在脚本中添加了:

# Start pulseaudio because something got broken in Ubuntu or Firefox
# or PulseAudio or or
# or... (https://askubuntu.com/questions/962920/how-do-i-get-pulseaudio-to-start-automatically-in-ubuntu-17-04-for-firefox):
if ! pulseaudio --check
then
  # But not via the old way:
  #
  #   nohup pulseaudio > /dev/null 2>&1 &
  #
  # Use the proper way to enable this at login time per https://askubuntu.com/a/989674/340383
  systemctl --user enable pulseaudio && systemctl --user start pulseaudio
fi

这将检查 pulseaudio 进程是否使用该--check选项启动,如果未运行,则启动它。

更新 #1:

我稍微改变了解决方法,使用systemctl如下命令https://askubuntu.com/a/989674/340383

这仍然是一个解决方法,因为 Ubuntu 应该默认为桌面用户启用此功能。

我的理由是,不幸的是,我仍然必须采用这种解决方法,因为下次我升级或从头开始安装并第一次运行我的新帐户时,如果我的启动脚本中没有上述内容,我就会感到困惑,为什么声音停止工作。

反驳:由于 systemctl 调用将更新 ~/.config 文件,因此(这是来自上面的systemctl...命令行):

Created symlink /home/drunkard/.config/systemd/user/default.target.wants/pulseaudio.service → /usr/lib/systemd/user/pulseaudio.service.
Created symlink /home/drunkard/.config/systemd/user/sockets.target.wants/pulseaudio.socket → /usr/lib/systemd/user/pulseaudio.socket.

然后在下次重新安装 Ubuntu 时,它应该可以正常工作。但前提是我保留了 ~/.config 文件,这不是一个好的假设:我将所有(除了 ~/.config 深处的文件!)“用户配置”文件保存在 Git 存储库下,原因就是为了解决可用性问题,最终,就像这个一样,我浪费了很多时间去调试它的根本原因,我不想再这样做了。

相关内容