阻止 pulseaudio 在 gdm/systemd 下重新启动!其他答案不起作用!

阻止 pulseaudio 在 gdm/systemd 下重新启动!其他答案不起作用!

当我启动(Ubuntu 18.04)时,systemd 正在用户 gdm 下启动 pulseaudio。我不想这样 - 我想以我的用户身份运行 pulseaudio,因为 gdm 和 mpd 下的 pulseaudio 存在问题。

所以我试图杀死它,但没有什么能杀死这个怪物。它不断重生。人们以前问过这个问题,以下所有解决方案均失败

  1. 将“autospawn=no”添加到“/etc/pulse/client.conf” 将“autospawn=no”添加到“/var/lib/gdm3/.config/pulse/client.conf”
  2. 同时将“daemon-binary = /bin/true”添加到client.conf
  3. “sudo rm -f /etc/xdg/autostart/pulseaudio.desktop”
  4. “sudo systemctl kill pulseaudio”(返回“无法终止单元 pulseaudio.service:单元 pulseaudio.service 未加载。”)
  5. 删除 /etc/xdg/autostart/pulseaudio*
  6. systemctl --user 停止 pulseaudio.socket
  7. systemctl --user 停止 pulseaudio.service
  8. systemctl 禁用 pulseaudio

根据 pstree,它会不断被 systemd 使用用户 gdm 重新启动,如果我(以 root 身份)终止它,该进程就会终止,然后 systemd 会重新启动它。

但我不知道为什么 systemd 要启动它:

% systemctl --type=service | grep pulse
% systemctl list-units --type=service | grep pulse

事实上,systemctl 甚至认为它没有运行:

% systemctl | grep pulse
% systemctl --state=running | grep pulse

这就是为什么:

% systemctl disable pulseaudio
Failed to disable unit: Unit file pulseaudio.service does not exist.

并且 systemd 不承认启动它:

% systemd --test | grep -i pulse
Loaded units and determined initial transaction in 27ms.

但是 pstree 告诉我们它在撒谎:

% pstree
    .....
    |-systemd-+-(sd-pam)
    ...
    |         |-pulseaudio---{pulseaudio}

它也没有在 init.d 或 Xsession.d 脚本中列出:

% ls /etc/init.d/*pulse*
ls: cannot access '/etc/init.d/*pulse*': No such file or directory
% ls /etc/X11/Xsession.d/*pulse*
ls: cannot access '/etc/X11/Xsession.d/*pulse*': No such file or directory

尽管此文件确实存在:

/var/lib/gdm3/.config/systemd/user/sockets.target.wants/pulseaudio.socket 声称“WantedBy=sockets.target”不管这意味着什么..

我认为这可能部分是 systemd 的路径问题 - 它不在 /etc/systemd 路径中:

% find /etc/systemd/ -name '*pulse*'

但:

% find /usr/lib/systemd | grep pulseaudio
/usr/lib/systemd/user/pulseaudio.socket
/usr/lib/systemd/user/pulseaudio.service

我注意到其他人在 redhat 上也遇到了这个错误:

https://bugzilla.redhat.com/show_bug.cgi?id=1635119

令人沮丧的是,它被作为 NOTABUG 关闭,没有任何解释。

如何才能终止该进程并保持其终止状态,而无需采取诸如临时移动二进制文件之类的措施?

答案1

在文件中:

/usr/lib/systemd/user/pulseaudio.socket
/usr/lib/systemd/user/pulseaudio.service

就在下面这行:

ConditionUser=!root

添加:

ConditionUser=!gdm

就是这样!

相关内容