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-shellgdm包升级(Upgrade)后触发。
    • [Action]部分:定义了要执行的动作。
    • Exec: 最关键的一行。它需要指定一个完整的shell命令来重新应用主题。
  • 原理验证:保存文件后,这个钩子就生效了。下一次当你运行 sudo pacman -Syu 并且更新列表里包含 gnome-shellgdm 时,你会在升级输出中看到你设置的 Description 文字,随后主题会被自动重新应用。升级完成后,你的 GDM 登录界面将保持为 WhiteSur 主题,再也不会被重置了。