ArchLinux使用PcamanHooks解决GDM恢复默认的问题

ArchLinux 是我的主力办公系统,我配置了完整的 WhiteSur 主题,当然也细致到了使用 WhiteSur 的 GDM 主题。但是我发现有时候系统使用 Pacman 升级后 GDM 主题会恢复到默认状态,其根源在于 GDM (GNOME 显示管理器)的主题是通过直接替换系统文件 /usr/share/gnome-shell/gnome-shell-theme.gresource 来实现的。当gnome-shell 软件包升级时,这个文件会被包管理器自动恢复为默认版本,所以美化的登录界面就消失了。

永久解决这个问题的核心思路是让系统在每次gnome-shell更新后,自动重新应用一次WhiteSur主题。在ArchLinux上,最优雅的方式就是使用Pacman钩子(hook), 具体步骤为:

  • 创建钩子文件:使用root权限在/usr/share/libalpm/hooks/目录下创建一个新的钩子文件,例如命名为reapply-whitesur-gdm.hook, 如果你按装了nvim则执行
1
sudo nvim /usr/share/libalpm/hooks/reapply-whitesur-gdm.hook
  • 编写钩子内容:
1
2
3
4
5
6
7
8
9
[Trigger]
Operation = Upgrade
Type = Package
Target = gnome-shell

[Action]
Description = Reapplying WhiteSur GDM theme after gnome-shell upgrade...
When = PostTransaction
Exec = /bin/sh -c 'cd /路径/你的/WhiteSur-gtk-theme && sudo ./tweaks.sh -g'
+ `[Trigger]`部分:定义了钩子的触发条件, 即`gnome-shell`或`gdm`包升级(`Upgrade`)后触发。
+ `[Action]`部分:定义了要执行的动作。
+ `Exec`: 最关键的一行。它需要指定一个完整的`shell`命令来重新应用主题。
  • 原理验证:保存文件后,这个钩子就生效了。下一次当你运行 sudo pacman -Syu 并且更新列表里包含 gnome-shell或gdm 时,你会在升级输出中看到你设置的 Description 文字,随后主题会被自动重新应用。升级完成后,你的 GDM 登录界面将保持为 WhiteSur 主题,再也不会被重置了。