距离上次omarchy的文章已经快一年多了,新版的omarchy 4 出来了,很多地方有些不一样了,记录下。 官方有了专门的网站来做插件和主题的管理

插件

新版的omarchy基于quick shell做了很多插件,下面是我推荐的几个

dock

omarchy plugin add https://github.com/Davedes83/animated-dock.git --enable

Tray Panel

omarchy plugin add https://github.com/omakits-x/omarchy-tray-panel.git --enable --yes
omarchy plugin add https://github.com/manateelazycat/omarchy-workspace-gallery.git --enable --yes
~/.config/omarchy/plugins/io.github.manateelazycat.workspace-gallery/scripts/gestures install

设置

默认浏览器

vivaldi不支持默认的omarchy-defaultbrowser报错

omarchy-default-browser vivaldi
Usage: omarchy-default-browser <chromium|chrome|brave|brave-origin|edge|firefox|zen>

实际可以用

env -u BROWSER xdg-settings get default-web-browser vivaldi-stable.desktop

中文输入法

安装相关的包

paru -S fcitx5 fcitx5-configtool  fcitx5-qt fcitx5-gtk  fcitx5-rime

推荐使用我的aur包 snout-bin,然后一键安装(万象输入法,国内用户记得开启镜像模式),这样会自动使用cnb的镜像进行下载。如果rime没自动加入到输入引擎,程序会提示并自动加入,可能需要重启才能生效。

语音输入法

omarchy对于语音输入法的支持也不错,安装 voxtype-bin 后,先通过程序里面的配置设置好模型,然后 voxtype setup model 下载相应的模型,再到配置程序启动daemon程序。参考 https://omarchy.iamcheyan.com/zh/11-text-extraction-dictation/

遇到的一些坑

Vivaldi 在 Omarchy + NVIDIA + Wayland 下页面闪烁的排查与修复

现象

在 Omarchy 的 Hyprland 桌面中使用 Vivaldi 浏览网页时,整个浏览器窗口可能频繁闪烁。调整显卡环境变量后,现象会发生变化:原来整个窗口闪烁,设置 LIBVA_DRIVER_NAME=iHD 后,主要剩下网页内容闪烁,而且图片较多的页面更容易触发。改回 LIBVA_DRIVER_NAME=nvidia 后,问题仍然存在。

原因

这台电脑使用 Intel Iris Xe 和 NVIDIA RTX 3050 双显卡,桌面会话运行在 Wayland 上。Omarchy 会根据硬件自动设置以下变量:

  LIBVA_DRIVER_NAME=nvidia
  NVD_BACKEND=direct
  __GLX_VENDOR_LIBRARY_NAME=nvidia

LIBVA_DRIVER_NAME 只决定 VA-API 的视频解码驱动,并不能修复所有窗口闪烁问题。图片较多的网页会频繁触发 Chromium 内核的 GPU 合成、纹理上传和缓冲区交换,因此即使没有播放视频,也可能受到显卡后端的影响。

本次问题的关键组合是:Vivaldi 的 Chromium 内核、NVIDIA 驱动、原生 Wayland 窗口后端,以及网页内容的 GPU 合成。把驱动名称在 iHD 和 nvidia 之间切换,只是在改变解码路径,无法解决 Wayland 合成路径本身的兼容性问题。

修复方案

Vivaldi 支持通过用户级配置文件追加启动参数。文件路径是:

  ~/.config/vivaldi-stable.conf

先完全退出 Vivaldi,然后创建或编辑这个文件,加入:

  --ozone-platform=x11

重新启动 Vivaldi。这个参数让 Vivaldi 使用 XWayland,而不是原生 Wayland 窗口后端。桌面仍然是 Wayland,只有 Vivaldi 的窗口通过 XWayland 接入 Hyprland。这样可以绕开当前 NVIDIA 与 Vivaldi Wayland 合成路径之间的兼容性问题,同时保留 GPU 加速。

可以用下面的命令备份配置:

  cp ~/.config/vivaldi-stable.conf ~/.config/vivaldi-stable.conf.bak.$(date +%s) 2>/dev/null || true

如何确认确实是这个问题

可以先使用临时配置启动 Vivaldi,不影响正式配置:

  vivaldi-stable \
    --ozone-platform=x11 \
    --user-data-dir=/tmp/vivaldi-x11-test

如果图片较多的页面在这个测试实例中不再闪烁,就可以把参数写入 ~/.config/vivaldi-stable.conf 长期使用。

如果仍然闪烁,可以进一步测试关闭 GPU 合成:

  vivaldi-stable \
    --disable-gpu \
    --disable-gpu-compositing \
    --user-data-dir=/tmp/vivaldi-software-test

这个方案兼容性更强,但会增加 CPU 占用,应该作为后备方案,而不是第一选择。

注意事项

不要直接修改 ~/.local/share/omarchy/default/ 或 /usr/share/omarchy/ 下的默认文件。Omarchy 更新后这些文件可能被覆盖,而且默认配置会自动根据显卡硬件重新生成。Vivaldi 的修复参数放在 ~/.config/vivaldi-stable.conf,只影响当前用户的 Vivaldi,容易备份和回滚。

这次修复并不是证明 NVIDIA 或 Intel 驱动损坏,而是避开了一条特定的 Wayland GPU 合成路径。以后升级 Vivaldi、NVIDIA 驱动或 Hyprland 后,可以重新测试原生 Wayland;如果问题已经消失,再删除该参数即可。

微信能输入中文,但不显示候选框

微信里可以输入中文,但看不到输入法候选框,其他应用都正常。排查时,Fcitx 5 正在运行,微信的启动器也已经设置了 QT_IM_MODULE=fcitx 等输入法变量,微信窗口使用的是原生 Wayland。

这次通过让微信单独使用 XWayland,恢复了候选框显示。问题与当前微信在 Wayland 下的候选框显示兼容性有关,具体是定位还是绘制环节出错,没有继续追查。

我这里安装的是 wechat 和 wechat-bin,桌面快捷方式通过 Portable 启动微信。这个启动器会读取下面的用户环境配置文件:

~/.local/share/WeChat_Data/portable.env

先备份已有文件:

cp -p ~/.local/share/WeChat_Data/portable.env \
  ~/.local/share/WeChat_Data/portable.env.bak.$(date +%s)

编辑文件,保留其他配置,加入下面这一行;如果已经设置过同名变量,就修改原来的值:

QT_QPA_PLATFORM=xcb

从微信菜单选择退出,再重新打开。只关闭窗口可能仍然留有后台进程,设置不会生效。重新输入中文后,我这里的候选框恢复了。

可以在 Hyprland 中检查微信是否已经使用 XWayland,下面的命令需要 jq:

hyprctl clients -j | jq '.[] | select(.class == "wechat") | {class, xwayland}'

微信窗口对应的 xwayland 应为 true。这只能确认窗口后端,候选框是否正常还需要实际输入验证。

这个设置只影响微信,不用修改 /etc/environment,也不用重启电脑。上述路径适用于这里使用的 Portable 启动器,其他安装方式需要确认各自的启动配置。以后升级微信或 Hyprland 后,可以删除这一行并重启微信,重新测试原生 Wayland。

启动背景:Evangelion 壁纸(Limine 方案)

想把启动界面换成 EVA 风格,看中了 Evangelion 这套主题。它是给 GRUB 用的,没法直接套到 Omarchy 4 使用的 Limine 上,不过项目自带的 8 张 3840×2160 壁纸可以单独拿来用,选一张做启动背景,也可以用作桌面壁纸。

下载壁纸

mkdir -p ~/Pictures/Evangelion
cd /tmp
for f in Ayanami-wall Soryu-wall Pen-Pen-wall SEELE-wall EVA01-wall Wunder-wall EVA-02-wall Ramiel-wall; do
  curl -sL -o "$f.png" "https://raw.githubusercontent.com/Aleph1-9012/Evangelion/main/wallpapers/$f.png"
done
cp /tmp/*-wall.png ~/Pictures/Evangelion/

下载后,桌面壁纸可以直接从 ~/Pictures/Evangelion/ 选用。下面以 EVA-01 为例设置启动背景。

部署到 ESP 作为 Limine 启动背景

这台机器的 ESP 挂载在 /boot,先把壁纸复制过去:

sudo mkdir -p /boot/wallpapers
sudo cp ~/Pictures/Evangelion/*.png /boot/wallpapers/

备份并编辑配置:

sudo cp /boot/limine.conf /boot/limine.conf.bak.$(date +%s)
sudoedit /boot/limine.conf

在启动条目之前的全局配置区域设置下面几行,已有同名项就修改原值,保留其他配置和内核条目:

timeout: 5
wallpaper: boot():/wallpapers/EVA01-wall.png
wallpaper_style: stretched
backdrop: 1a1b26
term_background: 801a1b26

wallpaper 指定背景图片,boot(): 指向 Limine 所在的启动分区,这里对应 /boot,所以示例读取的是 /boot/wallpapers/EVA01-wall.png。backdrop 设置六位十六进制底色,用于壁纸居中时未覆盖的区域。

wallpaper_style: stretched 让图片铺满屏幕,宽高比不同时会拉伸变形。term_background 使用 TTRRGGBB 格式,前两位表示透明度,这里的 80 让菜单背景半透明,透出后面的壁纸。timeout: 5 则让启动菜单停留 5 秒。

确认实际通过 Limine 启动

背景能否显示,还取决于机器实际从哪个引导器启动。我这台机器的启动项虽然叫 Omarchy,却直接加载 \EFI\Linux\omarchy_linux.efi,绕过了 Limine,自然也不会读取上面的配置。用下面的命令可以查看当前启动项:

efibootmgr -v

找到 BootCurrent 对应的条目,检查它加载的路径。这台机器的 Limine 条目指向 \EFI\Limine\limine_x64.efi,可以先在固件启动菜单中选它启动一次,也可以用下面的命令指定下一次启动项:

# 0007 是这台机器的 Limine 编号,其他机器要按实际输出替换
sudo efibootmgr --bootnext 0007

这只影响下一次启动。确认能进入系统并看到背景后,再在固件设置中把 Limine 调到启动顺序第一位,保留原有条目以便切回。编号和完整启动顺序因机器而异,不要照抄别人的 --bootorder 列表。

切换壁纸

改 /boot/limine.conf 里的 wallpaper 一行,把路径换成 /boot/wallpapers/ 下的其他文件即可,下次通过 Limine 启动时生效:

sudo sed -i 's|^wallpaper:.*|wallpaper: boot():/wallpapers/SEELE-wall.png|' /boot/limine.conf

这个命令只替换已有的 wallpaper 行,没有该行时需要先手动添加。

限制与注意事项

  • 壁纸只显示在 Limine 启动菜单,不会替换后续的磁盘解密、Plymouth 系统加载或登录画面,也不会套用 GRUB 主题的字体和布局。
  • Omarchy 的更新或主题操作可能重写 Limine 外观配置;若背景消失,检查 wallpaper、term_background 和实际启动入口。丢失的配置项需要重新添加,单纯执行替换命令不会补回缺失行。
  • 不需要为了这张背景更换 GRUB。更换引导器还要重新处理内核更新和启动条目,与现有 limine-entry-tool 的集成不能直接沿用。