ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

【Ubuntu 24.04或很多新版本linux中禁用Wayland以实现VNC连接】

【Ubuntu 24.04或很多新版本linux中禁用Wayland以实现VNC连接】

在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的工具,但这个不在这篇文章的范围内,有兴趣的朋友可以自行了解。

好了, 正式开始。

  1. 如何确认你目前的系统显示窗口管理用了哪个呢?
  • 如果在目标机的桌面系统中操作,那么您可以在终端直接输入
echo$XDG_SESSION_TYPE

输出应该能看到是X11还是Wayland

  • 如果你是通过ssh远程到目的机器上的,那么可以使用下面的指令
loginctl show-session$(loginctl|grep"$USER"|awk'{print $1}')-pType

则应当能在输出中看到有tty,以及另外的一个输出,X11或者Wayland

如果您在第一步的输出中,看到了Wayland,那么这篇文章很可能能帮到你,如果没有看到Wayland,那大概率您不需要继续看了,这篇文章大概率不适合您的情况

  1. 禁用Wayland (关键步骤)
    如下指令在Ubuntu 24.04中适用,其他发行版和版本可做参考。
sudonano/etc/gdm3/custom.conf

添加如下一行, 或找到这一行取消注释

[daemon]WaylandEnable=false

保存后,必须重启

sudoreboot

重新登录,用第一步中的方法确认Wayland是否已经被禁用了。

loginctl show-session$(loginctl|grep"$USER"|awk'{print $1}')-pType
  1. 禁用Wayland (关键步骤)
    安装桌面和TigerVNC
sudoaptupdatesudoaptinstallubuntu-desktop tigervnc-standalone-server tigervnc-common-y

验证安装:

vncserver--version

Ubuntu 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 通常会黑屏或闪退。

  1. 启动并测试 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

返回列表