跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

Fedora 38: Wayland/KDE 系统设定与 fcitx5/rime 输入法

新的硬件,新的 Linux。在 Fedora → Ubuntu → Arch Linux 来回横跳的我,决定再次回到 Fedora 的拥抱。不为别的,就为了一个良好的开箱体验。

Fedora Workstation 主推的 GNOME 桌面版在处理多 DPI 的情况依然需要更多优化,如窗口一半在 200% 一半在 100% DPI 的屏幕时的处理;但 KDE 这方面的处理看起来则是进行了动态缩放。最终体验一番,选用的 KDE。

如果你使用的还是 X(别名 X11、XOrg 等),可以参考 Fedora 34 系统下对应的指南

安装输入法

下述指令可以安装 fcitx5 输入法框架 + Rime 输入法

sudo dnf install \
  fcitx5 \
  fcitx5-{autostart,configtool} \
  fcitx5-{gtk,qt} \
  fcitx5-{rime,chinese-addons} \
  fcitx5-table-{extra,other}

如果也需要日语输入法,可以考虑安装 fcitx5-mozc 这个包。

启用输入法

因为换到了 Wayland,因此将 fcitx5 注册到系统的方案也比以前有所不同。

首先在 KDE 的开始菜单搜寻「Virtual Keyboard / 虚拟键盘」,选择「Fcitx 5」后点击「应用」。

KDE 的 Virtual Keyboard 设定截图

然后添加 KDE 环境下需要添加的环境变量:

cat > ~/.config/plasma-workspace/env/im.sh <<'EOF'
export INPUT_METHOD=fcitx5
export XMODIFIERS=@im=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
EOF

最后,重启生效。

Telegram 输入法提示框错位

图方便启用了 Fluthub 源来安装 Flatpak 格式的 Telegram 应用,进入后发现输入法提示框一直显示在固定的地点。

@AsamiSaori 的帮助下发现是因为 Flatpak 版打包了 fcitx4 + fcitx5 的模块,但是默认激活的是与 Wayland 兼容有一定问题的 fcitx4 模块。因此强制指定即可。

# 对当前用户生效
flatpak override --user --env=QT_IM_MODULE=fcitx5 org.telegram.desktop

# 对所有用户生效
sudo flatpak override --system --env=QT_IM_MODULE=fcitx5 org.telegram.desktop

覆盖该变量后重新启动应用即可。

不过输入法的样式并没有同步过去,这个就不折腾了…

换个颜色主题

默认的黑白有点单调,因此找到 Fcitx5-Material-Color 这个项目来改一改样式。

首先是克隆仓库:

mkdir -p "$HOME/.local/share/fcitx5/themes/Material-Color"
git clone https://github.com/hosxy/Fcitx5-Material-Color.git \
  "$HOME/.local/share/fcitx5/themes/Material-Color"

# 进入该目录,一会继续
cd "$HOME/.local/share/fcitx5/themes/Material-Color"

然后就是选择一个主题,例如蓝绿色的 teal

ln -sf theme-teal.conf theme.conf

然后右键 Fcitx5 托盘图标选择「重启」,随后进入配置界面,「附加组件/Addon」,找到「经典用户界面/Classic User Interface」并点击配置,找到「主题/Theme」下拉列表,选择「Material-Color」后点击「确定」应用。

fcitx5 配置面板下应用主题

疑难解答

浏览器闪屏问题

今日升级系统后发现基于 Chromium 的应用程序都出毛病了,上网一看发现是与 mesa 包的更新有关。

影响 Chrome 以及基于 Chromium 的浏览器/应用,因此解决方案就是查找所有的 GPU 缓存,然后清理掉:

find "$HOME/.config/" -name 'GPUCache' -type d -exec rm -rf {} \+

Arch Linux 讨论串Red Hat 错误报告的信息来看,至少影响 AMD Radeon 以及 Intel Arc 系列 GPU。

奇怪的是,虽然这个问题是系统升级后才产生的,但我使用 dnf history info 序号 查看升级的包并没有看到 mesa 字样,很奇怪。

升级的包列表
Packages Altered:
    Upgrade  clang-16.0.4-1.fc38.x86_64                     @updates
    Upgrade  clang-libs-16.0.4-1.fc38.x86_64                @updates
    Upgrade  clang-resource-filesystem-16.0.4-1.fc38.x86_64 @updates
    Upgrade  clang-tools-extra-16.0.4-1.fc38.x86_64         @updates
    Upgrade  cmake-3.26.4-2.fc38.x86_64                     @updates
    Upgrade  cmake-data-3.26.4-2.fc38.noarch                @updates
    Upgrade  cmake-filesystem-3.26.4-2.fc38.x86_64          @updates
    Upgrade  cmake-rpm-macros-3.26.4-2.fc38.noarch          @updates
    Upgrade  flexiblas-3.3.1-3.fc38.x86_64                  @updates
    Upgrade  flexiblas-netlib-3.3.1-3.fc38.x86_64           @updates
    Upgrade  flexiblas-openblas-openmp-3.3.1-3.fc38.x86_64  @updates
    Upgrade  gtk-update-icon-cache-3.24.38-1.fc38.x86_64    @updates
    Upgrade  gtk3-3.24.38-1.fc38.x86_64                     @updates
    Upgrade  gtk3-immodule-xim-3.24.38-1.fc38.x86_64        @updates
    Upgrade  llvm-16.0.4-1.fc38.x86_64                      @updates
    Upgrade  llvm-libs-16.0.4-1.fc38.x86_64                 @updates
    Upgrade  package-notes-srpm-macros-0.5-8.fc38.noarch    @updates
    Upgrade  python3-requests-2.28.2-2.fc38.noarch          @updates
    Upgrade  python3-soupsieve-2.4.1-1.fc38.noarch          @updates
    Upgrade  rust-srpm-macros-24-2.fc38.noarch              @updates
    Upgraded clang-16.0.3-1.fc38.x86_64                     @@System
    Upgraded clang-libs-16.0.3-1.fc38.x86_64                @@System
    Upgraded clang-resource-filesystem-16.0.3-1.fc38.x86_64 @@System
    Upgraded clang-tools-extra-16.0.3-1.fc38.x86_64         @@System
    Upgraded cmake-3.26.3-3.fc38.x86_64                     @@System
    Upgraded cmake-data-3.26.3-3.fc38.noarch                @@System
    Upgraded cmake-filesystem-3.26.3-3.fc38.x86_64          @@System
    Upgraded cmake-rpm-macros-3.26.3-3.fc38.noarch          @@System
    Upgraded flexiblas-3.3.1-1.fc38.x86_64                  @@System
    Upgraded flexiblas-netlib-3.3.1-1.fc38.x86_64           @@System
    Upgraded flexiblas-openblas-openmp-3.3.1-1.fc38.x86_64  @@System
    Upgraded gtk-update-icon-cache-3.24.37-1.fc38.x86_64    @@System
    Upgraded gtk3-3.24.37-1.fc38.x86_64                     @@System
    Upgraded gtk3-immodule-xim-3.24.37-1.fc38.x86_64        @@System
    Upgraded llvm-16.0.3-1.fc38.x86_64                      @@System
    Upgraded llvm-libs-16.0.3-1.fc38.x86_64                 @@System
    Upgraded package-notes-srpm-macros-0.5-7.fc38.noarch    @@System
    Upgraded python3-requests-2.28.2-1.fc38.noarch          @@System
    Upgraded python3-soupsieve-2.3.2.post1-8.fc38.noarch    @@System
    Upgraded rust-srpm-macros-24-1.fc38.noarch              @@System

不过倒是在 20 日的系统升级记录(系统安装完成后执行的 dnf update -y)里发现了 mesa 相关包的升级记录。可能之前就有问题但是现在变得更明显了?

Telegram 粗体难以识别

Telegram 在渲染标题的粗体会过粗,感觉头大。怀疑是 FontConfig 回退的默认字体出了问题。

下面不一定是最佳的解决方案,但这刚好解决了我的问题,所以就没有继续折腾了。

FontConfig 文件可以放入到 $HOME/.config/fontconfig/conf.d/ 目录下,文件名为 XX-name.conf,如 50-cjk-fonts.conf

配置默认回退字体

首先,将默认回退字体修改为「思源简体/Source Han Sans CN」系列的字体。

因为 fontconfig 不支持多项匹配,因此写了个脚本来生成那一串重复内容:sans-fontconfig.js

※ 如果需要替换默认字体,可以直接替换文件顶部预设的那些字体,或做一些自定义然后生成。

应用后执行 fc-cache -f 清空字体缓存并重新启动 Telegram,发现字体变得特别的细。

配置字体最低粗细程度

然后第二个规则就是「如果字体过细,修改为『普通』粗细程度」:

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE fontconfig SYSTEM 'file:///usr/share/xml/fontconfig/fonts.dtd'>
<fontconfig>
  <match target="pattern">
    <!-- 字体粗细低于 medium 的修改为 medium -->
    <test name="weight" compare="less">
      <const>medium</const>
    </test>

    <edit name="weight" mode="assign_replace">
      <const>medium</const>
    </edit>
  </match>
</fontconfig>

字体配置效果

最终的效果如下(左原生、右 Flatpak):

应用自定义 fontconfig 规则后的 Telegram 效果

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区