HX90 SDDM、Labwc 与多显示器适配
HX90 SDDM、Labwc 与多显示器适配
本文记录 HX90 当前桌面登录、Labwc 会话、Shizuka SDDM 主题和多显示器缩放的配置约定。
当前设计
- 桌面会话使用 Labwc,不使用 Omarchy/Hyprland 会话。
- 登录管理器使用 Wayland 版 SDDM。
- SDDM 主题使用 Shizuka。
- Shizuka 为每个 SDDM 输出创建独立的 QML view。
- 多显示器规范:仅在 SDDM 主显示器(
primaryScreen)上展示登录交互区(居中头像、用户名、密码框、时间与电源会话菜单),所有副显示器仅渲染纯净虚化壁纸与暗色遮罩,彻底杜绝双屏焦点争夺与视觉错乱。单显示器环境下无缝显示完整界面。 - 主题优先根据当前主显示器 QML view 的实际宽高动态计算界面比例,screenModel 只作为备用,不按 HDMI 名称写死,也不假设固定的显示器数量。
- 登录核心控件(头像、用户名、密码框)在主显示器上垂直和水平居中,时间日期在顶部居中,视觉重心稳定平衡。
- 主题缩放范围扩展为 0.5 到 2.5,完整覆盖 720p/1024x768、1280x1024 (5:4)、1080p、2K (1440p) 到 4K/5K 高清屏。小屏保持文字控件最小可读限制,大屏不再因窄范围 clamp 导致过小。
- SDDM/KWin 的 HiDPI 处理先于主题执行,因此主题使用的是逻辑分辨率,不重复乘以 devicePixelRatio。
多显示器缩放与居中原理
主题优先读取当前 SDDM QML view 的 root.width/root.height;只有 view 尺寸暂时不可用时,才回退到该 view 的 screenModel.geometry(0)。SDDM 为每个物理输出创建独立 view,因此每个 view 会独立计算自己的比例并完成界面居中:
uiScale = clamp(
min(logicalWidth / 1920, logicalHeight / 1080),
0.5,
2.5
)
这意味着:
- 不依赖 HDMI-A-1、HDMI-A-2 等输出名称;
- 显示器数量变化时仍然适用;
- 不同分辨率会得到不同的界面缩放;
- 4K 屏可能因为 SDDM HiDPI 显示为逻辑分辨率,这是预期行为;
- 主题缩放不会改变显示器的物理分辨率或刷新率。
检查当前 SDDM 输出:
journalctl -u display-manager --no-pager -b \
| rg 'Adding view|High-DPI|shizuka'
检查当前部署的主题缩放代码:
rg -n 'screenGeometry|screenWidth|screenHeight|uiScale' \
/run/current-system/sw/share/sddm/themes/shizuka/Main.qml
构建 HX90
Labwc-plus 是 flake.nix 中的锁定源码输入。第一次构建时 Nix 会按
flake.lock 自动下载对应提交并编译,无需单独克隆 labwc-plus:
cd ~/nixos-config
nixos-rebuild build --flake .#hx90
构建成功后应用:
sudo nixos-rebuild switch --flake .#hx90
要升级 labwc-plus 源码版本,单独更新这个输入并提交新的锁文件:
nix flake update labwc-plus
本机开发 labwc-plus 时,可以显式用 checkout 覆盖锁定输入进行构建:
nixos-rebuild build --flake ~/nixos-config#hx90 \
--override-input labwc-plus path:/
只有加载 NIXOS_CONFIG_LOCAL 指向的忽略文件时才需要 --impure;labwc-plus
的锁定源码本身不再依赖环境变量或本机绝对路径。
验证:
systemctl is-active display-manager
systemctl is-enabled display-manager
修改登录主题或 SDDM 配置后,通常在下一次返回登录界面时生效。不需要为了主题修改而重启机器。
登录与退出
-
SDDM 默认会话:labwc
-
从 Labwc 退出应返回 SDDM。
-
Labwc 的退出动作使用 labwc -e,不能使用 loginctl terminate-user,后者会连同用户会话一起终止,可能导致 SDDM 黑屏。
-
如果出现登录界面黑屏,先检查 display-manager、SDDM greeter 和 KWin 日志,不要立即重启:
systemctl status display-manager --no-pager journalctl -u display-manager -b --no-pager -n 200
Sunshine + Moonlight 远程桌面
HX90 运行 Sunshine,Mac 端使用 Moonlight。连接地址以当前 DHCP 地址为准,不应永久假设某个 IP。
在 Mac 上:
- 打开 Moonlight。
- 添加 HX90 当前 IP 或主机名。
- 选择 Desktop。
- Moonlight 显示 PIN 后,在浏览器打开 Sunshine Web UI。
- 在 Sunshine 的 PIN 页面输入 PIN,完成配对。
- 回到 Moonlight,启动 Desktop。
建议初始参数:
- 分辨率:使用 HX90 当前显示器可用的逻辑分辨率;
- 帧率:60 FPS;
- 编码:优先 HEVC,兼容性问题时改用 H.264;
- 码率:50–80 Mbps。
首次打开 Sunshine HTTPS 页面时,自签名证书提示属于正常现象。不要把 Sunshine 用户名、密码或 PIN 写入本文档。
如果地址变化,应先确认 HX90 身份和当前地址:
hostname
ip -brief address
建议在路由器上为 HX90 的 Wi-Fi MAC 配置 DHCP 固定租约。
路径与源码版本约定
配置中不应写入某个用户的绝对 home 路径,例如 /Users/tetsuya/...。Labwc-plus 版本由 flake lock 固定,不依赖开发机路径。
可选的环境变量:
NIXOS_CONFIG_LOCAL:加载 Git 忽略的本机模块;- NIX_CONFIG_ROOT:Nix 配置 checkout;
- DARWIN_HOME:nix-darwin 主用户 home 目录。
Labwc-plus 源码版本记录在 flake.lock,普通构建无需设置源码路径。
/run/current-system、/etc、/usr/bin 等系统标准路径属于 NixOS、systemd 或 macOS 的运行时约定,不是用户目录绑定路径,可以保留。
相关配置位置
- modules/desktop.nix:SDDM、Wayland greeter 和 Shizuka 主题打包;
- modules/labwc-plus.nix:Labwc-plus 包装与构建配置;
- modules/labwc.nix:Labwc 会话和用户配置;
- modules/desktop-runtime.nix:桌面运行时与兼容工具;
- hosts/hx90/configuration.nix:HX90 主机设置;
- modules/anchor-shell/plugins/panels/power/Panel.qml:图形电源面板退出动作;
- modules/labwc/labwc/scripts/system-menu:Labwc 系统菜单退出动作。