Ubuntu Server需先安装桌面环境(GNOME或Xfce),再选配VNC服务端(tightvncserver或RealVNC),最后正确配置xstartup、端口、加密及认证,缺一不可。

Ubuntu Server 默认没图形界面,也没开VNC;直接装 tightvncserver 或启 vncserver-x11-serviced 都可能连不上——根本原因是桌面环境缺失、会话未初始化、或加密协议不匹配。得按顺序补全这三块,否则白折腾。
先装桌面环境,别跳过这步
Server 版本默认只有命令行,VNC 没东西可传。GNOME(ubuntu-desktop)最稳,但吃资源;Xfce(xfce4)轻量,适合低配机器。
- 装 GNOME:
sudo apt install ubuntu-desktop -y,装完执行sudo systemctl set-default graphical.target再reboot - 装 Xfce:
sudo apt install xfce4 xfce4-goodies -y,不用改 target,后续靠 VNC 自己拉起会话 - 别用
startx临时启图形——VNC 不认这种裸 X session,会黑屏或报Failed to connect to session bus
选对 VNC 服务端,别混用配置
tightvncserver 和 vncserver-x11-serviced(RealVNC)启动方式、配置路径、日志位置全不同,混着试只会让 .vnc/xstartup 和 /etc/vnc/conf.d/ 越来越乱。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 用
tightvncserver(推荐新手):vncserver :1启动后自动生成~/.vnc/xstartup,必须手动改成startxfce4 &或gnome-session &,再chmod +x ~/.vnc/xstartup - 用 RealVNC(
vncserver-x11-serviced):它绑定 GNOME 原生会话,不读xstartup,但要求用户已成功登录过一次图形界面,否则报No session for user - 别在 root 下跑
vncserver(尤其 TightVNC):它默认写/root/.vnc,但 GNOME 的 D-Bus session 不给 root 开,结果是桌面图标不响应、剪贴板失效
连不上?先盯住端口、加密、认证三处
常见现象是 VNC Viewer 显示“连接已关闭”或“加密级别不匹配”,90% 出在这三处。
- 端口:
:1→ 端口5901,不是5900;确认sudo ufw status放行了对应端口,云服务器还要检查安全组 - 加密:Ubuntu 22.04+ GNOME 默认禁用弱加密(如 TLS 1.0),RealVNC 客户端需勾选“Use TLS encryption”,TightVNC 则要加参数
-SecurityTypes VncAuth或改vncserver启动脚本 - 认证:
vncpasswd设的密码只用于 VNC 协议层,真正登录桌面时还要输系统用户名密码(GNOME)或直接进桌面(Xfce);如果卡在登录框,大概率是xstartup没正确调起桌面管理器
systemd 自启容易漏掉用户环境变量
写好 vncserver@.service 后,sudo systemctl start vncserver@:1 可能启动失败,日志里看到 Cannot open display 或 XDG_RUNTIME_DIR not set。
- 关键点:systemd 用户服务不能直接继承 shell 的
$HOME和$DISPLAY,必须显式声明Environment="HOME=/home/youruser"和Type=simple(不是 forking) - 更稳妥的做法:用
sudo -u youruser vncserver :1手动测试通了,再套 systemd;别图省事直接User=root,root 下 GNOME 会话根本起不来 - 每次改完
xstartup或 service 文件,记得sudo systemctl daemon-reload,否则 reload 不生效
最常被忽略的是:VNC 启动的桌面会话和你本地登录的 GNOME 是两个隔离环境,~/.bashrc 里的 alias、PATH、代理设置默认不加载;需要在 xstartup 里显式 source ~/.bashrc 或把关键变量写死进去。

















