ETRD博客

使用VNCviewer远程访问树莓派的HDMI输出桌面

引言

之前的文章里有实现在Windows下通过微软自带的远程桌面,可以通过pi用户远程登录到树莓派上的方法,实现本机PC对树莓派的相关操作。但实际上通过这种方法访问的树莓派桌面与树莓派HDMI口输出的真实桌面是不同的,它们似乎是只共享了存储和文件而已,它们的桌面实际上是不一样的。如果需要查看并且操作树莓派真实的HDMI输出桌面,一种方法是给它接上屏幕、鼠标、键盘。另一种方法是可以通过在树莓派上安装x11vnc并启动服务,在Windows PC端或者Android手机端通过VNC Viewer来进行远程查看并操作树莓派真实的HDMI输出桌面。

需求的提出

  • Visual studio 2013结合VisualGDB插件对目标运行在树莓派上的Qt程序进行交叉编译后进行远程调试的时候,可以通过Xming来在本机显示出Qt在树莓派上的运行界面,但总感觉有点慢。在调试的时候还可以选择界面输出显示在远程机器上:

    QQ截图20170220201604

    注意这个Shown on the remot computer是指树莓派实际的HDMI输出,你通过Windows远程登录的桌面是看不到调试时候的Qt程序界面的。

    所以我才需要VNC Viewer来查看并操作树莓派的实际HDMI输出桌面。

  • 手机可以安装VNCviewer,可以用手机充当树莓派的屏幕,也很方便。

树莓派端安装x11vnc

  • 安装x11vnc
1
sudo apt-get install x11vnc
  • 设置远程链接的密码
1
x11vnc -storepasswd

QQ截图20170220191142

输入密码时,终端是不会显示任何东西的,尽管输入,输入完回车即可。

  • 如果想每次手动启动服务,可以每次输入如下命令:
1
x11vnc -forever -usepw -display :0

然后想取消服务按Ctrl+C

  • 如果想希望它随系统自动启动通过如下命令进行
1
cd .config
1
mkdir autostart
1
cd autostart
1
nano x11vnc.desktop

QQ截图20170220200142

然后复制如下内容进去:

1
2
3
4
5
6
7
8
9
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=X11VNC
Comment=
Exec=x11vnc -forever -usepw -display :0
StartupNotify=false
Terminal=false
Hidden=false

QQ截图20170220200230

然后保存退出

x11vnc则会每次开机自动启动

说明:自启动的步骤和方法由参考文档提供,不过我做了一点小小的改动,把-ultrafilexfer这个参数删掉了,因为有这个参数好像协议版本的问题每次连接都提示一个警告,我并不希望这样。

Windows端安装VNC Viewer

通过realvnc的网站下载Windows下的客户端,确保树莓派和Windows在同一局域网,通过IP连接即可

Windows下显示效果(部分截图)

QQ截图20170220204901

Android手机安装VNC Viewer

QQ截图20170220205525

同样手机与树莓派处于同一局域网下,这是手机上的显示效果:

QQ截图20170220210018

如果你没有路由器,或者说在户外工作,你完全可以用手机作为热点发射wifi,树莓派会自动连接(测试发现前提是你的树莓派之前最后一次连接的是你手机的热点),这样你的手机和树莓派可以满足在同一局域网的条件了,接下你需要知道树莓派的IP地址,这个一般的Android系统似乎无法直接查看,但实际上这些信息存在于手机的目录:

1
/proc/net/arp

有人已经写好了一个小工具直接读取的,附上下载链接,谢谢作者。

需要注意的是,Windows端和Android端同时只能有一个进行连接

小结

本文给出了Windows下和Android下通过VNC Viewer远程连接操作树莓派3真实HDMI输出桌面的方法,有利于在Windows下开发和仿真调试在树莓派上运行的Qt界面程序,同时也完全可以代替原来的Windows通过微软自带的远程桌面连接树莓派进行操作的方法。

参考文献

https://www.raspberrypi.org/forums/viewtopic.php?p=108862#p108862

http://raspberrypi.stackexchange.com/questions/9590/tightvncserver-show-the-same-screen-on-hdmi-and-vncclient

https://www.realvnc.com/

http://android-er.blogspot.com/2015/12/display-wifi-hotspot-clients-by-cat.html