Fedora 43 Hyprland 登录黑屏问题报告(2026-03-03)¶
1. 问题概述¶
- 系统:Fedora Linux 43 (Workstation Edition)
- 显示管理器:SDDM(
/usr/lib/systemd/system/sddm.service) - 现象:在登录界面选择 Hyprland,输入密码后黑屏卡住,无法进入桌面。
- 对比:GNOME 可正常登录;TTY(
Ctrl+Alt+F2)手动执行Hyprland可进入桌面。 - 用户已尝试:
sudo akmods --forcesudo dracut --force- 二者无报错,但未解决问题。
2. 关键排查结论¶
2.1 会话冲突线索¶
从 ~/.cache/wayland-errors 读取到明确报错:
- A compositor or graphical-session* target is already active!
该报错典型指向:会话被重复启动或会话管理器路径冲突(常见于 uwsm 管理会话与普通会话混用)。
2.2 SDDM 可用会话检查¶
系统中同时存在以下 Wayland 会话入口:
- /usr/share/wayland-sessions/hyprland.desktop
- Exec=Hyprland
- /usr/share/wayland-sessions/hyprland-uwsm.desktop
- Exec=uwsm start -- hyprland.desktop
这意味着登录界面可能选择到了 Hyprland (uwsm-managed),与当前用户配置形成冲突。
2.3 用户会话异常自启动¶
用户 systemd --user 中发现:
- bongocat.service 被启用,并且持续失败重启。
- 错误为可执行文件不存在:
- /home/chesszyh/Downloads/wayland-vpets/build/bongocat-all: No such file or directory
此类高频失败重启会污染图形会话启动阶段,增加黑屏概率。
2.4 环境变量污染¶
文件 ~/.config/environment.d/90-hyprland-portal.conf 原先含有:
- XDG_CURRENT_DESKTOP=Hyprland
- XDG_SESSION_TYPE=wayland
- GTK_USE_PORTAL=1
前两项属于桌面会话上下文变量,不适合在全局 environment.d 中强制写死,可能干扰 SDDM 会话判定和 portal/session 行为。
3. 已实施修复¶
3.1 禁用异常服务¶
执行:
- systemctl --user disable --now bongocat.service
- systemctl --user reset-failed bongocat.service
结果:
- bongocat.service 已从用户默认 target 中移除,不再参与登录阶段。
3.2 修复环境变量文件¶
将 ~/.config/environment.d/90-hyprland-portal.conf 改为仅保留:
- GTK_USE_PORTAL=1
移除了:
- XDG_CURRENT_DESKTOP=Hyprland
- XDG_SESSION_TYPE=wayland
备份已保存:
- ~/.local/state/hypr-fix-backup/90-hyprland-portal.conf.bak.2026-03-03-234955
3.3 固定 SDDM 默认会话为非 uwsm 版本¶
创建 ~/.dmrc:
[Desktop]
Session=hyprland.desktop
目的:避免默认进入 hyprland-uwsm.desktop 引发“会话已激活”的冲突。
4. 本次修复涉及的文件¶
- 修改:
/home/chesszyh/.config/environment.d/90-hyprland-portal.conf - 新建:
/home/chesszyh/.dmrc - 备份:
/home/chesszyh/.local/state/hypr-fix-backup/90-hyprland-portal.conf.bak.2026-03-03-234955
5. 验证建议(用户侧执行)¶
- 注销或重启后回到 SDDM 登录界面。
- 会话选择中明确选
Hyprland(不要选Hyprland (uwsm-managed))。 - 输入密码登录,观察是否正常进入桌面。
- 若仍异常,立即采集:
~/.cache/wayland-errorsjournalctl -u sddm -b --no-pagerjournalctl --user -b --no-pager | rg -i 'hypr|uwsm|portal|failed|error'
6. 回滚方案¶
若需要恢复本次修改:
1. 还原环境变量文件:
- cp ~/.local/state/hypr-fix-backup/90-hyprland-portal.conf.bak.2026-03-03-234955 ~/.config/environment.d/90-hyprland-portal.conf
2. 删除默认会话锁定:
- rm -f ~/.dmrc
3. (可选)重新启用 bongocat:
- systemctl --user enable --now bongocat.service
- 仅当其 ExecStart 指向的可执行文件真实存在时再启用。
7. 风险与后续建议¶
- 若未来需要使用
uwsm,建议统一为hyprland-uwsm.desktop路径,并清理与普通Hyprland启动路径的混用配置。 - 自启动项中任何
systemd --user服务应确保ExecStart路径可用,避免登录时重启风暴。 - NVIDIA 驱动问题本次未出现直接证据;当前症状更符合“会话管理/启动链路冲突”。如后续仍有黑屏,再补采 DRM/GBM/EGL 层日志做二次诊断。
8. 安全备注¶
- 本次沟通中曾明文提供 root 密码。建议尽快修改 root 密码,并避免在聊天记录中直接发送敏感凭据。
9. 后续问题与二次修复(2026-03-04)¶
9.1 新现象¶
- 在确认使用
Hyprland(非Hyprland (uwsm-managed))后,黑屏问题消失且桌面加载速度明显提升。 - 但出现新问题:
fcitx5与部分通过 gnome-tweaks 配置的“开机自启动”程序未自动启动。
9.2 原因分析¶
uwsm-managed会话会触发wayland-session-xdg-autostart@...等目标,从而由 systemd 接管 XDG autostart。- 直接
Hyprland启动路径不一定触发这套 target,因此~/.config/autostart/*.desktop(以及对应生成的app-*@autostart.service)不会自动拉起。
9.3 二次修复内容¶
- 新增脚本:
~/.config/hypr/UserScripts/StartXDGAutostartServices.sh- 作用:在非 uwsm 会话中显式启动
app-*@autostart.service,恢复 XDG 自启动行为。 - 将脚本接入 Hyprland 启动项:
- 文件:
~/.config/hypr/UserConfigs/Startup_Apps.conf - 新增:
exec-once = bash -lc '$UserScripts/StartXDGAutostartServices.sh &'
9.4 验证结果¶
- 用户反馈:该修复已成功,
fcitx5和自启动行为恢复正常。
10. 额外清理项(2026-03-04)¶
10.1 Snipaste 自启动残留问题¶
- 现象:在 gnome-tweaks 删除后仍显示 Snipaste,图标为禁止符号。
- 原因:
~/.config/autostart/appimagekit_...-Snipaste.desktop条目仍存在,且 AppImage 文件缺失导致TryExec失效。 - 处理:删除该 desktop 条目文件。
10.2 bongocat systemd 用户配置清理¶
- 已删除:
~/.config/systemd/user/bongocat.service~/.config/systemd/user/default.target.wants/bongocat.service- 结果:bongocat 不再由用户级 systemd 管理或自启动。
10.3 Cloudflare Zero Trust(WARP)处理¶
- 已完成用户级“禁自启动”:
- 删除
~/.config/systemd/user/default.target.wants/warp-desktop-svc.service - 增加本地覆盖:
~/.config/autostart/com.cloudflare.WarpTaskbar.desktop- 内容含
Hidden=true与X-GNOME-Autostart-enabled=false
- 仍需管理员权限完成“彻底卸载”:
- 由于执行环境限制(
no new privileges),未能直接运行sudo dnf remove。 - 提供用户本机执行命令:
sudo systemctl disable --now warp-svc.servicesudo dnf remove -y cloudflare-warp
11. 当前状态总结¶
- Hyprland 登录黑屏:已解决。
- 非 uwsm 会话启动速度慢/黑屏:已改善(用户确认更快)。
- fcitx5 与 gnome-tweaks 自启动丢失:已解决。
- Snipaste 自启动残留:已清理。
- bongocat 异常服务:已彻底清理用户级配置。
- Cloudflare Zero Trust:已完成用户级禁自启动;系统级卸载待用户执行 sudo 命令完成。
12. 通知失效问题(2026-03-04)¶
12.1 现象¶
- 登录
Hyprland后,notify-send "test" "hello"无通知弹窗。 - 用户手动执行
systemctl --user restart swaync.service后,服务反复失败并触发Start request repeated too quickly。
12.2 排查证据¶
journalctl --user -u swaync.service持续出现:An instance of SwayNotificationCenter is already running!swaync.service: Main process exited, status=1/FAILURE- 进程检查发现存在“游离进程”:
swaync由PPID=1挂在会话中(非预期 systemd 单实例管理状态)。- 结论:通知总线已被旧
swaync占用,导致新实例(无论 autostart 还是 systemd service)启动失败。
12.3 修复过程¶
- 先移除
Startup_Apps.conf中对swaync的重复启动路径(避免双启动)。 - 尝试改为
systemctl --user start swaync.service管理,但在当前环境中仍受旧实例抢占影响。 - 最终采用稳定单实例策略(登录时先清理旧实例,再启动新实例):
- 在
~/.config/hypr/UserConfigs/Startup_Apps.conf中设置:exec-once = bash -lc 'pkill -x swaync 2>/dev/null || true; swaync &'
12.4 验证结果¶
- 用户反馈:该方案生效,通知恢复正常。
- 结论:此次通知故障根因是
swaync旧实例残留导致的实例冲突,而非notify-send本身故障。
13. 最新最终状态¶
- 登录黑屏问题:已解决。
- 非 uwsm 下自启动(fcitx5 与 gnome-tweaks 项):已恢复。
- 通知系统(notify-send/swaync):已恢复。
- Snipaste 残留自启动:已清理。
- bongocat 用户级 systemd 配置:已移除。
- Cloudflare WARP:用户级禁自启动已完成;系统级卸载需用户执行 sudo 命令。