我正在尝试让 Ubuntu 17.04 和 17.10 上的 Firefox 56.0 在 Facebook 的视频中播放声音(甚至不确定它是否特定于 Facebook)。我已将问题归结为在播放视频时 pulseaudio 没有启动,或者根本没有启动。但是,如果我从命令行执行 pulseaudio,然后从 Facebook 中播放视频,我会听到声音。
让我困惑的是试图弄清楚我应该期望什么时候应该启动这个 pulseaudio UNIX 进程。
- 在启动时?
- 在用户登录之前的 X11 启动时间?
- 在用户登录时(“欢迎者”的东西;GDM 或其他)?
- 由 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,但没关系)都应该默认为桌面用户“启用”。服务器安装并非如此,但此处并非如此。
这是一种解决方法,我将其视为答案,直到有人可以向我确认这已在处理桌面用户配置的上游 Ubuntu 安装逻辑中得到修复:
我有一个在启动时使用此答案中显示的启动应用程序运行的脚本:https://unix.stackexchange.com/a/32616/21372,所以在该脚本中我添加了:
这将检查是否使用该
--check
选项启动了 pulseaudio 进程,如果它没有运行,则启动它。更新#1:
我稍微更改了解决方法以使用https://askubuntu.com/a/989674/340383
systemctl
中所示的命令这仍然是一种解决方法,因为 Ubuntu 应该默认为桌面用户启用此功能。
我的推理是,不幸的是,我仍然必须使用此解决方法,因为下次我从头开始升级或安装并第一次运行我的新帐户时,如果我的启动脚本中没有上述内容,我将因此对声音停止工作的原因感到困惑。
一个反驳论点:由于 systemctl 调用将因此更新 ~/.config 文件(这是来自上面的
systemctl...
命令行):然后在下次重新安装 Ubuntu 时,它应该可以正常工作。但这只是在我保留 ~/.config 文件的情况下,这不是一个好的假设:出于这个原因,我将所有(除了 ~/.config 内部的文件!)我的“用户配置”文件都保留在 Git 存储库下不得不解决最终导致的可用性问题,就像这个一样,浪费了我很多时间来调试它的根本原因,我不想多做一次。
几天前,pulseaudio 停止加载 18.04 - 以前它工作得很好。在查看了所有没有永久结果的建议后,我只是在文件中添加了以下行
.profile
: