Skip to content

Jetson suspend 后 HDMI 黑屏

现象

算力舱执行 suspend 后可以从网络上恢复,SSH 和系统服务正常,但 HDMI 显示器上的 Ubuntu 桌面没有恢复,屏幕保持黑屏。

典型表现:

  • 可以通过 ssh nvidia@<设备 IP> 登录设备。
  • gdmdisplay-manager 仍然是 active
  • X11 会话仍然存在。
  • HDMI 显示器可以被识别,例如 xrandr 仍显示 HDMI-0 connected
  • 本地 HDMI 画面黑屏,GNOME 桌面没有正常渲染。

排查命令

通过 SSH 登录设备:

bash
ssh nvidia@192.168.1.221

查看系统版本:

bash
cat /etc/nv_tegra_release
uname -a

查看图形服务状态:

bash
systemctl status gdm --no-pager
systemctl status display-manager --no-pager
loginctl list-sessions

查看 HDMI 输出状态:

bash
export DISPLAY=:0
export XAUTHORITY=/run/user/1000/gdm/Xauthority
xrandr --current

查看 suspend/resume 和图形栈相关日志:

bash
journalctl -b --no-pager | egrep -i "suspend|resume|PM:|gnome-shell|mutter|Xorg|nvgpu|semaphore|error notifier" | tail -n 200

如果日志中出现类似内容,通常说明系统已经恢复,但 NVIDIA 图形栈或 GNOME Shell 没有正常恢复:

text
nvgpu ... semaphore acquire timeout
nvgpu ... error notifier set to 24 ... owned by gnome-shell
gnome-shell / mutter DisplayConfig timeout

原因

这个问题不是整机没有从 suspend 中醒来,而是图形栈恢复异常。

在 Jetson Linux R36.4.3 / JetPack 6.2 环境中,suspend/resume 后可能出现 NVIDIA nvgpu、Xorg、GNOME Shell / Mutter 状态不一致。系统、网络和服务已经恢复,但 HDMI 桌面没有重新渲染,最终表现为黑屏。

NVIDIA 论坛中也有 R36.4.3 / JetPack 6.2 上 HDMI resume 黑屏的已知问题记录,长期建议升级到 Jetson Linux R36.5 / JetPack 6.2.2 或更新版本。

参考:

临时方案一:手动重启 gdm

黑屏后,如果 SSH 还能登录,可以手动重启图形登录服务:

bash
sudo systemctl restart gdm

也可以使用通用服务名:

bash
sudo systemctl restart display-manager

这个操作会重启 HDMI 上的本地图形会话,当前桌面里的应用会被中断。

临时方案二:resume 后自动重启 gdm

如果暂时不能升级系统,但希望每次从 suspend 恢复后自动把桌面拉起来,可以添加 systemd sleep hook:

bash
sudo tee /lib/systemd/system-sleep/restart-gdm-after-resume >/dev/null <<'EOF'
#!/bin/sh
case "$1" in
  post)
    systemctl restart gdm
    ;;
esac
EOF

sudo chmod +x /lib/systemd/system-sleep/restart-gdm-after-resume

删除这个临时方案:

bash
sudo rm -f /lib/systemd/system-sleep/restart-gdm-after-resume

注意:这个方案只是绕过问题。每次 resume 后都会重启本地图形会话。

临时方案三:禁用休眠

如果设备主要作为服务设备运行,不依赖本地 HDMI 桌面,最稳的临时处理是禁用 sleep / suspend,避免再次触发黑屏:

bash
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

验证:

bash
systemctl status sleep.target suspend.target hibernate.target hybrid-sleep.target

恢复休眠能力:

bash
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target

长期方案

升级到 Jetson Linux R36.5 / JetPack 6.2.2 或更新版本,并重新验证 suspend/resume 后 HDMI 桌面是否恢复。