我博客的老读者们可能都清楚,我之前一直是一个忠诚的 Ubuntu 用户,使用 Gnome-Shell 桌面环境,并且以调侃 KDE 和 ArchLinux 的非理性用户为乐。当然我早在 2021 年的时候,其实就已经开始将主力发行版从 Ubuntu 迁移到了 Fedora,一开始只是“试试看”,结果却一发不可收拾,持续使用到了现在。

所以就有了这篇带有说明书和手册性质的指导文章,起主要目的是帮助和指引那些不知道怎么安装、使用、调配 Fedora 的用户,消除他们的迷茫和困惑,同时分享一些自己的使用经验,希望帮到更多的人。

当然我也有私心,就是记录下自己的配置过程,方便未来自己查阅使用。

Screenshot from 2024-04-10 16-55-58.png

为什么是 Fedora?

本文开始之前我觉得我需要先解释一下我为什么要放弃 Ubuntu 转向 Fedora。首先是 Ubuntu 方面这些年一直在无脑推自己家的 snap 包格式,我不能说这个格式不好,但它的确有很大的局限性,比如启动速度和更新之类的。最不能接受的是 Canonical(Ubuntu背后公司)为了推广 Snap,在它许多功能没有作完的时候,就强行绑定和替换默认应用的安装包为 Snap,典型就是把默认的 Firefox 浏览器换为 Snap 版本,同时还对用户自行安装 deb 版本的 Firefox 设定各种阻碍。

而 Snap 版本的 Firefox 本身问题也很多,什么字体渲染啊,不支持通知推送啊……甚至在浏览器运行的时候还不支持更新,我在一台电脑上坚持了半年多实在是受不了了。

同时 Snap 这个东西还开始祸害 Ubuntu Server 版本,我知道 Snap 可以打包 CLI 软件,某种程度上很方便,但你让我什么东西都走 Snap 就很恶心了……尤其是在 Flatpak 已经几乎快成为业界事实标准的前提下,依然强推 Snap,属实是恶心。

与此同时我又得知了 Ubuntu 24.04 LTS 版本将会在 Snap 强推的道路上加大力度,所以我就更加推荐原来的 Ubuntu 用户过来尝试 Fedora 了。

抱怨了这么多,我还是要说一下,为什么我选择了 Fedora Worksation,而不是什么 Arch,Gentoo,Debian,NixOS,OpenSUSE 之类的。首先我个人是不太喜欢使用所谓的“滚动更新”版本的,这个概念听起来很美好,但带来的是诸多的使用隐患,最典型的问题就是经常容易“滚挂“,当然你可以说”滚挂“了还能很快的看文档修好,但对于我这种需要一个”稳定工作环境“的人来说,突然的”滚挂“都可能导致我电脑无法使用,我也很难保证我能抽出修复它的时间。当然如果你是时间比较充裕的人,或者是在“二奶机”上尝试 Linux,使用类似 Arch 或者 Gentoo 、甚至 Debian 这样的系统还是有折腾的意义的。

而 NixOS 和 Fedora SilverBlue 这类“不可变发行版”也是最近流行的,但我觉得它们依然不够成熟,而且对于使用用户而言有种“矛盾感”。在我看来“不可变“发行版更多是针对那些”不太懂电脑”的小白去使用,因为这个系统足够安全和可靠,但对于我这样需要经常配置系统的用户而言,“不可变”系统带来的反而都是制约和不变,所以我为什么非要去选择这么一个系统呢?用快照不香么?而且现阶段的“不可变”发行版那种用容器安装不同系统的操作方式本身你在常规发行版里也可以玩,更没什么优势。所以目前看来依然还是“可玩性大于可用性“,玩玩可以,作为主力还是不成熟。

Fedora 目前背靠红帽子,而且在软件的开发流程还有各种 Bug 的速度上,尤其是对 Gnome 系组件的更新部分,做的都比 Ubuntu 要好得多,不会存在 Ubuntu 那样从 Debian 拿过来的包有 Bug,后续没人修没人管只能找 PPA 的尴尬场景。加上我也是一个 Gnome 用户,所以 Fedora 也算是 Gnome 环境下的“亲儿子”待遇,使用它也是理所应当的了。


Fedora 是试验场?是小白鼠用的?不稳定?

关于 Fedora 的传言有很多,最多的还是这两句:

“Fedora 是 新技术的试验场,是给小白鼠用户的。“

“Fedora 特别激进,所以不稳定。“

这两句话前者算是对的,但后者就有待商榷了。Fedora 的确使用新技术特别激进,大部分很多 Linux 下的新特性,它都是第一时间上的,并且很快就推到了正式版里。包括 Wayland, btrfs,还有最新版本的 Gnome-shell 之类的,但这并不代表“不稳定”。

Fedora 的正式版本中,所有的软件包都是各自的“正式版”,Fedora 也从来没有拿过什么 Beta 版本的组件来打包,比如在 Fedora 40 中,包括的 Gnome 的所有组件,从 mutter 到 gnome-shell,从文字编辑器到终端,版本号全都是正式版,哪怕是各种依赖的小组件也都是正式版。大家都是正式版,你怎么能说所谓的“不稳定”了?许多人喜好的“滚动发行版”也是不停的滚动更新系统组件的正式版本,理论上 Fedora 和各种“滚动更新” Linux 的系统稳定性应该差不多,甚至前者还会比后者更好一点,何来的“不稳定”?

当然许多组件的新版本总归是有 Bug 的,但是新 Bug 用户报告的也快,得到修复的也快,只要乱折腾,Fedora 本身还是足够稳定的。

同时 Fedora 使用的 dnf 更新工具,在跨版本更新的时候也更加可靠,我已经更新了好几个大版本,没有遇到问题。


为什么我的 Fedora / Linux 总是不稳定?

首先,你是不是用了 Nvidia 的显卡?

大部分人 Linux 系统不稳定或者更新挂掉的根源,就是 Nvidia 显卡的闭源驱动导致的。虽然我个人可以搞定这一点,但我还是不建议对 Linux 不熟悉的用户,使用 Nvida 显卡的电脑安装各种 Linux,因为每一次更新都可能导致显卡驱动挂掉。

如果你是 Intel 集成显卡,或者 AMD 的集成显卡,采用开源驱动之类的,这些就会好很多。

其次,你是不是用了太多所谓的“优化”和“插件”?

我不建议给 Linux 进行太多优化,任何系统进行高强度的修改后都会变得不稳定。我看到过很多人说 Linux 不稳定的,仔细一问,发现都进行了什么所谓的“优化”,甚至在网上搜索到了什么“一键脚本优化”,那些脚本和优化的文章其实都是好几年前的了,早就过期了,许多新手什么都看不懂,贸然拿来运行,肯定会把系统搞得一团糟。

而且那些所谓“深度优化“的 Linux 每次更新也会带来更大的隐患,挂掉的几率也更大。而本手册在编写的时候也会把每一步操作写清楚,告诉你这么做的目的和利弊,有助于读者自行判断是否应该进行操作,出了问题也好排查。


本文配置 Fedora 的宗旨:专注 Gnome,一切原生,原汁原味

因为我使用 Android 手机就是原生系统党,用的也是 Pixel,那么本文配置 Fedora 和 Gnome-shell 的宗旨也是符合原生,能不改就不改,字体和各种界面都是使用原本的,就连安装配置用的也是系统默认的。

Gnome-shell 搭配尽可能少的插件,全面拥抱原生操作逻辑。文件系统使用 btrfs ,也就是默认的配置,许多人还认为 ext4 性能优于 btrfs,然而现在是 SSD 时代了,少的那点速度完全已经无法感知,而 btrfs 的快照功能却可以让你幸福许多。目前 btrfs 不稳定的点是用来做 raid,不过我们作为个人用户也不会拿来做 raid。话说回来了,ext4 你就确定没有文件丢失风险了吗?最好的应对措施还是备份,备份,备份!

关于 SWAP 分区,也及建议根据默认,实际上现在的 ZSWAP 技术已经足够成熟,在各种安卓手机上用的也不少,默认启用挺好,不必刻意对 swap 进行分区。

而 Fedora 最佳的安装选择自然是 Wayland 而不是 X11,很明显 X11 已经即将被淘汰。目前除了那些 Nvidia 独显用户,我想不到继续用 X11 的理由。而 Nvidia 显卡的使用者我也不太建议用 Fedora,毕竟炸驱动是常态,还是用 Ubuntu 更好一些,本文主要也是针对 Intel 和 AMD 集成显卡用户来写的。

前面的废话说的也够多了,下面正篇开始:


配置更新源

首先部署系统需要确立安装配置,本文安装的配置为:Fedora + Gnome Shell + Wayland + btrfs 这一套,全部照搬 Fedora 官方推荐。

当然你要安装 KDE 或者 X11 也可以,本文中也有部分内容可以共用到 KDE 的桌面环境中(譬如字体渲染等)

首先安装系统,建议选择默认的抹去整个磁盘的方式,文件系统使用 btrfs,默认的分区会保留 500MB 左右的 Boot 分区,这个务必要保留,因为现阶段的 Grub 并不完全支持启动 btrfs 格式的 Boot 分区,或许可以启动,但是会报错。

所以不要强迫症发作,把 Boot 目录也变成 btrfs 格式,记得独立出来,而这个目录最好保留 500MB 到 1GB 的空间,用来存放各种启动 Kernel (内核),避免将来会被内核塞满。

系统安装可选择中文语言,也可选择英文,我选择的是英文。理由就是 Gnome 的中文化太丑陋,而且经常有很多菜单翻译的很怪。

安装完毕后第一件事就是

更新系统:

sudo dnf update

然后就是

启用 rpm-fusion 源

sudo dnf install https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm

这个源中存在有许多非开源的软件,但本源也有浓厚的官方背景,属于 Fedora 用户必备了。

安装 gnome-tweaks

sudo dnf install gnome-tweaks

这是一个 Gnome 用户必备的 Tweak 工具,可以修改许多内容,包括打开被隐藏的最小化和最大化窗口按钮等。

添加 Flathub 中国镜像

sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub

添加镜像后可以让 flathub 的速度快一点,当然如果你不在中国大陆地区的话,就没有添加的必要。

https://mirror.sjtu.edu.cn/docs/flathub

添加 Fedora 默认源中国镜像

方法可参考这里:
https://mirror.sjtu.edu.cn/docs/fedora/linux

但是我个人觉得没有必要,理由是 Fedora 自身的更新支持镜像源检索,另一个理由是官方的源可以更快的安装一些新的包。


安装中文字体和配置字体渲染

首先我先说一下默认情况下 Fedora 安装之后的中文显示问题:包括部分字体过粗和过细;字形显示歪歪扭扭;部分字形显示异常,比如“绘画”的“画”会变成日文汉字中的“画”;以及英文和中文字体混合显示时候的高低不一问题;还有系统菜单栏以及锁屏界面的时钟中“冒号”的显示距离过宽的问题……

这些我们一条一条说,先说字体过粗过细的问题:

一直以来 Fedora 默认的中文字体都是“思源黑体”,使用的是 Noto CJK ,而从 Fedora 39 开始,Fedora 为了节省空间(至少它们是这么说的),将思源黑体的字体文件变成了 VF 版本,也就是“可变字体“(Variable fonts),这原本算是一件好事,但这带来了新的问题。在 QT 程序下,典型的就是 Telegram,会对这个所谓的”可变字形”支持不好,造成有些字体过粗,有些字体过细的问题。关于这个问题也有 Bug 报告可查询:

https://bugreports.qt.io/browse/QTBUG-111994
https://bugzilla.redhat.com/show_bug.cgi?id=2178389

虽然这个问题官方说解决了,也 Patch 了,但在我这里只能算是“改善”,并不能解决。当然我们可以用另一种方法解决这个问题,既然 Fedora 39 开始 Noto 中文字体都变成了“可变字体”,我们可以安装 adobe-source-han-sans 字体来进行替换,因为理论上 adobe-source-han-sans 和 Noto Sans CJk 还有“思源黑体”其实都是同样的东西,而 adobe-source-han-sans 目前还没有变成“可变字体”,可以实现和之前一样的显示效果。

然后是字形歪歪扭扭的问题,这个是字体渲染的问题。

Feodra 默认的字体渲染是“灰度”+“轻度”的方式,很多网上的教程会让你改为“RGB次像素渲染”,但我个人不太推荐。一方面是这个方法名义上已经过时了,字体渲染从 GTK4 版本开始就在持续优化,一方面是为了更好的支持“非整数缩放”,另一方面则是提升了字体的清晰度,这些都是在针对“灰度”+“轻度”进行的,而“RGB次像素渲染”并不能享受到这些。另一方面是这个“次像素渲染”会带来一些其他的问题,尤其是对于平板等设备,从横屏变成竖屏会发现字体变得很“花”很“模糊”,就是这种渲染的弊端。与此同时 MacOS 设备也早已抛弃了这个渲染方式,可见并没有坚持使用的必要。

https://blog.gtk.org/2024/03/07/on-fractional-scales-fonts-and-hinting/

解决这个方法可以通过自行编写 Fontconfig 来解决,这个后面会说。

接着是字形显示异常的情况。

这个问题很多人都说过,思源黑体是一个系列,针对“中日韩”好几个语言的集合,这个字体很多字形的代码是通用的,这就会导致有时候程序分不清一个汉字到底是中文还是日文,到底是繁体中文还是简体中文,就会导致显示错误。

同样这个问题也可以用 Fontconfig 文件解决。

还有一个问题也十分普遍:英文和中文字体混合显示时候的高低不一

这个问题的根源还是在“思源黑体”上,字体本身有一个“基线”(Baseline)设定,就是通过这根标准线来对齐水平,但操蛋就操蛋在这个“思源黑体”的“基线“下面留下了巨大的空白,这就导致这个字体和英文一起显示的时候会忽高忽低很尴尬。但好在只是少部分程序,尤其是涉及 UI 显示的部分才会出现这个对不齐的情况,大部分包括网页之类的还是挺正常的。

解决的办法也很简单,需要找一个完美搭配中英文基线显示的字体,配合 Fontconfig 来解决。那么有没有这么一个字体呢?有的,就是来自华为鸿蒙系统的 HarmonyOS Sans。

据说这个问题是仅仅存在于“英文环境”,中文环境很 OK,如果感觉显示没问题,那就没必要修改。

最后就是困扰我许久的顽疾:系统菜单栏以及锁屏界面的时钟宽度问题

如果你贸然使用 Gnome-Tweak 之类的工具把系统字体改为“微软雅黑”或者其他自己喜好字体之后,你就会发现尴尬的一幕,你的菜单栏的时钟会变宽了,你的锁屏界面的时钟也会变宽,尤其是中间那个“冒号”,占地面积特别的大。

IMG_20200410_162542.jpg

当然这个问题许多人也报告过:

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2618

原因也十分有趣,因为这个时钟中间的“冒号”并不是所谓的“冒号”,而是一个“Ratio”字符,也就是“比例”字符。类似我们常说的比赛比分中的“几比几”的那个中间字符。大部分字体中对这个字符的显示都是偏宽的,而只有少部分字体中的“Ratio”字符才会显示的比较“窄”一点,其中这个“少部分”就包括 Gnome-shell 默认字体 Cantarell。

换而言之,想要这个时间的间距显示正常,你就只能用默认的 Cantarell 字体。

想要解决这个问题,一样要通过 Fontconfig 来想办法。

接下来就开始配置了:

首先是安装 adobe-source-han-sans 字体:

sudo dnf install "adobe-source-*"

然后去鸿蒙 OS 官方文档下载 Harmony OS Sans 字体:

https://developer.huawei.com/consumer/en/doc/design-guides-V1/font-0000001157868583-V1
https://github.com/ajacocks/harmonyos-sans-font

将字体解压到 home 目录的 ~/.local/share/fonts 中,当然你也可以用 root 全线拷贝到 /usr/share/fonts/ 目录中

接着创建本地文档:~/.config/fontconfig/fonts.conf

写入以下内容: