目录
本文前三部分主要是详细解答,面向新手。如果是老手直接看第四部分究极干货即可。
一、VNC无法使用的问题
在树莓派最近的官方系统中(Rasberry Pi OS 2023.10月及12月更新)已经由原先的Debian11更换为Debian12(Bullseye→Bookworm)在树莓派4 和 5 上从 X11 过渡到 Wayfire Wayland 合成器:
Debian系统Wayland的Wiki页面https://wiki.debian.org/Wayland
不过目前常用的RealVNC还没有支持Wayland,所以导致VNC无法显示树莓派的桌面,只有传输文件能用。


二、解决原理
所以我们只需要禁用Wayland,启用原来的x11。
Wayland比x11更快更安全,不过目前不能搭配RealVNC使用,如果一定要使用使用RealVNC的话直接换回x11就OK,后续等RealVNC支持了Wayland再切回来。
具体详细可以参考CSDN上的另一篇文章:
Linux 上的 Wayland 是什么?它与 X 有何不同?https://blog.csdn.net/weixin_43223083/article/details/132858179
或者不怕麻烦的话也可以试试这个办法:Connecting to WayVNC on a Raspberry Pi device running Wayland using RealVNC Viewer – RealVNC Help Center
三、操作流程
如果你没有给树莓派单独连接显示器以及鼠标键盘的话,那就用SSH登录到树莓派,这里我们使用PuTTY(有显示器当然更好,直接在树莓派自身系统内的终端操作就行,效果一样)
PuTTY官网(下载地址)
安装后打开PuTTY,输入树莓派的IP地址,前提是需要把树莓派和你需要使用VNC的电脑接入到同一局域网内(除非你能把树莓派接到公网上用公网IP访问,算你牛)
1、查看IP地址
有以下几种方式:
(1)如果你的树莓派单独连接了显示器
在树莓派终端(可以同时按ctrl+alt+T快速唤出)中输入并按enter键回车:
ifconfig
回车后在终端会有输出,这时候有这几种情况。
如果是使用网线将树莓派接入网络
那么在输出的第一部分eth0中会找到树莓派当前的IP地址
如果是使用无线网络将树莓派接入网络
那么第输出的第三部分waln0中,第二行 inet后紧跟的就是树莓派当前的IP地址
一般格式为:192.168.XX.XX
(2)如果树莓派连接的是你家中的路由器
到路由器的管理页面可以查看树莓派的IP地址
(3)如果是使用电脑热点给树莓派共享网络
以windows系统为例,到设置中移动热点部分可以看到树莓派的IP地址
2、PuTTY连接到树莓派
如果你使用单独的显示器连接,那么直接在树莓派系统内的终端(同时按ctrl+alt+T快速唤出)使用命令行即可,效果是一样的。
输入查看到的IP地址后,点击Open,如果有弹窗,就点accept。
会进入如下页面,输入你的树莓派系统账户用户名,回车。然后会要求输入密码,直接在键盘上键入即可,虽然终端中不会显示,其实已经在输入了,输入后回车。
登录成功会有如下输出:
接着输入如下代码并回车:
sudo raspi-config
用键盘上的方向键使红色条移动到Advanced Options回车
再移动到Wayland回车
再移动到X11回车
出现如下界面
按OK后按esc键退回到初始的页面进入Interface Option
进入VNC
问你是否enable VNC,键盘方向键选到Yes上回车
出现如下输出就是正常:
接着一路按esc键退回到初始的终端页面
输入如下代码并回车
sudo systemctl enable vncserver-x11-serviced.service
再输入如下代码并回车
sudo systemctl start vncserver-x11-serviced.service
再把树莓派重启一下就OK了,可以用如下命令:
sudo reboot
如果你有单独的显示器,也能看到再开机右上角就会有一个RealVNC的图标
这时候在电脑的RealVNC软件中输入树莓派的IP地址(需要确保重启后树莓派已经连上网络,并且IP配置正确)并回车,就可以成功连接树莓派VNC了,不好使的话重新看一下树莓派的IP,重启后是不是变了,如果变了就用新IP

四、究极干货版解决流程
在终端中输入:
sudo raspi-config
之后选到:
Advanced Options→Wayland→X11
(记得还要把VNC打开)
Interface Options→VNC
终端中再输入:
sudo systemctl enable vncserver-x11-serviced.service
也可以:
sudo systemctl start vncserver-x11-serviced.service
如果不好使就再重启一下就行了