Dav*_*lar 5 sound gdm pulseaudio systemd
当我启动时(Ubuntu 18.04),systemd 正在用户 gdm 下启动pulseaudio。我不希望这样 - 我想以我的用户身份运行pulseaudio,因为gdm 和mpd 下的pulseaudio 存在问题。
所以我想杀死它,但没有什么能杀死这个怪物。它不断重生。以前有人问过这个问题,以下所有解决方案都失败了:
根据 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)
就是这样!