![自动启动的 .desktop 应用程序在注销时不会退出](https://linux22.com/image/175288/%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%E7%9A%84%20.desktop%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%9C%A8%E6%B3%A8%E9%94%80%E6%97%B6%E4%B8%8D%E4%BC%9A%E9%80%80%E5%87%BA.png)
我正在关注的答案启动时自动启动 .desktop 应用程序不起作用,并且运行良好。我正在启动一个 python 脚本。该.desktop
应用程序如下所示:
[Desktop Entry]
Type=Application
Name=Autostart Script
Exec=shutdown_notify.py
Icon=system-run
这运行良好 - 但如果我注销并登录,我会看到脚本的第一个实例仍在运行。
$ ps -C shutdown_notify.py
PID TTY TIME CMD
4026 ? 00:00:01 shutdown_notify
25421 ? 00:00:00 shutdown_notify
有没有办法确保脚本在注销时退出?我需要添加退出逻辑吗?
logind.conf
根据@binarysta 的要求更新信息
$ grep -E 'KillUserProcesses|KillOnlyUsers|KillExcludeUsers' /etc/systemd/logind.conf
#KillUserProcesses=no
#KillOnlyUsers=
#KillExcludeUsers=root
更新,我有两个自动启动文件:一个启动上面的 python 脚本,另一个启动gnome-terminal
.重新启动后我看到:
$ ps aux | grep -E "gnome-terminal|shutdown_notify"
training 6495 0.9 0.1 84936 29360 ? S 07:13 0:00 /usr/bin/python3 /usr/local/bin/shutdown_notify.py
training 6565 0.7 0.2 622880 34448 ? Sl 07:13 0:00 /usr/lib/gnome-terminal/gnome-terminal-server
training 9647 0.0 0.0 13264 2564 pts/0 S+ 07:13 0:00 grep --color=auto -E gnome-terminal|shutdown_notify
注销,登录,然后我看到:
training 6495 0.1 0.1 85076 29360 ? S 07:13 0:00 /usr/bin/python3 /usr/local/bin/shutdown_notify.py
training 19110 3.1 0.1 84936 29636 ? S 07:15 0:00 /usr/bin/python3 /usr/local/bin/shutdown_notify.py
training 19141 2.3 0.2 696496 34584 ? Sl 07:15 0:00 /usr/lib/gnome-terminal/gnome-terminal-server
training 19421 0.0 0.0 13264 2696 pts/0 S+ 07:15 0:00 grep --color=auto -E gnome-terminal|shutdown_notify
答案1
这是因为KillUserProcesses
默认no
情况下乌班图。此设置会导致用户完全注销时用户进程不会被终止。要更改此行为以便在用户注销时终止所有用户进程,请设置KillUserProcesses=yes
并/etc/systemd/logind.conf
重新登录。
可以通过以下方式检查当前值(应该是true
更改后的值)
busctl get-property org.freedesktop.login1 /org/freedesktop/login1 org.freedesktop.login1.Manager KillUserProcesses
b true
更新
gnome-terminal
(GUI 应用程序)和shutdown_notify.py
进程之间的区别在于,gnome-terminal-server
进程与所有其他正在运行的 X11 进程绑定到相同的 TTY。通过注销,桌面环境和窗口系统(x11)将被终止,这就是gnome-terminal
退出的原因。