在Ubuntu 24.04或很多新版本linux中禁用Wayland以实现VNC连接
可能有很多用户在Ubuntu或其他较新的linux发行版中有过安装 VNC的失败经历,我也碰到了,因为这个原因,我在前段时间都放弃了升级到新版本的想法,不过在AI的帮助下,现在大概率是找到了主要原因,分享一下,希望能有帮助,感谢AI。
首先,说一下我的问题,主要是因为所选桌面GNOME的关系,更准确地说,是没有正确配置为VNC兼容的方式,即禁用Wayland。为什么说这个失败和桌面选择也有关系呢?因为GNOME也在新版本中使用Wayland作为默认管理器。 据我所知,有一些桌面还在继续使用X11,比如Xfce,但确实有很多桌面系统都将Wayland作为默认管理器。
Wayland是什么? 简单地说,它是和X11类似的显示窗口管理器。 目前它大有取代X服务的趋势,很多Linux已经将Wayland作为默认的显示窗口服务器,然而目前很多传统的VNC软件还都处在支持X服务器的阶段,或许准确点说Wayland的安全机制不允许传统的VNC服务端直接抓屏和输入注入的方式。
有人可能会问,没有支持Wayland的VNC工具或远程工具吗? 我想应该是有的,我也了解到有一个叫Wayvnc的工具,但这个不在这篇文章的范围内,有兴趣的朋友可以自行了解。
好了, 正式开始。
- 如何确认你目前的系统显示窗口管理用了哪个呢?
- 如果在目标机的桌面系统中操作,那么您可以在终端直接输入
echo$XDG_SESSION_TYPE输出应该能看到是X11还是Wayland
- 如果你是通过ssh远程到目的机器上的,那么可以使用下面的指令
loginctl show-session$(loginctl|grep"$USER"|awk'{print $1}')-pType则应当能在输出中看到有tty,以及另外的一个输出,X11或者Wayland
如果您在第一步的输出中,看到了Wayland,那么这篇文章很可能能帮到你,如果没有看到Wayland,那大概率您不需要继续看了,这篇文章大概率不适合您的情况
- 禁用Wayland (关键步骤)
如下指令在Ubuntu 24.04中适用,其他发行版和版本可做参考。
sudonano/etc/gdm3/custom.conf添加如下一行, 或找到这一行取消注释
[daemon]WaylandEnable=false保存后,必须重启
sudoreboot重新登录,用第一步中的方法确认Wayland是否已经被禁用了。
loginctl show-session$(loginctl|grep"$USER"|awk'{print $1}')-pType- 禁用Wayland (关键步骤)
安装桌面和TigerVNC
sudoaptupdatesudoaptinstallubuntu-desktop tigervnc-standalone-server tigervnc-common-y验证安装:
vncserver--versionUbuntu 24.04 应显示 TigerVNC 1.13.x, 其他版本请自行参考。
4.设置 VNC 密码
vncpasswd按提示设置连接密码(注意 VNC 协议只识别前 8 位字符)。建议不设置 view-only 密码(输入 n)。
5. 创建 GNOME 专用的 xstartup 脚本
mkdir-p~/.vncnano~/.vnc/xstartup并写入以下内容(这是 GNOME 在 VNC 下成功启动的关键):
#!/bin/bashunsetSESSION_MANAGERunsetDBUS_SESSION_BUS_ADDRESSexecdbus-run-session -- gnome-session赋予执行权限:
chmod+x ~/.vnc/xstartup说明:dbus-run-session – gnome-session 是 Ubuntu 24.04 下让 GNOME 在虚拟 X 会话中正确初始化的必要方式,直接调用 gnome-session 通常会黑屏或闪退。
- 启动并测试 VNC
先确保没有残留会话:
vncserver-kill:12>/dev/null;sleep1启动(绑定到 localhost,仅允许 SSH 隧道访问):
vncserver :1-geometry1920x1080-depth24-localhostyes检查是否运行:
vncserver-listss-tlnp|grep5901你应该看到 127.0.0.1:5901 处于监听状态。
- 通过 SSH Tunnel Connection(安全做法)
建立SSH隧道是在你的VNC viewer所在的机器端,因为我使用的是装有Windows的PC机作为客户端,使用TightVNC viewer作为VNC viewer, 结合AI推荐的方式,我选择了使用windows版本的putty建立隧道连接,然后通过 TightVNC viewer连接 TigerVNC server.
在VNC viewer端,使用 PuTTY等工具进行隧道连接配置,然后保存。 - 安装PuTTY,这是 Windows 上最稳妥的方式:
- 打开 PuTTY
- Session 页:填入服务器 IP,端口 22
- 左侧展开 Connection → SSH → Tunnels
- Source port 填:59000
- Destination 填:localhost:5901
- 点击 Add
- 回到 Session 页,给会话起个名字(如 vnc-tunnel),点击 Save
- 点击 Open,输入用户名密码登录
- 保持 PuTTY 窗口开着,
建立隧道后,在 Windows的cmd窗口执行:
telnet localhost59000**
最后在你的Windows PC端,**打开 TightVNC Viewer,连接 localhost:59000,理论上您就可以连接上去了。
localhost:59000