Plum's Blog

Fedora 42 安装记录

前言:

之前曾经写过一份 Fedora 40 的安装手册,记录了一些自己安装和进行初步配置的笔记,以及一些“如何让 Fedora 用起来不糟心”的心得,这份心得放到现在来看依然可用,不如说更加可用了。

简单说还是一句话:如果你用 Fedora(Gnome),那你就尽可能选择适应 Gnome 的那种操作逻辑和设计思路,否则的话还是 KDE 更好。

这次写的是关于 Fedora 42 版本的记录,相比于之前的进行了一些更新,有部分内容也是直接沿用上一版,一些在新版中没有必要的操作,也会对应的删除。关于 Gnome 的一些言论和关键还会保留在 Fedora 40 的那篇文字里,未来有可能单独提取出来,或许等到下一版 Fedora 的手册里吧。

安装 Fedora 和基础配置推荐准备好科学上网的手段,尤其是路由器端的全局方案更好,否则的话要么速度慢,要么有些连接不上。


系统安装:

Fedora 42 的安装程序是新版的,基于 Web 的,是邪恶的,难以置信的,如果你机器配置太差,内存太小,还会弹出什么 Firefox 失去响应的提示,如果你 Firefox 被杀了,这个所谓的安装器就会显示什么“失去连接”,我个人是不喜欢的,但是也没什么办法。

如果你配置不太好,安装的时候就不要乱动,安心等进度就好。如果你在安装那一步突然提示你 Firefox 被杀了,那也不要急,多等一会,等到你感觉 CPU 和内存占用都下去了,直接重启,没准系统已经装好了。你挂掉的只是一个显示进度条的 Web 前端界面而已。

硬盘分区如果没有意外我推荐你使用“整块硬盘”和默认分区,就是 btrfs 的那个,理由之前有说,btrfs 虽然有问题,但是你不用 raid 影响不大,而且 btrfs 带来的新特性的优势是要明显优于 ext4 仅存的那点性能优势的。

当然我还是不推荐在严肃应用机器上,比如存储重要数据的 NAS 上盲目用 btrfs ,但是对于 PC 来说 btrfs 已经很够用了。

除非你明白 swap 分区是干嘛的,否则没必要单独设定 swap 分区,使用现在的 Zram 就足够。


基本源配置:

第一次安装完 Fedora 42 后启动进入桌面,进入一个基本的配置,让你创建用户名什么的,这里有一个配置提示“启用第三方仓库”之类的,记得启用,就自动配置好了 flathub 的源了,不再需要自己配置。

连接到 Wifi 之后首先更新系统:

sudo dnf update

如果你激进的话可以先用 Testing-update 更新一下,一般会有更新的内核和 Mesa,对于那些用最新芯片笔记本的用户来说可以试试,否则就不必了。

sudo dnf update --enablerepo=updates-testing --refresh

接着就是启用 rpmfusion

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

如果你前面在第一次登陆的时候没有选择启用“第三方软件仓库”,而错过了启用 flathub 的话,也可以手动启用。

flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

flathub 曾经有一个国内镜像,但是那个镜像挂过,导致过很大的问题,但现在似乎镜像又可用了,除非你实在是访问国际互联网有问题可以用镜像,否则还是用原版的 flathub 比较好。


安装常用插件:

打开 Gnome-shell 的扩展官方网站:

https://extensions.gnome.org/

第一次打开是需要提示你安装一个浏览器插件的,点击那个“Click here to install browser extension.”安装插件之后,就可以安装常用插件了,目前支持 Firefox 和 Chrome,Edge 不清楚,大概率不支持。

这里推荐一些我认为值得使用的扩展:

必装类:

支持任务栏插件,让你的 telegram 之类的 app 最小化之后能看到图标
https://extensions.gnome.org/extension/615/appindicator-support/

咖啡因插件,可以让你的电脑暂时避免睡眠
https://extensions.gnome.org/extension/517/caffeine/

GTK4版本的桌面图标插件,可以显示出桌面图标(Gnome 默认是没有桌面图标的)
https://extensions.gnome.org/extension/5263/gtk4-desktop-icons-ng-ding/

自动根据时间切换夜间和白天模式(还支持切换壁纸)
https://extensions.gnome.org/extension/2236/night-theme-switcher/

显示大小写锁定和各种锁定键的状态,可以设置为默认隐藏,只有锁定状态才显示
https://extensions.gnome.org/extension/36/lock-keys/

可显示电脑上的内存和CPU占用以及温度和当前功耗
https://extensions.gnome.org/extension/1460/vitals/

非必要扩展:

边缘操控扩展,允许你鼠标移动到屏幕底端自动出现 dock,容易导致误触,推荐适应触摸板和 win 键操作
https://extensions.gnome.org/extension/4222/hot-edge/

毛玻璃特效:可能会导致崩溃和性能下降
https://extensions.gnome.org/extension/3193/blur-my-shell/

窗口智能平铺插件:你说你都用平铺了,为什么不直接换 hyperland 之类的 wm 呢?
https://extensions.gnome.org/extension/3733/tiling-assistant/

Just Perfection:一个高度自定义插件,可以打开关闭所有窗口和特效,看似自定义很多但都没什么鸟用
https://extensions.gnome.org/extension/3843/just-perfection/

老款桌面图标扩展:不如新款GTK4的整合好,但是性能好一些
https://extensions.gnome.org/extension/2087/desktop-icons-ng-ding/

可以在左上角顶栏实现类似 Windows 10/11 的 Dock 效果,但看起来很臃肿
https://extensions.gnome.org/extension/5180/rocketbar/


安装 Fcitx5 中文/日文输入法

理论上 Gnome 的原生输入法应该是 iBus,我也尝试过,但无奈这 iBus 太烂了,主要烂的地方有三点:

1,输入速度过快的话经常会卡死,一直有人报 Bug,官方也一直在优化,但优化了那么多年,还是会卡死……

2,对 QT 程序支持欠佳,许多 QT 程序中都无法启用输入法,别问,问就是让你换 GTK 的程序

3,Fedora 默认打包没有开启“云拼音”。这个是最抽象的,iBus 的拼音是支持云拼音输入法的,但是 Fedora 打包的时候给禁用了,理由是“不开源,涉嫌隐私问题”,而且它们还没有给用户一个选择的空间,比如在 rpmfusion 上提供一个开放的版本什么的,你想开启云输入法,就得自己编译,太傻逼了这个……

所以各方面权衡之下,我还是建议所有的 Gnome 用户使用 fcitx5 输入法,因为它目前的确是输入的最优解。

安装也很简单:

sudo dnf install fcitx5-chinese-addons fcitx5-autostart

想要日文输入法的话就安装:

sudo dnf install fcitx5-mozc

安装完毕后默认注销登陆其实输入法应该就可以用了,但是输入窗口可能会比较丑陋,建议安装一个属于 Gnome 的扩展来进行美化:

https://extensions.gnome.org/extension/261/kimpanel/

注销登陆后就可以看到输入窗口已经符合 Gnome 的默认风格了,系统更融合。

Fcitx5 本身也有许多设置和玩法,具体可以网上搜索,包括输入 emoji,导入大词库之类的,不要忘记打开云输入,可以选择使用百度云。


安装一些基本软件:

是时候安装一些基本软件了,一些十分基础的我们用 RPM 安装,其他的使用 flatpak,尽可能使用 flatpak 可以让你在升级的时候遇到更少的问题。

安装罗技鼠标控制软件 solaar(仅仅支持罗技鼠标),非罗技标键鼠就不用装了

sudo dnf install solaar

安装 Typora 文本编辑器

flatpak install flathub io.typora.Typora

如果 Typora 收费你不喜欢,那可以选择 Ghostwriter

flatpak install flathub org.kde.ghostwriter

安装常用软件

sudo dnf install vlc filezilla remmina easytag file-roller showtime

VLC 播放器、filezilla FTP 工具,remmina 远程桌面, easytag 音乐 IDTag 编辑工具,file-roller 是解压缩工具,showtime 是新版的 GTK4 的视频播放器,都可自行选择安装。

至于常用的浏览器我建议用 Firefox,截图软件建议用 Gnome 自己的,已经足够强大了。

这里在推荐一些用得到的工具:

GPU Screen Recorder (一款直接读取 GPU 信息的推流/录屏工具,占用较低)

flatpak install flathub com.dec05eba.gpu_screen_recorder

Rustdesk (一款不错的远程工具,类似向日葵或 todesk,建议下载 flatpak 版本)

https://github.com/rustdesk/rustdesk/releases

微信 Flatpak 版本

flatpak install flathub com.tencent.WeChat

Steam(虽然RPMFusion 里也有,但是我个人觉得 flatpak 版本更好)

flatpak install flathub com.valvesoftware.Steam

LinuxQQ

flatpak install flathub com.qq.QQ

剪辑软件 KdenLive

flatpak install flathub org.kde.kdenlive

一个临时记事本 Buffer

flatpak install flathub org.gnome.gitlab.cheywood.Buffer

还有微软的两件套:Edge 与 Vscode

https://www.microsoft.com/en-us/edge/download
https://code.visualstudio.com/download

以及 Google 的 Chrome

https://www.google.com/chrome/

都可以直接下载 RPM 格式安装即可。

特殊需求可以安装一些设置相关的 APP:

sudo dnf install gnome-tweaks gnome-extensions-app dconf-editor

启用 VA-API 视频加速

老实讲如果你不是播放视频遇到问题,我不推荐你折腾这个。

由于版权原因,Fedora 移除了许多视频加速的支持,但是 RPMFusion 是可以加回来的:

sudo dnf install mesa-va-drivers-freeworld mesa-vdpau-drivers-freeworld
$ sudo dnf swap mesa-va-drivers mesa-va-drivers-freeworld
$ sudo dnf swap mesa-vdpau-drivers mesa-vdpau-drivers-freeworld

安装其他解码器

$ sudo dnf groupupdate multimedia --setop="install_weak_deps=False" --exclude=PackageKit-gstreamer-plugin
$ sudo dnf groupupdate sound-and-video
$ sudo dnf install @multimedia @sound-and-video ffmpeg-libs gstreamer1-plugins-{bad-\*,good-\*,base} gstreamer1-plugin-openh264 gstreamer1-libav lame\*

参考:
https://kcore.org/2022/12/01/fedora37-codecs/

值得一提的是每次 mesa 版本更新,因为 rpmfusion 对应的这个 freeworld 包更新滞后可能会出现更新依赖错误,只需要等几天再更新就行了。


安装 AV1 视频缩略图支持

sudo dnf install libheif-tools

详见:https://plumz.me/archives/13985/


安装 BTRFS 快照管理

首先安装工具:

sudo dnf install btrfs-assistant

之后就可以在 app 里看到这个程序了。

因为 btrfs 文件系统都是 COW 的(Copy on Write),所以进行快照和备份十分容易,用这个工具可以很方便的进行快照备份。

默认的 btrfs 安装是分两个卷挂载的,一个是根目录 root,一个是用户目录 home,两个卷都可以独立快照备份和恢复,用这个工具操作可谓是十分简单了。

该工具甚至支持自动备份和快照,不过我不建议,有时候快照会导致 flatpak 的程序运行缓慢,需要重启恢复。


虚拟机选择:Gnome Box

Linux 下的虚拟机选择有很多,包括知名的 virtualbox,还有 vmware,以及 Gnome 自带的 Gnome-box。

接下来说说为什么 Gnome-box 会成为我的选择,首先是如果你使用 virtualbox 或者 vmware 之类的话,你的电脑需要关闭 secure boot,不然内核编译模块就会失败,要么你每次更新内核都手动签名,要么你就别用。

而 Gnome-box 是基于 KVM 的,自然也就不受到这个限制。

如果系统没有的话记得安装:

sudo dnf install gnome-boxes

而且理论上 KVM 的性能是优于 Virtualbox 之类的,所以就更应该使用 KVM 了,不过目前 KVM 最大的问题是模拟 Windows 效果一般。倒不是不能模拟,依然是图形性能驱动无法满足,这里建议使用 QXL 之类的 2D 加速驱动来运行 Windows,如果真的需要高级 3D 性能,只能显卡直通了。

至于模拟 Linux,性能好的很。

如果对 Gnome-box 的界面过于简洁搞不清楚,可以安装另一个控制 GUI:

sudo dnf install virt-manager

这样就能看明白了。


安装剪切板管理 Gpaste

Linux 下的剪切板管理工具很多,有跨平台的 CopyQ,有许多拓展也支持,但我还是最推崇 Gpaste 这个工具。

原因也很简单,这个工具足够稳定,是使用后台服务的方式运行的,而不是单纯的使用插件来记录,同时这个插件和 Gnome 也属于深度整合,作为 Gnome 用户自然也是首选。

安装方式:

sudo dnf install gpaste
sudo dnf install gnome-shell-extension-gpaste

之后记得在扩展程序中启用 gpaste 的扩展。


Telegram 的三种安装方法

Telegram 作为一款跨平台聊天软件,在 Fedora 上的安装方法有三个:

1,通过 RPMFusion 安装:

sudo dnf install telegram-desktop

这种安装方法属于 Fedora 二次打包,似乎会丢失一些新功能,也不能开启 Beta。

2,通过 Flatpak 安装:

flatpak install flathub org.telegram.desktop

3,直接官网安装:

https://desktop.telegram.org/

下载 Linux 包,自己写快捷方式。我用的是这个方法,可以开启 Beta 频道自动更新。需要你自己把运行程序放到 opt 目录下,并且给写入权限。


安装 Oh-My-ZSH

sudo dnf install zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安装科学上网

sudo dnf copr enable spyophobia/shadowsocks-rust
sudo dnf install shadowsocks-rust

优化:启用基于 rust 的调度器

Linux 新内核支持了许多基于 Rust 语言的调度器,好处就是可以优化多任务环境,并一定程度上优化能耗比,所以有兴趣可以试试。

sudo dnf copr enable bieszczaders/kernel-cachyos-addons
sudo dnf install scx-scheds

然后修改默认调度器:

sudo vim /etc/default/scx 

推荐设定以下两项:

SCX_SCHEDULER=scx_lavd
SCX_FLAGS='--autopower'

这里的 autopower 就是根据插电不插电来自动匹配。

最后别忘了启用服务:

systemctl enable scx 

优化:使用 iwd 来作为 Wi-Fi 管理后端

iwd 是 Intel 官方的一个 Wi-Fi 管理模块,对于 Intel 无线网卡来说有着更好的性能和稳定性,仅推荐 Intel 无线网卡用户尝试,如果你不清楚你的网卡是不是 Intel,那就不要盲目修改了。

$ sudo dnf install iwd
$ echo -e "[device]\nwifi.backend=iwd" | sudo tee /etc/NetworkManager/conf.d/10-iwd.conf
$ sudo systemctl mask wpa_supplicant

修改后重启生效,你可能需要重新添加以下你曾经添加过的无线网络。老无线和新无线可能还会有名字上的冲突,建议删除老的添加新的。

如果重启后发现效果不尽如人意,你可以还原默认的后端:

$ sudo rm /etc/NetworkManager/conf.d/10-iwd.conf
$ sudo systemctl unmask wpa_supplicant

参考:
https://thedestitutedeveloper.blogspot.com/2021/01/enabling-iwd-on-fedora-33.html


优化:笔记本续航配置

目前 Linux 下笔记本续航优化的方法主要是 TLP 这一个方式,其他的大多数都和 TLP 没什么区别。

而在 Fedora 下,尤其是 Gnome 环境,我认为只需要启用自带的 Powertop 优化服务就足够了。

首先安装 Powertop

sudo dnf install powertop

然后启用服务

sudo systemctl enable powertop.service

可以自行查看目前的整机功耗

sudo powertop

而且 Fedora 42 中已经不再用 power-profiles-daemon 了,而是用了红帽系自己的 Tuned 作为后端,续航会比 power-profiles-daemon 好很多,你直接在配置里选择对应的能耗模式就可以了。


优化:字体渲染

Fedora 42 使用了新的 Adwaita Sans 和 Adwaita Mono 字体,其实是基于其他字体修改而来的,虽然还有一些小问题,但是已经解决了原来大部分在显示上的顽疾,所以我们优化起来也简单许多。

依然使用灰度而非 RGB,具体原因之前有说过,不再赘述。

我们直接创建配置文件:

mkdir ~/.config/fontconfig/
gnome-text-editor ~/.config/fontconfig/fonts.conf 

粘贴入下面的配置文件:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
    <!-- 设置字体渲染方式,使用灰度,不使用 rgb -->
  <match target="font">
    <edit mode="assign" name="rgba">
      <const>none</const>
    </edit>
  </match>
   <match target="font">
<edit name="autohint" mode="assign">
    <bool>false</bool>
    </edit>
 </match>
<match target="font">
<edit name="hinting" mode="assign">
    <bool>true</bool>
    </edit>
     </match>
         <!-- 设置字体渲染方式,可以使用 none,也可以使用 slight -->
  <match target="font">
    <edit mode="assign" name="hintstyle">
      <const>hintslight</const>
    </edit>
  </match>
  <match target="font">
    <edit mode="assign" name="antialias">
      <bool>true</bool>
    </edit>
  </match>
    <!-- 针对 Emoji 字体单独设置,防止无法显示的问题,emoji 字体不能使用 none 渲染 -->
  <match target="font">
    <test name="family" qual="any">
      <string>Noto Color Emoji</string>
    </test>
        <edit name="rgba" mode="assign">
      <const>none</const>
    </edit>
        <edit name="embolden" mode="assign">
      <bool>false</bool>
    </edit>
         <edit mode="assign" name="lcdfilter">
    <const>lcddefault</const>
  </edit>
    <edit name="scalable" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="embeddedbitmap" mode="assign">
      <bool>true</bool>
    </edit>
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>
        <edit name="autohint" mode="assign">
      <bool>false</bool>
    </edit>
  <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>
        <edit name="hintstyle" mode="assign">
      <const>hintslight</const>
    </edit>
  </match>
  <!-- Default system-ui fonts -->
   <match target="pattern">
    <test name="family">
      <string>system-ui</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>sans-serif</string>
    </edit>
  </match>
  <!-- 默认 emoji 字体。 -->
  <match target="pattern">
    <test name="family" qual="any">
      <string>emoji</string>
    </test>
    <edit name="family" mode="prepend" binding="same">
      <string>Noto Color Emoji</string>
    </edit>
  </match>
  <!-- 替换 Apple Color Emoji 字体。 -->
    <match target="pattern">
    <test name="family" qual="any">
      <string>Apple Color Emoji</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Noto Sans</string>
    </edit>
  </match>
  <!-- 替换 Apple Color Emoji 字体。  -->
    <match target="pattern">
    <test name="family" qual="any">
      <string>SF Pro Icons</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Noto Color Emoji</string>
    </edit>
  </match>
  <!-- 替换 Apple 字体。 -->
    <match target="pattern">
    <test name="family" qual="any">
      <string>PingFang SC</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- 替换 Windows 字体。 -->  
    <match target="pattern">
    <test name="family" qual="any">
      <string>Microsoft Yahei</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Noto Sans CJK SC</string>
    </edit>
  </match>
  <!-- 替换 MS 字体。 -->
    <match target="pattern">
    <test name="family" qual="any">
      <string>arial</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Noto Sans</string>
    </edit>
  </match>
  <!-- 替换 Apple字体。 -->
    <match target="pattern">
    <test name="family" qual="any">
      <string>SF Pro</string>
    </test>
    <edit name="family" mode="assign" binding="same">
      <string>Noto Sans</string>
    </edit>
  </match>
  <!-- Map fonts that are commonly used by web pages to our preferred fonts -->
  <match target="pattern">
    <test qual="any" name="family"><string>Liberation Sans</string></test>
    <edit name="family" mode="assign" binding="same"><string>sans-serif</string></edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family"><string>Tahoma</string></test>
    <edit name="family" mode="assign" binding="same"><string>sans-serif</string></edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family"><string>Arial</string></test>
    <edit name="family" mode="assign" binding="same"><string>sans-serif</string></edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family"><string>Liberation Mono</string></test>
    <edit name="family" mode="assign" binding="same"><string>monospace</string></edit>
  </match>
  <match target="pattern">
    <test qual="any" name="family"><string>Droid Sans Mono</string></test>
    <edit name="family" mode="assign" binding="same"><string>sans-serif</string></edit>
  </match>
  <!-- Default sans-serif fonts-->
  <match target="pattern">
    <test name="family">
      <string>sans-serif</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Sans CJK SC</string>
      <string>Noto Sans</string>
      <string>Noto Color Emoji</string>
    </edit>
  </match>
  <!-- Default serif fonts-->
  <match target="pattern">
  <test name="family">
    <string>serif</string>
  </test>
  <edit name="family" mode="prepend" binding="strong">
      <string>Noto Serif CJK SC</string>
      <string>Noto Serif</string>
      <string>Noto Color Emoji</string>
    </edit>
  </match>
  <!-- Default monospace fonts-->
  <match target="pattern">
    <test name="family">
      <string>monospace</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Sans Mono</string>
      <string>Noto Sans Mono CJK SC</string>
      <string>Noto Color Emoji</string>
    </edit>
  </match>
    <!-- Default font for the zh_CN locale (no fc-match pattern) -->
    <match target="pattern">
    <test name="lang" compare="contains">
      <string>en</string>
    </test>
    <test name="family" compare="contains">
      <string>Noto Sans CJK SC</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
    <!--      <string>HarmonyOS Sans SC</string>-->
      <string>Noto Sans CJK SC</string>
      <string>Noto Sans</string>
      <string>Noto Color Emoji</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang" compare="contains">
      <string>en</string>
    </test>
    <test name="family" compare="contains">
      <string>Noto Serif CJK SC</string>
    </test>
    <edit name="family" mode="prepend" binding="strong">
      <string>Noto Serif CJK SC</string>
      <string>Noto Serif</string>
      <string>Noto Color Emoji</string>
    </edit>
  </match>  
  <match target="pattern">
    <test name="lang">
      <string>zh-CN</string>
    </test>
    <test name="family">
      <string>Noto Sans CJK SC</string>
    </test>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-CN</string>
    </test>
    <test name="family">
      <string>Noto Serif CJK SC</string>
    </test>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-CN</string>
    </test>
    <test name="family">
      <string>Noto Sans Mono CJK SC</string>
    </test>
  </match>  
  <match target="pattern">
    <test name="lang">
      <string>zh-HK</string>
    </test>
    <test name="family">
      <string>Noto Sans CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans CJK HK</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-HK</string>
    </test>
    <test name="family">
      <string>Noto Serif CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <!-- not have HK -->
      <string>Noto Serif CJK TC</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-HK</string>
    </test>
    <test name="family">
      <string>Noto Sans Mono CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans Mono CJK HK</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-TW</string>
    </test>
    <test name="family">
      <string>Noto Sans CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans CJK TC</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-TW</string>
    </test>
    <test name="family">
      <string>Noto Serif CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Serif CJK TC</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>zh-TW</string>
    </test>
    <test name="family">
      <string>Noto Sans Mono CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans Mono CJK TC</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>ja</string>
    </test>
    <test name="family">
      <string>Noto Sans CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans CJK JP</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>ja</string>
    </test>
    <test name="family">
      <string>Noto Serif CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Serif CJK JP</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>ja</string>
    </test>
    <test name="family">
      <string>Noto Sans Mono CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans Mono CJK JP</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>ko</string>
    </test>
    <test name="family">
      <string>Noto Sans CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans CJK KR</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>ko</string>
    </test>
    <test name="family">
      <string>Noto Serif CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Serif CJK KR</string>
    </edit>
  </match>
  <match target="pattern">
    <test name="lang">
      <string>ko</string>
    </test>
    <test name="family">
      <string>Noto Sans Mono CJK SC</string>
    </test>
    <edit name="family" binding="strong">
      <string>Noto Sans Mono CJK KR</string>
    </edit>
      </match>
  <!-- Fallback fonts preference order -->
  <alias>
    <family>sans-serif</family>
    <prefer>
      <family>Noto Sans</family>
      <family>Noto Sans CJK SC</family>
      <family>Noto Sans CJK TC</family>
      <family>Noto Sans CJK JP</family>
      <family>Noto Sans CJK KR</family>
      <family>Noto Color Emoji</family>
      <family>Noto Emoji</family>
    </prefer>
  </alias>
  <alias>
    <family>serif</family>
    <prefer>
      <family>Noto Serif</family>
      <family>Noto Serif CJK SC</family>
      <family>Noto Serif CJK TC</family>
      <family>Noto Serif CJK JP</family>
      <family>Noto Serif CJK KR</family>
      <family>Noto Color Emoji</family>
      <family>Noto Emoji</family>
    </prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer>
      <family>Noto Sans Mono CJK SC</family>
      <family>Noto Sans Mono CJK HK</family>
      <family>Noto Sans Mono CJK JP</family>
      <family>Noto Sans Mono CJK KR</family>
      <family>Noto Color Emoji</family>
      <family>Noto Emoji</family>
    </prefer>
  </alias>
     <selectfont>
    <rejectfont>
      <pattern>
        <patelt name="family" >
          <!-- This font is causing problem with GitHub -->
          <string>Nimbus Sans</string>
        </patelt>
      </pattern>
    </rejectfont>
  </selectfont>
</fontconfig>

你也可以安装微软系的那些常见字体,因为有些网站写的 css 还是按照这一套来的:

sudo dnf install curl cabextract xorg-x11-font-utils fontconfig -y
sudo rpm -i https://downloads.sourceforge.net/project/mscorefonts2/rpms/msttcore-fonts-installer-2.6-1.noarch.rpm

当然包括 Linux 系常见的“文泉驿”系列字体,一些网站有针对文泉驿系列字体的设定:

sudo dnf install "wqy-*"

另外就是我很建议你拷贝一份“微软雅黑”字体并安装到系统里,就是打开 ttf 直接选择安装就行,虽然我提供的 fontconfig 里写了针对的替换方案,但很多网页会写死这个字体,甚至某些 APP 会强制选择(没错说的就是你 WPS),不安装的话会因为找不到这个字体而出现方块和乱码。


优化:Flatpak 软件的字体渲染

当你正确配置字体渲染之后,你还会发现你通过 Flatpak 安装的软件的字体依然丑陋,似乎并没有正确应用你的字体渲染。

你可以尝试运行

flatpak --user override --filesystem=~/.config/fontconfig:ro

让 flatpak 程序读取你的 fontconfig 配置。

当然如果这一招无效的话,你就只能打开对应的 flatpak 程序的配置路径:

~/.var/app/[程序名字]/config

在里面创建一个 fontconfig 目录,把你前面的那个 ~/.config/fontconfig/fonts.conf 文件拷贝进去,然后重新启动 flatpak app 了。


优化:禁用非整数缩放提升性能

从 Fedora 42 这个版本开始,系统默认启用了“非整数缩放”特性,并且开启了对 Xwayland 的缩放独立控制。不但解决了 Gnome 不能进行 125% 150% 之类缩放的老问题,并且在开启缩放后一些传统的 Xwayland 程序也不会出现模糊的情况。

看起来的确挺好,但是这带来了新的问题,Gnome 的非整数缩放是通过“先进行超分辨率放大再缩小”来实现的,比如缩放 150%,是会将 UI 先放大到 300%,然后再缩小一倍,就变成了 150%,这就会对性能有更高的要求。如果你电脑配置一般,尤其是 GPU 很烂,搭配一些抽象的闭源和独显驱动,会让你控制系统的时候有种“卡卡”的感觉。

所以如果你的屏幕分辨率是标准的(比如 14 寸 1080p,或者可以 200% 完美缩放),系统 UI 也是可以“不用缩放”正常使用的,那么我推荐你禁用这个功能,换取更高的性能和更流畅的 UI 响应速度。

如果你屏幕必须要缩放,那我也更建议使用字体缩放,而并非这样的缩放,毕竟影响的性能是实打实的。

禁用的方法很简单:

gsettings set org.gnome.mutter experimental-features "[]"

同时也可以禁用掉 gdm 界面的缩放,避免登陆后反复黑屏

sudo -u gdm dbus-launch gsettings set org.gnome.mutter experimental-features "[]"  

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »