背景
某台 Arch Linux 桌面系统使用 KDE Plasma 6,显示会话为 X11,登录管理器为 SDDM,桌面缩放设置为 150%。系统使用 Breeze 主题,光标、图标、颜色主题也都保持 Breeze 系列,以保证视觉风格一致。
问题出现在开机后的 SDDM 登录界面:登录前的界面没有按照预期进行缩放,文字显得很小,但鼠标指针又显得偏大。进入 KDE 桌面之后,应用界面和字体整体看起来正常,但经过进一步观察发现,桌面里的鼠标指针反而偏小。也就是说,问题并不是单纯的“SDDM 没有缩放”,而是登录界面、桌面会话、光标大小、字体 DPI 之间没有完全统一。
本次排查的目标是:
1. 找出 SDDM 登录界面文字过小的原因;
2. 让 SDDM 登录界面与 KDE 桌面的缩放比例协调;
3. 让登录界面和桌面里的鼠标指针大小一致;
4. 总结未来硬件迁移到 100%、125%、150% 等不同缩放比例设备时需要调整的地方。
一、现象描述
系统设置中,KDE Plasma 桌面缩放比例为 150%。进入桌面后,大部分 Qt/KDE 应用显示正常。
但是开机后的 SDDM 登录界面出现以下现象:
1. 用户名、密码框、按钮文字明显偏小;
2. 鼠标指针看起来很大;
3. 鼠标指针在登录界面和登录后的桌面中观感不一致;
4. 点击 KDE 系统设置中的“应用 Plasma 设置”后,登录界面没有明显变化。
最初容易误判为 SDDM 完全没有继承 KDE 的 150% 缩放。但后续检查发现,问题更细:SDDM 的底层 X11 DPI 已经是 144,也就是 150%,只是 SDDM greeter 没有完整吃到 Qt 字体 DPI 环境;同时 KDE 桌面的鼠标光标大小仍是默认 24,没有按 150% 放大。
二、基础环境
排查环境可以概括为:
发行版:Arch Linux
桌面环境:KDE Plasma 6
会话类型:X11
登录管理器:SDDM
SDDM greeter:sddm-greeter-qt6
SDDM 主题:breeze
桌面缩放:150%
屏幕类型:高 DPI 内置屏
主题体系:Breeze
确认会话类型:
echo "XDG_SESSION_TYPE=$XDG_SESSION_TYPE"
echo "XDG_CURRENT_DESKTOP=$XDG_CURRENT_DESKTOP"
echo "KDE_SESSION_VERSION=$KDE_SESSION_VERSION"
典型输出:
XDG_SESSION_TYPE=x11
XDG_CURRENT_DESKTOP=KDE
KDE_SESSION_VERSION=6
确认当前显示管理器:
readlink -f /etc/systemd/system/display-manager.service
systemctl status sddm.service --no-pager -l
如果指向 sddm.service,说明当前登录管理器确认为 SDDM。
三、第一次误判:以为 SDDM 没有拿到 Plasma 设置
KDE 系统设置中提供了一个按钮:
系统设置 → 外观/颜色与主题 → 登录界面 SDDM → 应用 Plasma 设置
点击后,系统会把部分 Plasma 外观、显示、字体相关配置同步给 SDDM 用户。同步后可以看到类似目录和文件:
/var/lib/sddm/.config/kdeglobals
/var/lib/sddm/.config/kcminputrc
/var/lib/sddm/.config/kwinoutputconfig.json
/var/lib/sddm/.config/plasmarc
检查命令:
sudo ls -la /var/lib/sddm/.config
sudo grep -nE 'ScaleFactor|ScreenScaleFactors|font=|menuFont=|activeFont=' \
/var/lib/sddm/.config/kdeglobals
sudo python -m json.tool /var/lib/sddm/.config/kwinoutputconfig.json
同步后可以看到:
ScaleFactor=1.5
ScreenScaleFactors=...1.5...
kwinoutputconfig.json 中也能找到当前高 DPI 屏幕对应的 scale: 1.5 条目。
但是,重启后 SDDM 登录界面没有变化。由此可以判断:
“应用 Plasma 设置”确实生成了 SDDM 用户配置;
但这些配置没有完全解决当前 X11 SDDM greeter 的实际缩放问题。
因此不能只停留在“Plasma 设置是否复制过去”这一层,还要继续检查 SDDM greeter 实际启动时拿到了哪些 DPI 和环境变量。
四、确认 SDDM X11 DPI 已经是 144
进一步检查 SDDM 日志:
sudo journalctl -b -u sddm.service --no-pager -n 500 \
| grep -iE 'dpi|scale|hidpi|qt|qml|theme|cursor|font|greeter|x11|xorg|wayland|error|warn'
关键输出类似:
Running: /usr/bin/X -dpi 144 ...
Loading theme configuration from "/usr/share/sddm/themes/breeze/theme.conf"
Starting X11 session: ... /usr/bin/sddm-greeter-qt6 --theme /usr/share/sddm/themes/breeze
再检查 Xorg 日志:
sudo grep -iE 'dpi|dimension|DisplaySize|resolution|screen|monitor|EDID|3840|2160|font|cursor' \
/var/log/Xorg.0.log | tail -n 120
关键结果:
Output eDP using initial mode 3840x2160
DPI set to (144, 144)
这说明 SDDM 登录界面阶段的 Xorg 已经使用:
-dpi 144
而 144 DPI 对应的正是:
96 × 1.5 = 144
所以问题不是 Xorg DPI 没有生效,也不是屏幕分辨率识别错误。
五、真正差异:SDDM greeter 缺少 Qt 字体 DPI 环境
桌面会话中检查缩放相关环境变量:
env | grep -E '^(QT_|KDE_|GDK_|XCURSOR_|XFT_|PLASMA_)' | sort
xrdb -query | grep -iE 'Xft.dpi|Xcursor'
KDE 桌面中可以看到:
QT_SCREEN_SCALE_FACTORS=eDP=1.5;...
Xft.dpi: 144
而 SDDM 默认配置中:
sudo grep -RInE 'GreeterEnvironment|QT_SCALE_FACTOR|QT_SCREEN_SCALE_FACTORS|QT_FONT_DPI' \
/etc/sddm.conf /etc/sddm.conf.d/*.conf /usr/lib/sddm/sddm.conf.d/*.conf 2>/dev/null
可以看到默认状态下:
GreeterEnvironment=
也就是说,SDDM greeter 没有显式拿到 Qt 字体 DPI 环境。
这里需要注意一个陷阱:不能直接给 SDDM 设置 QT_SCALE_FACTOR=1.5。因为底层 Xorg 已经是 -dpi 144,也就是 150%。如果再叠加:
GreeterEnvironment=QT_SCALE_FACTOR=1.5,QT_FONT_DPI=144
视觉效果可能接近:
1.5 × 1.5 = 2.25
也就是 225%,登录界面会变得非常巨大。
实际验证也表明,直接使用 QT_SCALE_FACTOR=1.5 会导致 SDDM 登录界面过大,不协调。
正确方向是只补 Qt 字体 DPI:
[General]
GreeterEnvironment=QT_FONT_DPI=144
这样不会额外叠乘整体界面缩放,而是让 Qt greeter 明确使用 144 DPI 的字体渲染。
六、SDDM 本地覆盖配置
不建议修改这些软件包自带文件:
/usr/lib/sddm/sddm.conf.d/default.conf
/usr/share/sddm/themes/breeze/theme.conf
/usr/share/sddm/themes/breeze/Main.qml
这些文件属于软件包管理范围,系统更新时可能被覆盖,也不便于长期维护。
推荐使用本地管理员覆盖文件:
/etc/sddm.conf.d/90-local-greeter-hidpi.conf
这个目录本来就是 SDDM 本地配置覆盖目录,属于比较干净、可回退、可迁移的做法。
当前 150% 环境下,最终建议配置为:
[General]
GreeterEnvironment=QT_FONT_DPI=144
[Theme]
CursorTheme=breeze_cursors
CursorSize=36
[X11]
ServerArguments=-dpi 144
其中:
QT_FONT_DPI=144 用于修正 SDDM greeter 字体 DPI
CursorTheme=breeze_cursors
CursorSize=36 用于固定登录界面光标大小
ServerArguments=-dpi 144
用于保证 SDDM X11 层 DPI 是 144
写入命令:
sudo tee /etc/sddm.conf.d/90-local-greeter-hidpi.conf >/dev/null <<'EOF'
[General]
GreeterEnvironment=QT_FONT_DPI=144
[Theme]
CursorTheme=breeze_cursors
CursorSize=36
[X11]
ServerArguments=-dpi 144
EOF
cat /etc/sddm.conf.d/90-local-greeter-hidpi.conf
如果当前系统中 /etc/sddm.conf.d/kde_settings.conf 已经有:
[X11]
ServerArguments=-dpi 144
也可以暂时不重复写入 [X11] 段。但为了未来硬件迁移时集中管理 DPI,建议把 [X11] 也放进 90-local-greeter-hidpi.conf,让这个文件成为最终覆盖点。
修改后重启:
systemctl reboot
七、第二个问题:KDE 桌面光标原来没有按 150% 放大
SDDM 登录界面修正后,登录界面显示变得协调,但进入 KDE 桌面后,反而发现桌面鼠标指针偏小。
检查桌面光标:
echo "XCURSOR_THEME=$XCURSOR_THEME"
echo "XCURSOR_SIZE=$XCURSOR_SIZE"
kreadconfig6 --file kcminputrc --group Mouse --key cursorTheme
kreadconfig6 --file kcminputrc --group Mouse --key cursorSize
xrdb -query | grep -iE 'Xcursor|cursor'
初始状态中,桌面实际光标大小是:
Xcursor.size: 24
Xcursor.theme: breeze_cursors
这说明光标主题是 Breeze,但光标大小仍是默认 24。
在 150% 缩放下,合理值应为:
24 × 1.5 = 36
设置 KDE 桌面光标大小:
ts="$(date +%Y%m%d-%H%M%S)"
cp -a ~/.config/kcminputrc ~/.config/kcminputrc.$ts
kwriteconfig6 --file kcminputrc --group Mouse --key cursorTheme breeze_cursors
kwriteconfig6 --file kcminputrc --group Mouse --key cursorSize 36
kreadconfig6 --file kcminputrc --group Mouse --key cursorTheme
kreadconfig6 --file kcminputrc --group Mouse --key cursorSize
注销 KDE 会话后重新登录,再检查:
xrdb -query | grep -iE 'Xcursor|cursor'
理想结果:
Xcursor.theme: breeze_cursors
Xcursor.size: 36
至此,SDDM 登录界面和 KDE 桌面的鼠标指针大小都统一到 36。
八、GTK 程序也需要同步检查
KDE/Qt 显示正常,不代表 GTK 程序一定同步。需要检查:
~/.config/gtk-3.0/settings.ini
~/.config/gtk-4.0/settings.ini
检查命令:
grep -nE 'gtk-xft-dpi|gtk-cursor-theme-size|gtk-cursor-theme-name|gtk-theme-name' \
~/.config/gtk-3.0/settings.ini ~/.config/gtk-4.0/settings.ini
150% 下理想结果:
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=36
gtk-xft-dpi=147456
这里的 147456 不是异常,而是 GTK 的 DPI 表示方式:
144 × 1024 = 147456
常见换算如下:
96 × 1024 = 98304
120 × 1024 = 122880
144 × 1024 = 147456
168 × 1024 = 172032
192 × 1024 = 196608
如果 GTK 设置中也显示 gtk-cursor-theme-size=36 和 gtk-xft-dpi=147456,说明 GTK 程序与 KDE 桌面保持一致。
九、最终 150% 状态
修复后,整个系统应保持以下状态:
KDE 桌面:
ScaleFactor=1.5
ScreenScaleFactors=...1.5...
QT_SCREEN_SCALE_FACTORS=...1.5...
Xft.dpi=144
Xcursor.theme=breeze_cursors
Xcursor.size=36
KDE 光标配置:
cursorTheme=breeze_cursors
cursorSize=36
GTK:
gtk-xft-dpi=147456
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=36
SDDM:
GreeterEnvironment=QT_FONT_DPI=144
CursorTheme=breeze_cursors
CursorSize=36
ServerArguments=-dpi 144
这套状态中没有使用 QT_SCALE_FACTOR=1.5,避免了重复叠乘。
十、完整审计命令
以后系统更新、迁移硬件或发现显示比例异常时,可以直接执行以下只读审计命令:
echo "===== session ====="
echo "XDG_SESSION_TYPE=$XDG_SESSION_TYPE"
echo "XDG_CURRENT_DESKTOP=$XDG_CURRENT_DESKTOP"
echo "KDE_SESSION_VERSION=$KDE_SESSION_VERSION"
echo
echo "===== env ====="
env | grep -E '^(QT_|KDE_|GDK_|XCURSOR_|XFT_|PLASMA_)' | sort || true
echo
echo "===== xrdb ====="
xrdb -query 2>/dev/null | grep -iE 'Xft.dpi|Xcursor|dpi|cursor' || true
echo
echo "===== KDE scale/font ====="
grep -nE '^\[KScreen\]|ScaleFactor|ScreenScaleFactors|^\[Fonts\]|^font=|^menuFont=|^smallestReadableFont=|^toolBarFont=|^activeFont=' \
~/.config/kdeglobals 2>/dev/null || true
echo
echo "===== KDE cursor ====="
kreadconfig6 --file kcminputrc --group Mouse --key cursorTheme
kreadconfig6 --file kcminputrc --group Mouse --key cursorSize
grep -nE 'cursorTheme|cursorSize|Cursor|cursor' ~/.config/kcminputrc 2>/dev/null || true
echo
echo "===== GTK ====="
grep -nE 'gtk-xft-dpi|gtk-cursor-theme-size|gtk-cursor-theme-name|gtk-theme-name' \
~/.config/gtk-3.0/settings.ini ~/.config/gtk-4.0/settings.ini 2>/dev/null || true
echo
echo "===== SDDM ====="
sudo grep -RInE '^\[General\]|^\[Theme\]|^\[X11\]|GreeterEnvironment|QT_SCALE_FACTOR|QT_SCREEN_SCALE_FACTORS|QT_FONT_DPI|CursorTheme|CursorSize|Font=|ServerArguments|EnableHiDPI|Current=' \
/etc/sddm.conf /etc/sddm.conf.d/*.conf /usr/lib/sddm/sddm.conf.d/*.conf 2>/dev/null || true
echo
echo "===== global override check ====="
for f in /etc/environment ~/.pam_environment ~/.profile ~/.bash_profile ~/.bashrc ~/.xprofile ~/.xinitrc ~/.config/plasma-workspace/env/*.sh; do
[ -e "$f" ] || continue
echo "--- $f ---"
grep -nE 'QT_SCALE_FACTOR|QT_SCREEN_SCALE_FACTORS|QT_FONT_DPI|GDK_SCALE|GDK_DPI_SCALE|XCURSOR_SIZE|XCURSOR_THEME|Xft.dpi|Xcursor.size|PLASMA_USE_QT_SCALING' "$f" 2>/dev/null || true
done
重点关注是否存在这些危险项:
QT_SCALE_FACTOR=1.5
GDK_SCALE=2
GDK_DPI_SCALE=...
XCURSOR_SIZE=24
尤其是 QT_SCALE_FACTOR=1.5,在 Xorg 已经使用 -dpi 144 的情况下容易导致 225% 的过度放大。
十一、未来硬件迁移时的核心公式
如果将来把系统迁移到其他显示设备,不同设备可能适合 100%、125%、150%、175% 或 200% 缩放。
统一规则:
目标缩放比例 = S
字体 DPI = 96 × S
光标大小 = 24 × S
GTK DPI = 字体 DPI × 1024
常用表:
| 目标缩放 | 字体 DPI | 光标大小 | GTK gtk-xft-dpi |
|---|---|---|---|
| 100% | 96 | 24 | 98304 |
| 125% | 120 | 30 | 122880 |
| 150% | 144 | 36 | 147456 |
| 175% | 168 | 42 | 172032 |
| 200% | 192 | 48 | 196608 |
十二、迁移到 100% 设备时
适用于普通 1080p 屏幕或低 DPI 屏幕。
KDE 桌面:
显示缩放:100%
Force font DPI:96
光标大小:24
KDE 光标命令:
kwriteconfig6 --file kcminputrc --group Mouse --key cursorTheme breeze_cursors
kwriteconfig6 --file kcminputrc --group Mouse --key cursorSize 24
SDDM 本地配置:
[General]
GreeterEnvironment=QT_FONT_DPI=96
[Theme]
CursorTheme=breeze_cursors
CursorSize=24
[X11]
ServerArguments=-dpi 96
GTK 理想值:
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=24
gtk-xft-dpi=98304
十三、迁移到 125% 设备时
适用于部分 2K 屏幕或中等 DPI 屏幕。
KDE 桌面:
显示缩放:125%
Force font DPI:120
光标大小:30
KDE 光标命令:
kwriteconfig6 --file kcminputrc --group Mouse --key cursorTheme breeze_cursors
kwriteconfig6 --file kcminputrc --group Mouse --key cursorSize 30
SDDM 本地配置:
[General]
GreeterEnvironment=QT_FONT_DPI=120
[Theme]
CursorTheme=breeze_cursors
CursorSize=30
[X11]
ServerArguments=-dpi 120
GTK 理想值:
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=30
gtk-xft-dpi=122880
十四、迁移到 150% 设备时
适用于 4K 高 DPI 屏幕。
KDE 桌面:
显示缩放:150%
Force font DPI:144
光标大小:36
KDE 光标命令:
kwriteconfig6 --file kcminputrc --group Mouse --key cursorTheme breeze_cursors
kwriteconfig6 --file kcminputrc --group Mouse --key cursorSize 36
SDDM 本地配置:
[General]
GreeterEnvironment=QT_FONT_DPI=144
[Theme]
CursorTheme=breeze_cursors
CursorSize=36
[X11]
ServerArguments=-dpi 144
GTK 理想值:
gtk-cursor-theme-name=breeze_cursors
gtk-cursor-theme-size=36
gtk-xft-dpi=147456
十五、迁移后推荐操作顺序
迁移到新硬件后,不建议直接沿用旧设备的所有显示配置。推荐顺序如下:
1. 登录 KDE 后,先确认屏幕分辨率和物理观感;
2. 在 KDE 系统设置中设置合适的显示缩放比例;
3. 在字体设置中设置 Force font DPI;
4. 设置 KDE 光标大小;
5. 检查 GTK 的 DPI 和光标大小是否同步;
6. 修改 /etc/sddm.conf.d/90-local-greeter-hidpi.conf;
7. 点击一次“应用 Plasma 设置”同步 SDDM 外观;
8. 重启验证 SDDM 登录界面;
9. 执行完整审计命令确认所有值一致。
图形界面路径:
系统设置 → 显示器与监视器 → 缩放
系统设置 → 外观/颜色与主题 → 字体 → Force font DPI
系统设置 → 外观/颜色与主题 → 光标
系统设置 → 外观/颜色与主题 → 登录界面 SDDM → 应用 Plasma 设置
十六、关于旧显示器记录
~/.config/kwinoutputconfig.json 和 /var/lib/sddm/.config/kwinoutputconfig.json 中可能存在多个旧设备、旧分辨率、旧 EDID 的记录。例如:
旧笔记本屏幕:1366x768 scale=1
外接或旧屏幕:1920x1080 scale=1.25
当前高 DPI 屏幕:3840x2160 scale=1.5
这些历史记录本身不一定是问题。只要当前实际使用的屏幕条目对应正确缩放,系统就可以正常工作。
如果迁移新硬件后显示明显异常,可以先备份相关文件,再让 KDE 重新生成显示配置:
ts="$(date +%Y%m%d-%H%M%S)"
cp -a ~/.config/kwinoutputconfig.json ~/.config/kwinoutputconfig.json.$ts 2>/dev/null || true
cp -a ~/.config/kscreen ~/.config/kscreen.$ts 2>/dev/null || true
不建议在不理解结构的情况下直接手动编辑 kwinoutputconfig.json。
十七、不要修改软件包文件
不建议修改:
/usr/lib/sddm/sddm.conf.d/default.conf
/usr/share/sddm/themes/breeze/theme.conf
/usr/share/sddm/themes/breeze/Main.qml
原因:
1. 这些文件属于软件包管理范围;
2. 系统更新可能覆盖;
3. 后续排查时不容易区分本地设置和上游默认;
4. 修改主题文件会让问题更难维护。
推荐只使用:
/etc/sddm.conf.d/90-local-greeter-hidpi.conf
~/.config/kcminputrc
~/.config/kdeglobals
~/.config/gtk-3.0/settings.ini
~/.config/gtk-4.0/settings.ini
其中 SDDM 的本地覆盖文件是最适合长期维护登录界面 DPI 与光标大小的地方。
十八、总结
本次问题表面上是 SDDM 登录界面文字过小,实际涉及 KDE X11 高 DPI 缩放中的多个层级:
KDE Plasma 显示缩放
Xft.dpi
Qt 环境变量
KDE 光标大小
GTK DPI 和光标大小
SDDM greeter 字体 DPI
SDDM X11 DPI
SDDM 光标大小
最终结论是:
1. SDDM X11 层已经使用 -dpi 144;
2. “应用 Plasma 设置”虽然复制了配置,但没有完全解决 X11 greeter 字体 DPI 问题;
3. 给 SDDM greeter 设置 QT_FONT_DPI=144 后,登录界面字体比例恢复正常;
4. 不应使用 QT_SCALE_FACTOR=1.5,否则会和已有 DPI 叠乘导致界面过大;
5. KDE 桌面光标原本仍是 24,在 150% 缩放下应设置为 36;
6. GTK 也需要确认 gtk-xft-dpi 和 gtk-cursor-theme-size;
7. 登录界面和桌面最终应统一为 144 DPI、36 光标。
当前 150% 环境的推荐最终组合:
KDE ScaleFactor=1.5
Xft.dpi=144
Xcursor.size=36
GTK gtk-xft-dpi=147456
GTK gtk-cursor-theme-size=36
SDDM QT_FONT_DPI=144
SDDM CursorSize=36
SDDM ServerArguments=-dpi 144
未来迁移硬件时,只要按公式统一即可:
字体 DPI = 96 × 缩放比例
光标大小 = 24 × 缩放比例
GTK DPI = 字体 DPI × 1024
这比单纯依赖桌面环境自动同步更可靠,也更便于长期维护。