Ubuntu 开机后一堆软件自动跳出来、后台跑得欢,想动手清理,开头先得想清楚一件事:到底是“桌面上的应用”还是“系统里的服务”?这两类自启机制完全不同的,搞混了,要么白费力气,要么把不该关的给关掉了。
桌面应用级的自启项,比如微信、网易云、TeamViewer 这些,走的不是 systemd 的路子。它们靠的是用户目录下的 ~/.config/autostart/ 或系统全局的 /etc/xdg/autostart/ 里放的 .desktop 文件。你在图形界面里看到的“启动应用程序”列表,源头基本都在这儿。
想看看自己开了哪些?终端敲个 ls ~/.config/autostart/ 就行。那些系统级的默认项摆在 /etc/xdg/autostart/,一般不建议去动它。真正要禁用的应用,简单点可以直接把对应的 .desktop 文件重命名——比如 teamviewer.desktop 改成 teamviewer.desktop.disabled,下次登录就不会启动了。也可以跑一下 gnome-session-properties,勾选取消掉,图形界面操作起来更直观,本质上也是在跟这些 .desktop 文件打交道。
有个小坑要注意:像 Chrome、VS Code 这类软件,装好了第一次运行就自动往 ~/.config/autostart/ 里塞自己的启动文件。你把它关了,下次打开它可能又给你加回来,挺烦的。这算是个“软自启”,得盯着点。
系统服务自启动(systemd service)怎么禁用
系统服务级的自启项,比如蓝牙服务、打印服务、whoopsie 这些,gnome-session-properties 是管不到的,得靠 systemd 的 systemctl 命令。先确认状态:systemctl list-unit-files --type=service --state=enabled,只看那些已经被启用的服务。想关掉哪个,就用 sudo systemctl disable ,比如 sudo systemctl disable bluetooth.service。
这里有个容易犯的错:有人只用了 systemctl stop,以为关掉了,实际上重启后服务又拉起来了。只有 disable 才是真正切断了开机加载。不过下手之前最好先判断一下这服务是干嘛的,像 network-manager.service、dbus.service 这些,禁用了网络或者通知就出问题了。不确定的时候,用 systemctl cat 看看描述,或者 man ,查清楚了再动手。
gnome-tweaks 或 dconf-editor 有时为什么没反应
有些用户用 gnome-tweaks 或者 dconf-editor 去调自启项,发现改了根本没效果。这是因为这两工具读的是 GNOME 桌面的 DConf 配置,路径在 org.gnome.desktop.startup-applications,只对通过标准协议注册的启动项有效。而很多软件自己写的守护进程,比如某些 Electron 应用直接 fork 出来的后台进程,压根不走这套机制。还有放在 /etc/init.d/ 里的老式 SysV 脚本,虽然 Ubuntu 20.04 以后基本不用了,但一些老旧软件可能会残留。Snap 或 Flatpak 安装的应用,它们的自启逻辑更独立,得去查 snap services 或 flatpak override --show。
如果 dconf-editor 改完没反应,大概率是 DConf 缓存没刷新,注销再登录一次就好了。
旧内核和 GRUB 启动项要不要清理
顺便提一个不是自启软件但特别拖慢 GRUB 菜单、占用磁盘的问题:旧内核。清理之前,先确认当前在用的是哪个:uname -r。再查所有已安装的内核:dpkg --get-selections | grep 'linux-image-.*-generic' | grep -v deinstall。只删比当前版本低两版以上的旧内核,至少留一个备用。删完之后,一定要跑 sudo update-grub,否则 GRUB 菜单不会自动更新。
注意:linux-headers 和 linux-modules 必须和 linux-image 版本完全匹配着一起删,不然以后编译驱动可能失败。
说到底,真正麻烦的不是“怎么关”,而是“该不该关”。很多自启项表面上看不出有什么用,实际上撑起了通知、剪贴板同步、输入法切换这些日常功能。动手之前花半分钟查清它到底是干啥的,比事后折腾快得多。
