← 返回首页

Ubuntu 26.04 GDM 登录界面 HiDPI 缩放配置:monitors.xml 路径变了

2026-05-26 · LinuxUbuntu 26.04GDMHiDPIWayland

环境: Ubuntu 26.04,GNOME 50、默认 Wayland、NVIDIA Blackwell(595 open 驱动)、4K 显示器、分数缩放 166.7%。gdm3 版本 50.0-0ubuntu1

桌面会话里把缩放调到 166.7% 之后,登录界面(GDM greeter)还是糊的。按网上常见做法把自己的 ~/.config/monitors.xml 复制到 /var/lib/gdm3/.config/monitors.xml、属主改成 gdm:gdm、重启 gdm——没用,登录界面依然是没有缩放的小字。这条老经验在 Ubuntu 26.04 不灵了,因为 gdm 50.0 同时改了两件事:greeter 进程的运行用户、和它读配置的目录。

现象

sudo install -o gdm -g gdm -m 644 ~/.config/monitors.xml /var/lib/gdm3/.config/monitors.xml
sudo systemctl restart gdm

重启后登录界面依旧糊,字号也对不上 167% 缩放。同样的 monitors.xml 在自己用户的桌面里是生效的,所以问题不在文件内容本身——而在 GDM 是否真的读到它。

取证一:greeter 跑在哪个用户下?

翻 GDM 日志,留意 PAM 那一行:

$ sudo journalctl -u gdm -b
... gdm-launch-environment][2924]: pam_unix(gdm-launch-environment:session):
    session opened for user gdm-greeter(uid=60578) by (uid=0)

uid 60578 的用户叫 gdm-greeter,不是传统的 gdm(uid 975)。但奇怪的是:

$ getent passwd gdm-greeter
(空)
$ getent passwd 60578
(空)

NSS 里查不到这个用户,也不是 systemd 的 DynamicUser:

$ busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 \
    org.freedesktop.systemd1.Manager LookupDynamicUserByName s gdm-greeter
Call failed: Dynamic user gdm-greeter does not exist.

也就是说,greeter 进程通过 PAM 在一个静态 uid 60578 下跑,但这个用户不在 passwd 数据库里——它由 gdm 自己管理(/var/lib/gdm3/.migrated-dyn-users 就是这次迁移留下的标记文件)。老路径 /var/lib/gdm3/.config/ 是给 uid 975 的 gdm 用户用的,greeter 根本不是这个用户

取证二:新配置目录在哪?

直接看 gdm 二进制里的字符串路径:

$ sudo strings /usr/sbin/gdm3 | grep -E '/var/lib/gdm3|gdm-greeter'
/var/lib/gdm3
/var/lib/gdm3/seat0
/var/lib/gdm3/seat0/state
/var/lib/gdm3/.local/state
/var/lib/gdm3/seat0/config
/var/lib/gdm3/.config
/var/lib/gdm3/%s/config
/var/lib/gdm3/%s/state
gdm-greeter
/var/lib/gdm3/.migrated-dyn-users

/var/lib/gdm3/seat0/config//var/lib/gdm3/%s/config(%s 就是 seat 名)是新的按 seat 隔离的配置目录,binary 里同时还保留 /var/lib/gdm3/.config 是为了兼容旧路径(但显然不是 greeter 启动时实际读的那个)。

进一步看 seat0/config/ 的实际所有者:

$ sudo ls -la /var/lib/gdm3/seat0/config/
drwx------ 4 60578 nogroup ...
-rw------- 1 60578 nogroup ... user-dirs.dirs
drwx------ 3 60578 nogroup ... ibus
drwx------ 2 60578 nogroup ... pulse

属主就是 uid 60578,目录 700。里面已经有 ibuspulseuser-dirs.dirs 等 XDG 风格的运行时配置——这才是 greeter 真正的 XDG_CONFIG_HOME

根因

合在一起就是一句话:

Ubuntu 26.04 的 gdm 50.0 把 greeter 改成在 uid 60578 (gdm-greeter) 下跑,并把它的配置目录从 /var/lib/gdm3/.config/ 搬到了按 seat 隔离的 /var/lib/gdm3/seat0/config/

老路径下放的 monitors.xml 既不在新路径上、属主又是错的用户,所以 greeter 完全读不到。

解决

先在自己的「设置 → 显示」里把分辨率、缩放、刷新率调成你想要的样子,系统会把这套配置写进 ~/.config/monitors.xml。然后复制到新路径,属主用 uid 60578(用数字写,因为 gdm-greeter 名字在 NSS 里查不到):

sudo install -o 60578 -g nogroup -m 600 \
    ~/.config/monitors.xml \
    /var/lib/gdm3/seat0/config/monitors.xml

如果之前按老经验放过 /var/lib/gdm3/.config/monitors.xml,顺手清掉避免误导:

sudo rm -f /var/lib/gdm3/.config/monitors.xml

重启 gdm(注意:会立即结束当前图形会话,先存好工作):

sudo systemctl restart gdm

验证

重启后看登录界面是否按设定的分辨率和缩放渲染。也可以核对一下文件状态:

$ sudo ls -la /var/lib/gdm3/seat0/config/monitors.xml
-rw------- 1 60578 nogroup 599 May 26 12:31 /var/lib/gdm3/seat0/config/monitors.xml

属主 60578、模式 600,和同目录其它文件对齐就对了。

顺手注意

后续工作流

以后每次在桌面里改了显示设置,把新的 ~/.config/monitors.xml 同步过去就行:

sudo install -o 60578 -g nogroup -m 600 \
    ~/.config/monitors.xml \
    /var/lib/gdm3/seat0/config/monitors.xml
sudo systemctl restart gdm

小结

按"复制 monitors.xml 给 gdm 用户"这条老经验,在 Ubuntu 26.04 上会默默失败——路径和用户都改了,但 GDM 不会报错也不会回退,只是用默认未缩放的画面把登录界面渲染出来。排查的关键是从 PAM 日志里看 greeter 实际跑在哪个 uid,再从 binary strings 里翻出新的配置目录;改完用 ls -la 确认属主就行。