说实话,刚装好 Silverblue 的时候,我差点以为显卡驱动没装对。那种鼠标移动有“滞后感”,切换窗口像慢动作,甚至打开一个 Firefox 标签页都要犹豫半秒的体验,真的很劝退。毕竟我们习惯了传统 Linux 发行版那种“开箱即用、稍微调调就飞起”的感觉,Silverblue 这种immutable(不可变)系统,第一次遇到卡顿确实容易让人慌。
但别急,这锅大多数时候不是 Silverblue 的锅,而是配置或者软件选择的锅。Silverblue 的核心是 Fedora KDE/GNOME 加上 OSTree 和 RPM-OSTree,底层其实和普通的 Fedora Workstation 共享着同样的内核和驱动栈。所谓的“卡顿”,90% 可以通过用户态(User-space)的调整来解决,完全不需要你折腾复杂的 root 权限操作,也不用破坏那个珍贵的 OSTree 镜像。
今天我们就把这个问题掰开了揉碎了讲清楚,从最直观的界面体验,到后台的资源调度,再到那些让 Silverblue 独特的容器化应用,我们一步步来优化。
第一件事:先搞清楚卡顿的“真凶”
在动手之前,我们需要一个冷静客观的视角。Silverblue 默认启用的是 Wayland,而大多数老旧的硬件或者特定的 NVIDIA 显卡组合,在 Wayland 下的表现可能并不如预期中的 X11 稳定。另外,GNOME Shell 本身就是一个资源大户,它在渲染动画、扩展和后台服务时非常激进。
我们可以先打开终端(在 Silverblue 中,你可以右键桌面选择“在终端中打开”,或者用快捷键 Ctrl+Alt+T),运行几个简单的命令来捕捉瞬间:
# 查看当前的 Wayland 会话信息
echo $XDG_SESSION_TYPE
echo $DESKTOP_SESSION
# 使用 top 命令观察 CPU 和内存占用,按 1 查看 CPU 核心,按 q 退出
top
如果 XDG_SESSION_TYPE 显示的是 wayland,而你用的是 NVIDIA 显卡且版本较老(比如 390 系列或更老),这很可能是罪魁祸首。但对于大多数 NVIDIA 470+ 或 535+ 驱动用户,Wayland 已经相当稳定。更常见的问题在于 GNOME 的内存管理和后台索引服务。
优化桌面环境:告别臃肿的 GNOME Shell
Fedora Silverblue 默认携带的是 GNOME 桌面。GNOME 非常漂亮,但它的动画效果、工作区切换、以及那个令人又爱又恨的“显示应用程序”网格,都在暗中吞噬你的 GPU 和 CPU 资源。
1. 精简 GNOME 扩展
这是最简单也最有效的一步。很多人安装 Silverblue 后,第一件事就是去 GNOME Extensions 网站装十几个扩展:系统监视器、隐藏顶栏、动态工作区、自定义主题……每个扩展都是一个单独的进程,有些甚至在后台不断轮询硬件状态。
建议操作:
- 打开
Extensions应用。 - 禁用掉所有非必要扩展。特别是那些提供“实时监控图表”的扩展,它们在后台持续刷新数据,对低端硬件极不友好。
- 如果你需要监视 CPU/内存,使用终端命令或更轻量的面板小程序,而不是一个常驻内存的扩展。
2. 调整动画与过渡效果
GNOME 的动画默认是“丝滑”的,但这种丝滑是以 GPU 渲染为代价的。在 4K 屏幕或者集成显卡设备上,这些动画可能导致帧率波动。
我们不需要 root 权限,直接通过 gsettings 或者 GNOME Tweaks(需要安装)来调整。
# 使用 GNOME Tweaks 可以更直观地操作
# 如果没有安装,可以用 flatpak 安装:
flatpak install flathub org.gnome.Tweaks
# 或者直接用命令行关闭部分动画(效果立竿见影)
gsettings set org.gnome.desktop.interface enable-animations false
关闭动画后,界面的响应速度会有质一般的提升。窗口打开不再是“淡入淡出”,而是直接出现,这种即时反馈会让系统感觉“快”了很多。虽然牺牲了一点美观,但对于追求流畅度的用户来说,这是值得的。
3. 禁用不需要的后台服务
Fedora 默认启用了一些方便的服务,比如打印服务(CUPS)、蓝牙管理(如果不用蓝牙)、以及某些搜索索引。
注意:在 Silverblue 中,我们不能直接 systemctl disable 系统级服务,因为 /etc 是只读的,且修改系统服务可能影响 OSTree 的一致性。但是,我们可以禁用用户级服务。
# 查看并禁用用户级的 bluetooth 服务(如果你不用蓝牙)
systemctl --user disable --now bluetooth.service
# 禁用 cups(如果你没有打印机)
systemctl --user disable --now org.cups.cupsd.service
这些命令只会影响当前用户,不会破坏系统完整性。如果将来需要,随时可以用 enable 重新开启。
浏览器优化:吞噬内存的黑洞
在现代 Linux 桌面中,Firefox 是资源占用大户,尤其是当你打开十几个标签页时。Silverblue 推荐的 Firefox 是开源版本,本身优化得不错,但我们需要手动干预。
1. 启用硬件加速
确保 Firefox 正在使用你的 GPU 进行渲染。
- 打开 Firefox,地址栏输入
about:config。 - 搜索
layers.acceleration.force-enabled,将其设置为true。 - 搜索
media.ffmpeg.vaapi.enabled,确保为true(这启用了视频硬解,减轻 CPU 负担)。
2. 限制 Firefox 的内存使用
Firefox 有个特性叫“内存节流”,但它有时会过度激进或不够激进。我们可以通过 about:config 调整:
# 在 Firefox 地址栏输入 about:config
# 设置 dom.ipc.processCount 为你 CPU 核心数的一半(例如 4核CPU设为2)
# 这限制了 Firefox 的最大进程数,防止它吃光内存
3. 考虑轻量级替代方案
如果 Firefox 依然让你感到卡顿,可以考虑在 Silverblue 上使用 Flatpak 版本的 Chromium 或 Brave。Flatpak 应用在隔离环境中运行,有时能避免一些系统库的冲突。更重要的是,Chromium 在多标签页管理上的内存效率有时优于 Firefox,具体取决于你的使用习惯。
# 安装 Chromium via Flatpak
flatpak install flathub org.chromium.Chromium
RPM-OSTree 专属优化:清理历史版本
这是 Silverblue 区别于传统发行版最关键的一点。每次你运行 rpm-ostree upgrade 或系统自动更新,新的 OS 层(OS Layer)会被添加,但旧的层并不会立即删除。这意味着你的 /usr 目录下会堆积多个版本的系统文件,占用大量磁盘空间,甚至可能因为文件过多而影响文件系统的遍历速度(虽然现代 Ext4/XFS 对此优化很好,但大量旧文件仍可能带来细微的 IO 压力)。
1. 查看当前保留的版本数量
rpm-ostree status
你会看到类似这样的输出:
State: idle
AutomaticUpdates: verbose
Deployments:
● fedora:fedora/x86_64/silverblue
Version: 40.20240201.0 (2024-02-01T10:00:00Z)
fedora:fedora/x86_64/silverblue
Version: 40.20240115.0 (2024-01-15T10:00:00Z)
这里显示你有两个部署,一个是当前正在使用的(带 ●),另一个是旧的。
2. 自动清理旧版本
Silverblue 默认会保留最近一次更新的备份,以防升级失败可以回滚。但如果你确定当前版本稳定,可以配置自动清理。
编辑 /etc/ostree/remotes.d/fedora.json 或者直接通过命令行设置:
# 设置自动清理,只保留当前版本和上一个版本(默认就是1个旧版本,可以调整为0)
# 注意:设置为0意味着如果新升级失败,你将无法回滚到上一个版本,请谨慎操作
sudo ostree admin cleanup --delete-unreferenced
实际上,更安全的做法是定期手动运行:
# 清理未被引用的对象(需要 sudo,但这是安全的系统维护操作)
sudo rpm-ostree cleanup --replicas=0
这个命令会删除旧版本的缓存,释放磁盘空间。磁盘空间充足也能间接提升系统性能,因为 swap 分区和临时文件需要有地方存放。
Flatpak 应用的“瘦身”与加速
Silverblue 用户大量依赖 Flatpak。虽然 Flatpak 提供了更好的隔离性和安全性,但它也有一些性能陷阱。
1. 清理 Flatpak 缓存
Flatpak 会缓存下载的运行时和应用程序数据。随着时间推移,这些缓存会变得非常臃肿。
# 查看 Flatpak 缓存大小
flatpak list --app-data | awk '{print $1, $2, $5}' | column -t
# 清理所有已安装 Flatpak 应用的旧运行时和缓存
flatpak uninstall --delete-data --unused
这一步非常关键!很多用户发现系统变慢,实际上是因为 /var/lib/flatpak 目录下堆积了几个 GB 的旧运行时库。清理后,不仅磁盘空间释放了,系统扫描 Flatpak 应用菜单的速度也会变快。
2. 使用更轻量的替代品
有些应用有 Flatpak 版本,但也有原生的 RPM 版本(通过 rpm-ostree install 安装)。一般来说,原生 RPM 应用比 Flatpak 启动更快,因为它们不需要启动一个完整的容器环境(虽然 Flatpak 的启动速度已经很快了)。
例如,如果你需要图片查看器,GNOME 照片可能太重了。可以考虑安装 gpicview 或 eog 的原生版本:
# 通过 rpm-ostree 安装轻量级原生应用
rpm-ostree install gpicview
注意:rpm-ostree install 需要重启才能生效,因为它会重新组合 OS 层。所以建议一次性收集所有需要安装的原生工具,然后一起安装,减少重启次数。
3. 禁用 Flatpak 应用的后台自动更新
Flatpak 默认会在后台检查并下载更新,这会占用网络和 CPU 资源。
# 禁用 Flatpak 的自动更新
flatpak update --disable
你可以设置一个固定时间(比如每周一次)手动运行 flatpak update,这样系统在其他时间不会被打扰。
内核与驱动程序:被忽视的性能关键
虽然 Silverblue 是 immutable 系统,但我们仍然可以通过一些用户态手段来优化内核参数。
1. 调整 swappiness
默认情况下,Linux 的 swappiness 值是 60,这意味着当内存使用达到 60% 时,系统就开始倾向于将不常用的内存页换出到交换分区。对于桌面用户,尤其是内存小于 16GB 的用户,这个值太高了,会导致频繁的磁盘 IO,从而引起卡顿。
我们可以通过 sysctl 临时调整,并保存到用户配置中:
# 临时设置为 10(更激进地使用内存,减少 swap)
sysctl vm.swappiness=10
# 为了让设置持久化,我们可以创建一个用户级的 sysctl 配置
# 注意:在 Silverblue 中,/etc/sysctl.d/ 是只读的,但 /usr/lib/sysctl.d/ 也是只读的
# 正确的方法是使用 systemd-sysctl 或者创建一个 /etc/sysctl.d/ 的覆盖层
# 但实际上,对于普通用户,我们可以使用以下技巧:
# 创建一个 shell 脚本在登录时运行
mkdir -p ~/.config/systemd/user
cat > ~/.config/systemd/user/swappiness.service << 'EOF'
[Unit]
Description=Set swappiness to 10
[Service]
Type=oneshot
ExecStart=/usr/bin/sysctl vm.swappiness=10
[Install]
WantedBy=default.target
EOF
# 启用并启动这个服务
systemctl --user enable --now swappiness.service
这样,每次你登录时,swappiness 都会自动设置为 10,显著提升内存充足时的响应速度。
2. 检查 NVIDIA 驱动状态(如果是 NVIDIA 用户)
对于 NVIDIA 用户,Silverblue 的 nvidia-installer 脚本可能会遇到权限或内核版本不匹配的问题。确保你的驱动是正确安装的:
# 检查 NVIDIA 模块是否加载
lsmod | grep nvidia
# 检查驱动程序版本
nvidia-smi
如果 nvidia-smi 显示无法连接驱动程序,或者帧率极低,可能需要重新运行 nvidia-installer:
sudo /usr/bin/nvidia-installer
# 完成后重启
sudo reboot
日常使用习惯的调整
除了技术调整,一些使用习惯的改变也能带来立竿见影的效果。
1. 减少后台应用的启动项
很多应用会在登录时自动启动,比如 Slack、Discord、Spotify 等。这些应用在后台持续运行,占用内存和 CPU。
- 打开
设置->应用程序->启动。 - 禁用那些不需要在登录时立即运行的应用。
- 对于 Flatpak 应用,检查它们的启动选项,有些应用有“启动时最小化到系统托盘”的选项,启用它可以减少显存占用。
2. 使用轻量级终端
默认的终端模拟器(如 GNOME Terminal 或 Tilix)功能丰富,但在资源有限的情况下,可以考虑更轻量的替代品,如 kitty 或 alacritty,它们利用 GPU 渲染,响应速度极快。
# 通过 Flatpak 安装 Kitty
flatpak install flathub org.kovidgoyal.kitty
# 通过 rpm-ostree 安装 Alacritty(需要重启)
rpm-ostree install alacritty
3. 定期监控与排查
养成使用 htop、btop 或 ps 命令的习惯,定期查看哪些进程占用了大量资源。Silverblue 的 toolbox 容器虽然隔离了开发环境,但如果你在里面运行了重型任务(如编译大型项目),也会影响宿主机的性能。
# 在 toolbox 中,也可以使用相同的命令进行监控
toolbox enter
htop
总结:没有银弹,但有方向
优化 Fedora Silverblue 的卡顿问题,并不需要一个惊天动地的修改,而是一系列细微调整的组合。从关闭 GNOME 动画、精简扩展,到清理 Flatpak 缓存、调整内核参数,每一步都在为你的系统“减负”。
记住,Silverblue 的设计理念是“稳定性”和“可重复性”,但这并不意味着它不能流畅。相反,一个经过精心优化的 Silverblue 系统,可以在保持系统纯净的同时,提供令人惊艳的桌面体验。
如果你按照上述步骤操作后仍然感到卡顿,那可能需要考虑硬件瓶颈了。在这种情况下,换个更轻量的桌面环境(如 Fedora KDE Silverblue 或 XFCE Silverblue)可能会是更好的选择。毕竟,技术是为人服务的,而不是让人去适应技术的。
希望这篇教程能帮你找回 Silverblue 应有的流畅度。如果有其他问题,欢迎随时交流!
