Lubuntu 16.04 LTS 在 Banana Pro 上无头运行,从LeMaker 的官方图像开始。在对 32GB 的 SD 卡进行映像后,我将系统分区从 ~3.7GB 扩展以填充卡,然后第一次启动并遵循以下伪代码:
do
# Boot and SSH in
ssh bananapi@<ip_address>
bananapi
# Initial Setup on SSH
sudo su
bananapi
apt-get update
apt-get dist-upgrade -y # let it do everything it wants
apt-get autoremove -y
nano /etc/sudoers # add bananapi back in, copying root
nano /etc/update-manager/release-upgrades # set the desired option here
do-release-upgrade # let it do everything it wants, including reboot
while(do-release-upgrade did something)
apt-get install x11vnc -y
x11vnc -storepasswd ******** /etc/x11vnc.pass
nano /etc/rc.local
/etc/rc.local
包括以下行:
/usr/bin/x11vnc -noxrecord -shared -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -bg -o /var/log/x11vnc.log
当它完成重启后,我在不同 Windows 和 Lubuntu 机器上的 VNC 客户端可以连接到它并控制它。我完成了设置,使用了 VNC/GUI 调整的组合、用于轻松复制/粘贴的 SSH 以及用于预制脚本和源代码的 sFTP 以在 Pi 上构建,然后再次重新启动。
当它恢复时,我重新连接了一个 VNC 客户端,一切似乎都很好。但过了一段时间,我注意到 VNC 窗口没有响应。不仅是只读的,而且时钟甚至都没有改变。这在 Windows 和 Linux 客户端之间也是一致的。新连接的客户端立即显示相同的问题:连接成功,但显示过时的屏幕截图,没有任何响应。
到此时,完成所有设置后,当系统切换到电池电源时,我有一个自动关机脚本(记住这是无头的),所以我仍然可以通过拔下 AC 插头优雅地关闭它。当它恢复时,VNC 再次工作......一段时间。我还注意到,即使 VNC 发生故障,SSH 和 WiFi 接入点仍然可以工作,所以这不是一个完整的系统故障。只是VNC。
这个问题在 16.04 和原来的 14.04 镜像上是一样的,只是包升级,除了 LeMaker 实际上还没有发布官方的 16.04 镜像。
有任何想法吗?
我终于想通了!感谢这个关于不同机器上不同 VNC 服务器的线程以及使用 Pi 的一些偶然事件:
https://forum.ultravnc.net/viewtopic.php?f=3&t=31898
基本上问题是VNC服务器继续读取不再更新的显示缓冲区,因为视频内容已关闭。在上面的线程中,那是因为我关闭了运行该服务器的笔记本电脑的盖子;在这个问题的情况下,这是因为默认的屏幕空白时间仍然存在。一旦超时,Pi 的图形芯片就会关闭,不再更新缓冲区,因此 VNC 服务器似乎已冻结。
为什么它没有在 VNC 的鼠标事件中返回,我不知道,但是将 Pi 设置为从不关闭屏幕首先修复了丢失。
(无论如何它都是无头的,所以我这样做并不是在浪费屏幕上的电量。也许在图形芯片上有点,但这在我的应用程序中可以忽略不计。)