跳转至

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 --force
  • sudo 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. 验证建议(用户侧执行)

  1. 注销或重启后回到 SDDM 登录界面。
  2. 会话选择中明确选 Hyprland(不要选 Hyprland (uwsm-managed))。
  3. 输入密码登录,观察是否正常进入桌面。
  4. 若仍异常,立即采集:
  5. ~/.cache/wayland-errors
  6. journalctl -u sddm -b --no-pager
  7. journalctl --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 二次修复内容

  1. 新增脚本:
  2. ~/.config/hypr/UserScripts/StartXDGAutostartServices.sh
  3. 作用:在非 uwsm 会话中显式启动 app-*@autostart.service,恢复 XDG 自启动行为。
  4. 将脚本接入 Hyprland 启动项:
  5. 文件:~/.config/hypr/UserConfigs/Startup_Apps.conf
  6. 新增: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。
  • 提供用户本机执行命令:
    1. sudo systemctl disable --now warp-svc.service
    2. sudo 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 修复过程

  1. 先移除 Startup_Apps.conf 中对 swaync 的重复启动路径(避免双启动)。
  2. 尝试改为 systemctl --user start swaync.service 管理,但在当前环境中仍受旧实例抢占影响。
  3. 最终采用稳定单实例策略(登录时先清理旧实例,再启动新实例):
  4. 在 ~/.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 命令。