Fedora 折腾记

Fedora + Gnome 坑很多,这里是我在使用 Fedora 中遇到的一些坑和解决的方案

这其中的很多 bug 都具有一定的随机性(很多是我在 Google 上使用英文寻找了半天才找到同样的问题,有的甚至需要亲自向开发者反映)。
所以这仍然仅仅是个人记录,其中的解决方案仅供日后备查,不保证可用,请读者(如果有的话)谨慎辨析

分数缩放 (fractional scaling)

Gnome 至今仍不正式支持分数缩放,仅有一个实验性功能提供了Wayland 应用程序的分数缩放(开启方法:gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"

但是在这种情况下 Xwayland app 会变得非常模糊(包括著名的 vlc),这显然不是我们需要的

于是我们就需要安装 taaem/mutter-xwayland-fractional-scaling COPR 中 Patch 过的 mutter(Patch 来源于 mutter 的一个尚未 merge 的 PR),根据COPR的描述就可以了

2024/11/3 Updated: 该 MR 已经正式合并进 mutter 47,包含于最近发布的 Fedora 41,不再需要该 COPR,直接 gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer', 'xwayland-native-scaling']" 启用该功能即可

仍然存在的问题

实际上,Gnome 至今都不支持真正的分数缩放,目前的分数缩放其实是先将显示器分辨率拉伸,以200%渲染后再缩小(P.S. GTK4 似乎正在支持真·分数缩放),这不仅会导致 GPU 资源的浪费,还会使virt-manager gnome-box 等需要像素对齐的应用程序出现问题(如 virt-manager 中的虚拟机分辨率过高等)

xwayland-native-scaling feature 也存在同样的问题(这似乎与 KDE 上同样功能的行为不同),这导致我在 wine 上运行的游戏以3072×1728的分辨率渲染(1920×1080,125%缩放),而且导致某些比较老旧游戏由于窗口过小而完全不能玩(例如东方几乎全系列)

th08

Upd: 找到了一种解决方法:

安装 gamescope ,使用 gamescope -W 800 -H 600 -F fsr wine [东方游戏文件名] 运行游戏即可

上述方案会使用 AMD 的 FSR 拉伸游戏分辨率,如果想要保持原有的像素风格,可以使用 -F nearest 选项(话说东方是像素风游戏吗?)

th08-with-gamescope

2024/11/3 Upd: 以上解决方案失效

gamescope 3.14.2 以上版本添加了 Wayland 支持,但是存在问题,直接导致游戏崩溃。对于 Fedora 40 可以使用 dnf downgrade gamescope 来降级至 3.14.2 版本,但是在 Fedora 41 上不可用。可以尝试自行编译安装旧版本(反正我这由于依赖问题编译失败了)

2025/7 Upd: 解决方案:wine 10.x 原生支持 Wayland,可让 wine 直接运行在 Wayland 下,参见下文

美化

确切的说其实不是美化,只是让系统的 UI 更加统一

Gtk3 主题

adw-gtk3-theme

图标主题

papirus-icon-theme, papirus-icon-theme-dark

Qt 应用程序

使用 qt5ct qt6ct 加上 kvantum 配合 Colloid-kde 主题(一个很像 Libadwaita 的 Kvantum Qt 主题,虽然很多 UI 元素的样式不同,但是整体风格很搭)(2025/9 Upd: 用 KvLibdwaita 更好)

  • 为什么不用 KvLibdwaita:这个主题目前的版本存在很大的问题,行编辑器和下拉框的颜色和窗口背景颜色完全相同,导致了很多应用程序不可用
    • 2025/9 Upd: 问题已经修复
  • 为什么不用 QGnomePlatform:首先这个项目已经不再开发也没有适配 Libadwaita 主题,仍然需要自己搞主题;而且会导致其他问题

字体问题

所有 Qt 应用程序中应该上粗体字的地方字体字重都过大,导致文本(尤其是中文文本)几乎不可读

bold-text

经调查,发现这似乎是 Cantarell 字体(Gnome的默认字体)的问题,与可变字重(VF)有关,而且是2020年就出现的老bug(似乎是由于不能在所有情况下都能复现而没有修复,不知道为什么我碰上了),当时的解决方案是更换系统字体。然而我经过测试,Noto CJK 似乎也存在同样问题,无奈之下只能使用上古字体文泉驿微米黑(正黑也行,但是太丑)

这时就需要祭出 qt5ctqt6ct 了,如果使用默认的 qgnomeplatform 则不能单独更改 Qt 应用程序的字体(将文泉驿应用为系统默认字体也不是不行,但是我觉得很丑)

编辑 ~\.config\environment.d\qt.conf 并修改 qt5ctqt6ct 中的字体设置后,重启就可以了

1
2
3
4
5
# QT_QPA_PLATFORMTHEME='gnome' # 需要更改全局字体
# QT_STYLE_OVERRIDE=kvantum
QT_QPA_PLATFORMTHEME=qt5ct
XCURSOR_THEME=YOUR_CURSOR_THEME_NAME
# 更改 Qt6 应用程序的光标主题(如果有),默认情况下 Qt6 应用程序的光标是极丑的系统默认光标

窗口圆角

可以使用这个扩展

但是似乎有不少bug

Wine

字体设置

默认的字体有概率出现问题,可以使用文泉驿字体(安装 wqy-microhei.ttc,然后导入以下注册表)

1
2
3
4
5
6
7
8
9
10
11
REGEDIT4

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink]
"Lucida Sans Unicode"="wqy-microhei.ttc"
"Microsoft Sans Serif"="wqy-microhei.ttc"
"MS Sans Serif"="wqy-microhei.ttc"
"Tahoma"="wqy-microhei.ttc"
"Tahoma Bold"="wqy-microhei.ttc"
"SimSun"="wqy-microhei.ttc"
"Arial"="wqy-microhei.ttc"
"Arial Black"="wqy-microhei.ttc"

字体平滑(执行以下脚本并按照提示选择)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#!/bin/sh
# Quick and dirty script for configuring wine font smoothing
#
# Author: Igor Tarasov <tarasov.igor@gmail.com>

WINE=${WINE:-wine}
WINEPREFIX=${WINEPREFIX:-$HOME/.wine}
DIALOG=whiptail

if [ ! -x "`which "$WINE"`" ]
then
echo "Wine was not found. Is it really installed? ($WINE)"
exit 1
fi

if [ ! -x "`which "$DIALOG"`" ]
then
DIALOG=dialog
fi

TMPFILE=`mktemp` || exit 1

$DIALOG --menu \
"Please select font smoothing mode for wine programs:" 13 51\
4\
1 "Smoothing disabled"\
2 "Grayscale smoothing"\
3 "Subpixel smoothing (ClearType) RGB"\
4 "Subpixel smoothing (ClearType) BGR" 2> $TMPFILE

STATUS=$?
ANSWER=`cat $TMPFILE`

if [ $STATUS != 0 ]
then
rm -f $TMPFILE
exit 1
fi

MODE=0 # 0 = disabled; 2 = enabled
TYPE=0 # 1 = regular; 2 = subpixel
ORIENTATION=1 # 0 = BGR; 1 = RGB

case $ANSWER in
1) # disable
;;
2) # enable
MODE=2
TYPE=1
;;
3) # enable cleartype rgb
MODE=2
TYPE=2
;;
4) # enable cleartype bgr
MODE=2
TYPE=2
ORIENTATION=0
;;
*)
rm -f $TMPFILE
echo Unexpected option: $ANSWER
exit 1
;;
esac

echo "REGEDIT4

[HKEY_CURRENT_USER\Control Panel\Desktop]
\"FontSmoothing\"=\"$MODE\"
\"FontSmoothingOrientation\"=dword:0000000$ORIENTATION
\"FontSmoothingType\"=dword:0000000$TYPE
\"FontSmoothingGamma\"=dword:00000578" > $TMPFILE

echo -n "Updating configuration... "

$WINE regedit $TMPFILE 2> /dev/null

rm -f $TMPFILE

echo ok

Wayland HiDPI

要启用 Wayland 支持,需要 DISPLAY 环境变量为空(不建议设置系统环境变量,会出现问题)

e.g.

1
env -u DISPLAY wine your_program.exe

wine 10.x 原生支持 HiDPI,只需要在设置中将 DPI 更改为符合系统的值即可

默认会拉伸不支持 HiDPI 的应用(包括大部分游戏),关闭需导入以下注册表

1
2
3
4
REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
@="~ HIGHDPIAWARE"

杂项

VScode 貌似默认使用 XWayland,可以启用实验性功能来支持 Wayland,但是在我这输入法没法用(XWayland 下候选框会到处乱飘,但是能用)

似乎有人已经解决了这个问题,但是在我这里没有成功

2024/11/3 Upd: 上文提到的 MR(已合并)已经解决这一问题