阻止pulseaudio在gdm/systemd下重新启动!其他答案无效!

Dav*_*lar 5 sound gdm pulseaudio 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 systemctlkillpulseaudio”(返回“无法杀死单位pulseaudio.service:单位pulseaudio.service未加载。”)
  5. 删除 /etc/xdg/autostart/pulseaudio*
  6. systemctl --用户停止pulseaudio.socket
  7. systemctl --用户停止pulseaudio.service
  8. systemctl 禁用脉冲音频

根据 pstree 的说法,它不断被 systemd 使用用户 gdm 重新启动,如果我(以 root 身份)杀死它,进程就会死亡,而 systemd 只是重新生成它。

但我不明白为什么 systemd 会启动它:

% systemctl --type=service | grep pulse
% systemctl list-units --type=service | grep pulse
Run Code Online (Sandbox Code Playgroud)

事实上,systemctl 甚至不认为它正在运行:

% systemctl | grep pulse
% systemctl --state=running | grep pulse
Run Code Online (Sandbox Code Playgroud)

这就是为什么:

% systemctl disable pulseaudio
Failed to disable unit: Unit file pulseaudio.service does not exist.
Run Code Online (Sandbox Code Playgroud)

并且 systemd 不承认启动它:

% systemd --test | grep -i pulse
Loaded units and determined initial transaction in 27ms.
Run Code Online (Sandbox Code Playgroud)

但 pstree 告诉我们它在撒谎:

% pstree
    .....
    |-systemd-+-(sd-pam)
    ...
    |         |-pulseaudio---{pulseaudio}
Run Code Online (Sandbox Code Playgroud)

它也没有列在 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
Run Code Online (Sandbox Code Playgroud)

虽然这个文件确实存在:

/var/lib/gdm3/.config/systemd/user/sockets.target.wants/pulseaudio.socket 声明“WantedBy=sockets.target”,无论这意味着什么。

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

% find /etc/systemd/ -name '*pulse*'
Run Code Online (Sandbox Code Playgroud)

但:

% find /usr/lib/systemd | grep pulseaudio
/usr/lib/systemd/user/pulseaudio.socket
/usr/lib/systemd/user/pulseaudio.service
Run Code Online (Sandbox Code Playgroud)

我注意到其他人在 redhat 上有这个错误:

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

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

在没有像临时移动二进制文件这样的黑客手段的情况下,如何杀死这个进程并保持它被杀死?

小智 5

在文件中:

/usr/lib/systemd/user/pulseaudio.socket
/usr/lib/systemd/user/pulseaudio.service
Run Code Online (Sandbox Code Playgroud)

就在该线下方:

ConditionUser=!root
Run Code Online (Sandbox Code Playgroud)

添加:

ConditionUser=!gdm
Run Code Online (Sandbox Code Playgroud)

就是这样!