目标与边界

机器:Debian 13(trixie)+ XFCE,原先用 LightDM + lightdm-gtk-greeter。

要做的事:

  1. 登录界面换成 GDM3(只要登录页,不换 GNOME 桌面)
  2. 登录后仍进 Xfce Session
  3. 能用图形工具调登录页外观(壁纸等)
  4. 搞清楚 登录头像 改哪里、为什么 Mugshot / 只改 ~/.face 不生效

明确不做(本文范围外):

  • 不装 WhiteSur / macOS 风 GDM 主题(可以后再加)
  • 不卸载 LightDM 包(方便回退)

桌面侧其它整理可对照:Debian 13 XFCE 开发机整理:熄屏、软件源、全局菜单与防火墙。


先备份

bash
1sudo cp -a /etc/X11/default-display-manager \
2  /etc/X11/default-display-manager.bak.$(date +%Y%m%d%H%M%S)
3sudo cp -a /etc/lightdm/lightdm.conf \
4  /etc/lightdm/lightdm.conf.bak.$(date +%Y%m%d%H%M%S)

确认当前 DM 与 XFCE 会话文件存在:

bash
1cat /etc/X11/default-display-manager
2# 常见:/usr/sbin/lightdm
3
4ls /usr/share/xsessions/
5# 应有 xfce.desktop

安装 GDM:注意混源 / 过新库

理想情况(纯 trixie)

图形桌面里执行即可,不必先切救援模式或纯命令行:

bash
1sudo apt-get update
2sudo apt-get install -y --no-install-recommends gdm3

若弹出「默认显示管理器」,选 gdm3。未弹出则:

bash
1echo /usr/sbin/gdm3 | sudo tee /etc/X11/default-display-manager
2sudo DEBIAN_FRONTEND=noninteractive dpkg-reconfigure -f noninteractive gdm3
bash
1sudo systemctl enable gdm.service   # 或 gdm3.service,视包而定
2sudo systemctl disable lightdm.service

确认:

bash
1cat /etc/X11/default-display-manager   # → /usr/sbin/gdm3
2readlink -f /etc/systemd/system/display-manager.service
3# → .../gdm.service
4test -f /usr/share/xsessions/xfce.desktop && echo xfce OK

然后 重启(比只注销稳):

bash
1sudo reboot

登录页若出现会话菜单,选 Xfce Session。

本机踩坑:glib / heif / xkb 比 trixie 新

若机器上曾混过 sid 包(例如 libglib2.0 / gir1.2-glib-2.0 已是 2.89.x),直接装 trixie 的 gdm3 常会失败,典型报错类似:

  • gdm3 → 依赖 gnome-shell
  • libgjs0g 与现有 gir1.2-glib-2.0 Breaks
  • libheif1 过新导致 heif-thumbnailer / gnome-control-center 装不上
  • libxkbcommon0 版本与 libxkbregistry0 对不上

不要为装 GDM 盲目把整套 glib/gtk4 降级回 trixie——容易把已能用的桌面、Cursor 等拖垮。

可行做法之一(与本机一致时):临时用 sid 装与当前新库匹配的 gdm3,装完再去掉 sid 源,避免以后 apt upgrade 整桌面滚飞:

bash
 1# 临时 sid(优先级压低)
 2echo 'deb https://mirrors.bfsu.edu.cn/debian sid main contrib non-free non-free-firmware' \
 3  | sudo tee /etc/apt/sources.list.d/sid-temp.list
 4
 5sudo tee /etc/apt/preferences.d/sid-temp >/dev/null <<'EOF'
 6Package: *
 7Pin: release a=unstable
 8Pin-Priority: 100
 9EOF
10
11sudo apt-get update
12echo 'gdm3 shared/default-x-display-manager select gdm3' | sudo debconf-set-selections
13sudo DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends -t sid gdm3
14
15echo /usr/sbin/gdm3 | sudo tee /etc/X11/default-display-manager
16sudo systemctl disable lightdm.service || true
17# display-manager.service 应指向 gdm
18
19# 用完立刻删临时源,降低误升级风险
20sudo rm -f /etc/apt/sources.list.d/sid-temp.list /etc/apt/preferences.d/sid-temp
21sudo apt-get update

这会拉上 gnome-shell 等一批依赖,体积不小;桌面日常仍用 XFCE,只是登录器用 GDM。混源系统请自己评估风险。


重启后:不选 Session 进不去

现象

GDM 登录页必须手动选会话,否则登不上或进奇怪会话。

原因

默认会话还停在 LightDM 时代的 lightdm-xsession:

  • ~/.dmrc 里可能是 Session=lightdm-xsession
  • AccountsService 里 Session / XSession 也可能是它
  • /usr/share/xsessions/lightdm-xsession.desktop 的 Exec=default,对 GDM 基本不可用

当前会话环境也可能显示:

bash
1echo "$DESKTOP_SESSION"   # 曾出现 lightdm-xsession

修复:默认改为 xfce

bash
 1# 1) 用户 dmrc
 2printf '%s\n' '[Desktop]' 'Session=xfce' > ~/.dmrc
 3
 4# 2) AccountsService(把 charlie 换成你的用户名)
 5sudo tee /var/lib/AccountsService/users/charlie >/dev/null <<'EOF'
 6[User]
 7Session=xfce
 8XSession=xfce
 9Icon=/var/lib/AccountsService/icons/charlie
10SystemAccount=false
11EOF
12sudo chmod 600 /var/lib/AccountsService/users/charlie
13sudo systemctl restart accounts-daemon
14
15# 3) 也可用 D-Bus(uid 按 id -u)
16busctl call org.freedesktop.Accounts \
17  /org/freedesktop/Accounts/User$(id -u) \
18  org.freedesktop.Accounts.User SetXSession s xfce

隐藏失效的 Default Xsession

避免下次再点错:

bash
1echo 'Hidden=true' | sudo tee -a /usr/share/xsessions/lightdm-xsession.desktop
2echo 'NoDisplay=true' | sudo tee -a /usr/share/xsessions/lightdm-xsession.desktop

之后登录页可直接输密码;若仍出现会话菜单,选一次 Xfce Session,一般会记住。


GDM 图形配置:GDM Settings

GDM 没有像「控制中心里完整登录页编辑器」的官方小面板;实用方案是 Flatpak GDM Settings:

bash
1flatpak install -y flathub io.github.realmazharhussain.GdmSettings

启动:

bash
1flatpak run io.github.realmazharhussain.GdmSettings

或在应用菜单搜 GDM Settings。

可改:外观 / 字体 / 顶栏 / 登录页壁纸与 logo / 电源相关等。改登录页配置通常要提权;点 Apply 后注销到登录页看效果。

注意:GDM Settings 不能改用户头像(Appearance 只管主题/壁纸一类)。


登录页用户头像

头像实际读哪里

路径作用
~/.face / ~/.face.icon用户目录头像,很多工具会写这里
/var/lib/AccountsService/icons/<用户名>GDM 可靠读取的位置
/var/lib/AccountsService/users/<用户名> 里的 Icon=告诉 AccountsService / GDM 用哪张图

查看:

bash
1ls -la ~/.face
2grep ^Icon= /var/lib/AccountsService/users/$(whoami)   # 可能需 sudo
3ls -la /var/lib/AccountsService/icons/
4busctl get-property org.freedesktop.Accounts \
5  /org/freedesktop/Accounts/User$(id -u) \
6  org.freedesktop.Accounts.User IconFile

为什么只改 ~/.face / 用 Mugshot「没用」

常见两层原因(本机都遇到过):

  1. 家目录权限是 700(drwx------)
    GDM 进程用户是 Debian-gdm,进不了 /home/你的用户,自然读不到 ~/.face。
    即使用 Mugshot 成功写入了 .face,登录页仍是旧图或默认图。

  2. 图太大
    AccountsService 的 SetIconFile 会拒过大文件(例如 1080×1080、1.7MB 级 PNG),报错类似:
    file '...' is too large to be used as an icon
    建议缩到约 256×256、体积几十 KB 量级(JPEG 即可)。

因此:不要依赖「只改家目录 .face」;要同步到 AccountsService 图标目录,并保证 Debian-gdm 对该路径可读(系统目录 644 即可)。

Mugshot 会拉 cheese/clutter 等依赖;若不想污染环境,用下面手动步骤即可,不必装 Mugshot。

以后更换头像(推荐步骤)

把 你的图.jpg、用户名换成自己的:

bash
 1# 1) 缩放(有 ImageMagick / ffmpeg / 带 PIL 的 python 任一即可)
 2# 示例:python3 + Pillow
 3python3 - <<'PY'
 4from PIL import Image
 5im = Image.open("你的图.jpg").convert("RGB")
 6im = im.resize((256, 256), Image.Resampling.LANCZOS)
 7im.save("/tmp/face.jpg", "JPEG", quality=85, optimize=True)
 8print("ok")
 9PY
10
11# 2) 用户目录备份一份(可选)
12cp /tmp/face.jpg ~/.face
13
14# 3) 写入 GDM 可读路径并登记
15sudo install -d -m 755 /var/lib/AccountsService/icons
16sudo install -m 644 /tmp/face.jpg /var/lib/AccountsService/icons/charlie
17sudo sed -i 's|^Icon=.*|Icon=/var/lib/AccountsService/icons/charlie|' \
18  /var/lib/AccountsService/users/charlie
19# 若没有 Icon= 行,用编辑器在 [User] 下加一行 Icon=...
20
21sudo busctl call org.freedesktop.Accounts \
22  /org/freedesktop/Accounts/User$(id -u) \
23  org.freedesktop.Accounts.User SetIconFile s \
24  /var/lib/AccountsService/icons/charlie
25
26# 4) 注销到登录页查看(一般不用重启)

也可用「GNOME 设置 → 用户」点头像;若只更新了 ~/.face、登录页没变,仍按上面把图拷到 /var/lib/AccountsService/icons/。

不建议的「永久自动化」

用 systemd path 监听 ~/.face 再 sudo 同步、或为缩放再装一堆图像库,容易引入多余依赖、搞乱环境。开发机更稳妥是:换头像时跑一遍上面的小段命令。


回退到 LightDM(GDM 起不来时)

Ctrl+Alt+F3 登录后:

bash
1echo /usr/sbin/lightdm | sudo tee /etc/X11/default-display-manager
2sudo apt-get install -y --reinstall lightdm
3sudo systemctl enable lightdm
4sudo systemctl disable gdm.service 2>/dev/null || sudo systemctl disable gdm3.service 2>/dev/null || true
5sudo reboot

LightDM 包平时可保留,不必为换 GDM 卸载。


检查清单

换 GDM 后建议确认:

bash
1cat /etc/X11/default-display-manager          # gdm3
2test -f /usr/share/xsessions/xfce.desktop && echo xfce
3grep -E '^(Session|XSession|Icon)=' /var/lib/AccountsService/users/$(whoami)  # 可能需 sudo
4cat ~/.dmrc                                   # Session=xfce
5flatpak info io.github.realmazharhussain.GdmSettings 2>/dev/null | head -5

登录页:

  • 出现 GDM(非 LightDM gtk-greeter)
  • 可不选手动 Session 直接进 XFCE(或选一次后记住)
  • 头像为预期图片
  • 桌面仍是 XFCE(面板 / WhiteSur 等未丢)

End

项目结论
登录器LightDM → GDM3;桌面仍用 XFCE
默认会话必须改成 xfce,去掉/隐藏 lightdm-xsession
登录页 GUIFlatpak GDM Settings;不改头像
头像写入 /var/lib/AccountsService/icons/<用户> + Icon=;注意家目录 700 与图片体积

纯 trixie 环境优先用仓库里的 gdm3;若已混 sid 新库,再考虑临时 sid 安装并立刻撤源,避免为降级把现有桌面拆坏。