一、问题现象
在树莓派上执行 MHS35-show 脚本后,3.5 寸小屏可能可以正常显示,但原本可用的 VNC 远程桌面连接失效,表现通常包括:
- VNC 客户端无法连接到树莓派
- 可以 ping 通树莓派,但 VNC 黑屏或连接失败
- SSH 仍然可以连接,但图形桌面无法远程访问
- 系统启动后只进入命令行界面,没有桌面环境
二、核心原因
MHS35-show 并不只是“安装一个屏幕驱动”,它会直接修改树莓派的显示配置,使系统从默认的图形显示路径切换到适配 3.5 寸 SPI 小屏的一套旧式显示方案。
这会影响 VNC 正常工作。
1. 修改了 /boot/config.txt 或显示相关配置
该脚本通常会写入类似如下参数:
dtoverlay=mhs35
dtparam=spi=on
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt 480 320 60 6 0 0 0
这些设置会改变树莓派原本的显示输出方式。
2. 使用旧式 framebuffer / fbcp / fbturbo 方案
MHS35-show 常会安装或启用以下兼容组件:
fbcpfbturbo- SPI framebuffer 驱动
这类方案本质上是把桌面内容“复制”到 SPI 小屏,而不是走现在更标准的 DRM / KMS / Wayland 图形栈。
3. VNC 依赖正常的图形桌面会话
树莓派上的 VNC 不是简单地抓取任意 framebuffer,而是依赖系统能够正常启动图形桌面环境。
一旦 MHS35-show 导致以下情况,VNC 就会失效:
- 图形桌面没有成功启动
- 显示输出被切换到 VNC 不支持的方式
- 新版系统的显示架构与旧驱动脚本不兼容
三、为什么 SSH 还能连,但 VNC 连不上
这是这类问题中最常见的现象。
原因是:
- SSH 只依赖网络和系统服务,哪怕系统没有图形界面,也通常还能连接
- VNC 依赖图形桌面环境,如果桌面没有正常运行,VNC 就无法共享桌面
因此:
SSH 能连,并不代表图形系统正常;很可能只是桌面已经被
MHS35-show改坏了。
四、最常见的几种具体情况
情况 1:系统没有进入桌面,只进入命令行
如果安装 MHS35-show 后系统启动进入终端文本界面,而不是图形桌面,那么 VNC 无法提供远程桌面。
情况 2:VNC 服务还在,但抓不到有效桌面
即使 VNC 服务本身仍然开启,只要显示输出方式已经被切换到旧式 framebuffer,VNC 也可能无法抓取正确画面。
情况 3:新版 Raspberry Pi OS 与旧驱动脚本不兼容
如果你使用的是较新的 Raspberry Pi OS(尤其是 Bullseye / Bookworm 及之后的版本),MHS35-show 这种旧式 LCD 驱动脚本与当前桌面显示架构常常存在兼容性问题。
五、排查思路
建议先通过 SSH 登录树莓派,然后依次检查。
1. 检查设备是否在线
ping raspberrypi.local
或者:
ssh 用户名@raspberrypi.local
2. 检查图形桌面服务状态
systemctl status display-manager --no-pager
如果这里显示桌面管理器未启动、启动失败或报错,说明图形界面本身已经有问题。
3. 检查当前会话类型
echo $XDG_SESSION_TYPE
它可能返回:
x11wayland- 空值
如果没有正常图形会话,VNC 通常也无法工作。
4. 检查启动配置文件
较老系统通常看:
cat /boot/config.txt
较新系统有时是:
cat /boot/firmware/config.txt
重点看是否存在:
dtoverlay=mhs35
hdmi_force_hotplug=1
hdmi_group=2
hdmi_mode=87
hdmi_cvt 480 320 60 6 0 0 0
如果这些参数已经写入,基本可以确认 MHS35-show 已经接管了显示配置。
5. 检查 VNC 是否启用
sudo raspi-config nonint do_vnc 0
这条命令会启用 VNC。
你也可以查看相关服务状态,但很多时候即使服务开着,只要桌面本身异常,VNC 仍然无法正常使用。
六、解决思路
方案一:先恢复默认显示配置,再测试 VNC
这是最稳妥的办法。
你可以先把 config.txt 中由 MHS35-show 添加的内容注释或删除,例如:
# dtoverlay=mhs35
# hdmi_force_hotplug=1
# hdmi_group=2
# hdmi_mode=87
# hdmi_cvt 480 320 60 6 0 0 0
保存后重启:
sudo reboot
然后重新测试:
- 是否恢复正常桌面
- VNC 是否可连接
方案二:重新启用图形桌面和 VNC
如果系统只是掉回了命令行模式,可以尝试重新设置启动到桌面:
sudo raspi-config
进入后检查:
- 是否设置为启动到 Desktop
- 是否启用了 VNC
也可以直接执行:
sudo raspi-config nonint do_vnc 0
方案三:不要继续使用这类旧式 LCD-show 脚本
如果你使用的是较新的树莓派系统版本,建议尽量避免继续依赖 LCD-show / MHS35-show 这一类老脚本。
原因是:
- 它们大量依赖旧式 framebuffer 技术
- 与当前 Raspberry Pi OS 的图形架构兼容性较差
- 很容易破坏 HDMI、桌面环境和 VNC
- 出问题后恢复成本较高
如果必须使用这块 3.5 寸小屏,更建议查找:
- 该屏幕针对当前 Raspberry Pi OS 版本的新版驱动
- 是否支持更标准的 DRM/KMS 显示方式
- 是否有专门适配 Bookworm/Bullseye 的安装方法
七、结论
树莓派在执行 MHS35-show 之后无法使用 VNC,根本原因通常不是网络问题,而是:
MHS35-show修改了系统显示栈,使图形桌面不再以 VNC 可识别的标准方式运行。
因此 VNC 失效通常来自以下几个方面之一:
- 图形桌面未成功启动
- 显示输出改成了旧 framebuffer 方式
- 新系统与旧小屏驱动不兼容
- VNC 服务虽然开启,但没有可共享的有效桌面
八、建议的实际处理顺序
建议按下面顺序操作:
- 先确认树莓派还能通过 SSH 登录
- 检查
display-manager是否正常 - 检查
/boot/config.txt或/boot/firmware/config.txt - 暂时移除
dtoverlay=mhs35等配置 - 重启测试桌面是否恢复
- 重新启用 VNC
- 确认系统版本后,再决定是否继续使用该小屏驱动
九、可直接执行的命令汇总
# 连接树莓派
ssh 用户名@raspberrypi.local
# 查看桌面服务状态
systemctl status display-manager --no-pager
# 查看当前会话类型
echo $XDG_SESSION_TYPE
# 查看显示配置(老系统)
cat /boot/config.txt
# 查看显示配置(新系统)
cat /boot/firmware/config.txt
# 启用 VNC
sudo raspi-config nonint do_vnc 0
# 重启
sudo reboot
十、补充说明
如果你愿意进一步排查,最有价值的是把下面三项结果贴出来:
cat /boot/config.txt
# 或
cat /boot/firmware/config.txt
systemctl status display-manager --no-pager
echo $XDG_SESSION_TYPE
有了这三项,通常就能进一步判断到底是:
- GUI 没启动
- VNC 没开启
- 还是
MHS35-show与当前系统显示架构冲突
sudo ./LCD-hdmi
sudo raspi-config nonint do_vnc 0