VNC 黑屏的原因

最后发布时间:2026-06-21 18:24:20 浏览量:

是的,这段启动脚本很可能就是导致 VNC 黑屏的原因之一。

你当前启动的是:

#!/bin/sh
export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
export XDG_MENU_PREFIX="gnome-flashback-"

gnome-session \
    --session=gnome-flashback-metacity \
    --disable-acceleration-check &

问题1:GNOME Flashback 在 VNC 环境兼容性较差

很多服务器环境:

Ubuntu Server
TigerVNC
x11vnc
Xvnc
Docker

运行:

gnome-session

经常出现:

黑屏
只有鼠标
只有背景
无限加载

因为:

gnome-settings-daemon
dbus
systemd user session

没有正常启动。


问题2:脚本直接退出

你的脚本最后是:

gnome-session ... &

注意最后有:

&

意味着:

gnome-session后台运行
脚本立即结束

很多 VNC Server(尤其 TigerVNC)会认为:

xstartup结束
=> 会话结束

然后出现黑屏。

正确写法

不要放后台:

#!/bin/sh

export XKL_XMODMAP_DISABLE=1
export XDG_CURRENT_DESKTOP="GNOME-Flashback:GNOME"
export XDG_MENU_PREFIX="gnome-flashback-"

exec gnome-session \
    --session=gnome-flashback-metacity \
    --disable-acceleration-check

或者:

gnome-session \
    --session=gnome-flashback-metacity \
    --disable-acceleration-check

问题3:缺少 DBUS

检查:

echo $DBUS_SESSION_BUS_ADDRESS

如果为空:

<empty>

GNOME 大概率无法正常启动。

解决:

exec dbus-launch --exit-with-session \
     gnome-session \
     --session=gnome-flashback-metacity

问题4:GNOME Flashback 组件未安装完整

检查:

dpkg -l | grep flashback

应至少有:

gnome-session-flashback
metacity
gnome-panel

否则会启动失败。


推荐排查

先看日志:

cat ~/.vnc/*.log

重点关注:

gnome-session-binary
metacity
dbus

错误。

例如:

Failed to connect to session bus
Could not acquire name org.gnome.SessionManager
metacity exited with code 1

最稳妥的方案

如果这是服务器、Docker、SealSkin、noVNC 场景,我不建议用 GNOME。

改用 XFCE:

sudo apt install xfce4 xfce4-goodies

~/.vnc/xstartup

#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

exec startxfce4

赋权:

chmod +x ~/.vnc/xstartup

重启:

vncserver -kill :1
vncserver :1

XFCE 在:

  • TigerVNC
  • noVNC
  • Docker
  • KasmVNC
  • SealSkin

环境下稳定性远高于 GNOME Flashback。


建议先执行:

cat ~/.vnc/*.log | tail -100

把最后 100 行日志发出来,我基本可以直接定位到底是:

  1. xstartup 提前退出;
  2. dbus 缺失;
  3. gnome-session 启动失败;
  4. metacity 崩溃;

这几种情况中的哪一种。