有很多建议如何让程序自动启动,但我现在需要的是相反的:我想找出为什么某个程序在启动时启动。
用例如下:经过一番折腾,xbindkeys
我决定关闭 Ubuntu,拍摄虚拟机快照,然后使其xbindkeys
自动启动。但是,xbindkeys
启动后它已经运行了。我该如何找出原因?
尝试过systemctl
,研究过~/.bashrc
。~/.profile
不在那里。pstree
说xbindkeys
直接来自systemd
。
Ubuntu 18.04.3 LTS。
答案1
当你安装包时xbindkeys
sudo apt install xbindkeys
它会在用户主目录中创建一个 .desktop 文件,其中$HOME/.config/autostart/
包含以下内容
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=xbindkeys
Comment=Start xbindkeys
Exec=xbindkeys_autostart
Terminal=false
Type=Application
Categories=
GenericName=
Hidden=true
如果你观察这一Exec
行,这个 .desktop 文件将会执行xbindkeys_autostart
,它实际上/usr/bin/xbindkeys_autostart
包含以下内容
#!/bin/bash
set -e
set -u
set -E
PROG="/usr/bin/xbindkeys"
NOAUTO="${HOME}/.xbindkeys.noauto"
# This file autostarts xbindkeysrc if the user (or system) has a config
# for it AND does NOT Have a .xbindkeys.noauto in his homedir.
# we only run if there is no NOAUTO file
if ! [[ -f ${NOAUTO} ]] && [[ -x ${PROG} ]]; then
# User config wins over system config
# guile config wins over classic config
for cfile in "/etc/xbindkeysrc" "$HOME/.xbindkeysrc" "$HOME/.xbindkeysrc.scm"; do
if [[ -f ${cfile} ]] || [[ -L ${cfile} ]]; then
CONF="${cfile}"
fi
done
# Run $PROG - if it has been configured
if [ -n "${CONF}" ]; then
$PROG -f $CONF
fi
fi
例如,手动添加自动启动程序,直接在启动应用程序列表中输入命令,如下所示
你可以看到这两个 .desktop 文件之间的区别,其中“Hidden”行对于一个文件为 false,对于另一个文件为 true
如果你这样做Hidden=true
,Hidden=false
你可以在 GUI 启动应用程序列表中看到它,如下所示