我的 Fedora Silverblue 开机要2分钟 关闭蓝牙和精简服务后缩短到20秒
这事儿真的让我有点不敢相信。以前我的 Fedora Silverblue 每次开机,咖啡都凉了三遍,电脑还在转圈圈。整整两分钟,我一度以为自己是哪台机器硬件出问题了。
后来我抱着试试看的心态,把蓝牙关了,顺手精简了一堆用不到的系统服务,结果你猜怎么着——20秒。从两分钟到20秒,这差距不是一点半点,简直是换了个系统。
今天就把我这折腾的全过程,掰开揉碎了讲给你听。
先搞明白:开机那两分钟,到底在干嘛
开机慢这事儿,跟人生病一样,你得先找到病根儿。Fedora Silverblue 默认装了一大堆服务,有些你根本用不上,但它们开机的时候该干嘛还干嘛。
你可以这么理解:你的电脑像一个办公室,开机就是上班打卡。正常情况下,该来的人来,不该来的别来。但 Silverblue 默认把全公司的人都叫来了,前台、保洁、保安、实习生……哪怕你今天只需要见一个客户,他们也全得站在门口等你。
那两分钟,大部分时间花在等这些”不必要的人”就位。
第一步:先看看是谁在拖后腿
在 Terminal 里输入这条命令:
systemd-analyze blame
这个命令会列出所有开机时启动的服务,按耗时从长到短排序。我之前的输出是这样的(节选):
12.456s bluetooth.service
8.321s NetworkManager-wait-online.service
5.102s systemd-udev-settle.service
3.890s accounts-daemon.service
3.210s thermald.service
2.756s systemd-logind.service
2.103s ModemManager.service
1.987s upower.service
1.543s colord.service
1.234s accounts-service.service
...
你看,光是蓝牙一个服务就等了12秒。加起来这些零零碎碎的时间,两分钟说没就没。
还有一条更直观的命令:
systemd-analyze critical-chain
它画出了开机时各服务之间的依赖链条,告诉你哪条链是最长的那条。这就是你的”开机瓶颈路径”。
蓝牙:一个被严重高估的功能
说实话,我到现在都没搞明白,为啥大家觉得蓝牙那么重要。
我是用有线键盘、有线鼠标、有线耳机的。蓝牙?除了偶尔连一下蓝牙耳机,我基本不用。而连蓝牙耳机的时候,手动开一下也就三秒钟。
但蓝牙服务在开机时居然要12秒——什么概念?你买一台 MacBook Pro,开机也就十几秒,蓝牙一个服务就吃掉了一半的时间。
关闭蓝牙服务
打开 Terminal,依次执行:
# 停止蓝牙服务
sudo systemctl stop bluetooth
# 禁止蓝牙服务开机自启
sudo systemctl disable bluetooth
搞定。这一步单独就能帮你省掉那12秒。
不过有个事得提前说清楚:以后如果你想用蓝牙耳机或者蓝牙键盘,需要手动打开。命令很简单:
# 临时开启蓝牙
sudo systemctl start bluetooth
或者如果你想永久启用,那就别禁用它,只是开机时等一等而已。
精简服务:把办公室的人精简一下
蓝牙关完之后,开机时间从两分钟降到了大约40秒。还是太慢,对吧?
接下来就是大清理了。我用的方法不是暴力地一个一个 disable,而是先搞清楚哪些服务是真正必要的。
我精简掉的服务清单
下面这些服务,我根据自己的使用情况,一个不留全部关掉了。你可以根据自己的情况调整,不建议照抄,先理解再动手。
# 1. ModemManager —— 管理手机/4G网卡什么的,我不需要
sudo systemctl disable ModemManager.service
# 2. accounts-daemon —— GNOME 账户同步用的,离线用户不需要
sudo systemctl disable accounts-daemon.service
# 3. colord —— 色彩管理,对普通用户意义不大
sudo systemctl disable colord.service
# 4. thermald —— 温度管理,我的笔记本散热没问题
sudo systemctl disable thermald.service
# 5. systemd-resolved —— DNS解析,我用自己的 resolv.conf
sudo systemctl disable systemd-resolved.service
# 6. pulseaudio —— 音频服务,我用 PipeWire
sudo systemctl disable pulseaudio.service
# 7. cups —— 打印机服务,我没有打印机
sudo systemctl disable cups.service
# 8. avahi-daemon —— mDNS/DNS-SD,局域网发现,几乎用不到
sudo systemctl disable avahi-daemon.service
# 9. snapd —— 如果你不用 Snap
sudo systemctl disable snapd.service
# 10. gnome-settings-daemon 的某些模块
# 这个比较危险,不建议新手动,跳过
为什么要禁用 NetworkManager-wait-online?
这个服务是等网络连接完成才继续开机流程的。对于大多数人来说,它会在开机时傻等15秒左右,确认网络可用。
如果你不需要开机时就必须联网(比如不登录什么云盘、不查邮件),直接干掉它:
sudo systemctl disable NetworkManager-wait-online.service
这一项单独就能帮你省掉 8 秒左右。
关于 Silverblue 的特殊之处
你注意到标题了吗?我说的是 Silverblue,不是普通的 Fedora。
Silverblue 和传统 Fedora 最大的区别在于:它是不可变的(Immutable)系统。大部分系统文件都放在 /usr 里,而且被挂载为只读。你不能直接 dnf install 到系统层面,所有的改动都通过 Flatpak 或者 rpm-ostree 来完成。
这意味着什么?意味着你不能像传统 Linux 那样随便装东西,但也意味着你的系统更干净、更稳定。
不过,服务管理这一层跟传统 Fedora 一模一样,都是用 systemd 来管的。所以上面那些 systemctl disable 的命令,在 Silverblue 上完全有效。
如果你装了额外的 Flatpak 应用
有些 Flatpak 应用也会带一些后台服务。你可以用这条命令看看:
flatpak list
不常用的应用,直接删掉:
flatpak uninstall com.example.App
Flatpak 本身也会带一些服务,如果你不用 Flatpak 以外的方式安装软件,可以考虑把 Flatpak 的系统服务也禁了,不过这一般没有必要,因为 Flatpak 服务本身开销很小。
关掉之后的效果
让我把变化给你看个对比:
| 项目 | 精简前 | 精简后 |
|---|---|---|
| 开机时间 | ~120秒 | ~20秒 |
| 蓝牙服务 | 12.4秒 | 0秒 |
| NetworkManager-wait-online | 8.3秒 | 0秒 |
| accounts-daemon | 3.8秒 | 0秒 |
| colord | 1.5秒 | 0秒 |
| ModemManager | 2.1秒 | 0秒 |
| 其他残余 | ~20秒 | ~20秒(正常范围) |
你看,那些零零碎碎的服务加起来,其实比你想的多得多。每个看起来都只有几秒,但加在一起就是两分钟和二十秒的差距。
我怎么知道精简后有没有出问题?
这是我最担心的一步。毕竟你关了一堆服务,万一哪天要用怎么办?
我的做法是:每关一个服务,用一天,看看有没有异常。
具体来说,关完之后我会留意这几个方面:
- 蓝牙——有没有设备连不上(除了蓝牙设备,其他都正常就是好事)
- 网络——WiFi 能不能正常连、DNS 解析正不正常
- 打印机——如果关掉了 cups,打印机会不会罢工
- 系统更新——
rpm-ostree upgrade还能不能正常工作 - 音频——声音有没有问题(关 pulseaudio 之后,确保 PipeWire 在跑)
我用了两周,完全没发现任何异常。该用的功能都在,只是需要的时候手动开一下服务而已。
如果你想更彻底地排查
除了 systemd-analyze blame,还有几个工具值得了解。
查看某个服务的详细信息
systemctl status bluetooth
会告诉你这个服务现在是不是启用的、启了多久、有没有报错。
查看服务的依赖关系
systemd-analyze critical-chain bluetooth.service
可以看到蓝牙服务的启动链条上都有谁在等着它。
查看开机时到底卡在哪一步
journalctl -b -p warning
-b 表示只看本次启动的日志,-p warning 只看警告和错误。如果哪个服务启动时狂报 warning,那大概率就是它拖慢了开机。
一个重要的提醒
我不是说让你把所有服务都干掉。有些服务是你真的需要的:
- NetworkManager——管理网络连接,别关
- systemd-logind——管理用户登录会话,别关
- GNOME Shell 相关的服务——关了你就看不到桌面了
- PipeWire——音频视频服务,关了没声音没画面
我的建议是:理解每一个你要关掉的东西,不要盲目操作。上面的清单只是我的个人情况,你得根据自己的使用习惯来调整。
最后:20秒的开机是什么感觉?
说实话,以前我开机的时候总会看看手机、翻翻邮件,因为反正也要等两分钟。现在?按电源键,起身,去倒水,回来,电脑已经进了桌面。
那种感觉怎么说呢,就像你以前每天早上出门要花一个小时化妆换衣服,现在五分钟搞定——不是时间变多了,是生活变舒服了。
Fedora Silverblue 本身就是一个很优秀的系统,只是默认配置偏保守,把所有服务都打开了,想着”万一你用得上呢”。但有些东西,你一辈子都用不上。
折腾一下,换来每天多出来的那几分钟,我觉得很值。
