arm开发板移植VNC功能

VNC is a set of programs using the RFB (Remote Frame Buffer) protocol. They are designed to "export" a frame buffer via net (if you don't know VNC, I suggest you read "Basics" below). It is already in wide use for administration, but it is not that easy to program a server yourself.

VNC (Virtual Network Console)是虚拟网络控制台的缩写。它 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。 在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下用户只需要其中的两个命令:vncserver 和 vncviewer。

RFB (“remote framebuffer”,远程帧缓冲)是一个定义远程图形用户终端接口的简单协议。因为它是以framebuffer级别的工作方式,因此它适用于所有的窗口系统,包含X11,Windows 3.1/95/NT 和Macintosh。用户所操作的远程终端(包含一个显示器加一个键盘和鼠标等)被称为RFB客户端

方法一:购买可以直接安装VNC功能的开发板

一些开发板是可以直接安装VNC工具的,比如,Pcduino和树莓派。因为这些开发板,支持apt install。而国内大部分开发板不支持直接安装。需要下载源代码,进行交叉编译以后,才能在开发板上面运行。下面以米尔的开发板,搭配Ubuntu系统为例,界面显示为基于X Server的XFCE应用。

 安装x11 VNC

 开发板接上HDMI显示屏,确保X Server启动。 

电脑端,使用VNC Viewer进行远程访问。可以发现,鼠标和键盘都能正常使用。你可以把开发板部署到公网上面来进行更广范围的远程控制。

补充:在使用的过程中,发现如果开发板没有连接显示屏的话,XServer就不能正常远程。可以运行下面的命令,然后再启动x11vnc。

export DISPLAY=:1
Xvfb :1 -screen 0 1024x768x16 &
sleep 1
exec xfce4-session &
#exec gnome-session & # use gnome-session instead of lightdm
#exec lightdm-session &

你可以打开摄像头软件,或者利用摄像头拍摄照片。当你把开发板设置为公网IP以后,这样就相当于实现了一个网络摄像头。

 方法二:使用QT自带的VNC Plugin的lib

因为我现在的项目使用的QT环境,所以使用QT4.8.6自带的gfxdrivers开发VNC功能。QT4.8.6代码库自带VNC功能插件。我们只要编译出相应的动态链接库拷贝到开发板里面就行了。

qt/embedded交叉编译时一些配置选项的介绍

现在要做一件事情,在windows上访问嵌入式linux+Qt,使得在windows上可以看见嵌入式设备显示的内容。在网上查了一些资料,通过vnc可以实现这个功能。我的做法是在编译Qt时加入-qt-gfx-vnc和-plugin-gfx-vnc选项,然后把qt4.7.3/plugins/gfxdrivers/libqgfxvnc.so拷贝到开发板的对应目录。执行./myapp -qws -display VNC:0,提示VNC: driver not found Aborted?

将libqgfxvnc.so插件拷贝到自创建的/usr/local/Trolltech/QtEmbedded-4.8.6-arm/plugins/gfxdrivers目录下。这个目录要与自己编译的目录一致

一种是在编译Qt时加入vnc的支持。参考的资料是

http://doc.qt.io/archives/qt-4.8/qt-embedded-vnc.html

http://www.friendlyarm.net/forum/topic/5029

http://bbs.csdn.net/topics/380149017

具体做法是编译Qt时加入编译选项

-qt-gfx-vnc

-plugin-gfx-vnc

-qt-gfx-linuxfb

-plugin-gfx-linuxfb

编译完成后把生成的libqgfxvnc.so和libqscreenlinuxfb.so拷贝到开发板 qt路径/plugins/gfxdrivers/

然后在嵌入式设备启动应用程序 ./myapp -qws -display VNC:0

这时出现了

VNC: driver not found 
通过Qt的VNC方式调试开发板_vigour1000的博客-CSDN博客

这个问题,我搞了两天。也没有解决。先放弃这个方案。

--------------------------------------------------------------------------------------------------------------------------

后续解决方法:

考虑到交叉编译的环境和板子实际的环境,路径有些许不同。我将板子上面的qt文件夹,命名为qt_backup。把虚拟机上面的qt文件夹拷贝到arm板的相应目录下面。然后,将qt新文件夹上面缺少的一些lib,从qt_backup拷贝到qt中。主要是自己添加的一些lib。然后,重启。再运行:./hello -qws -display VNC:0。发现显示器的屏幕上面不会显示hello的界面。然后,用VNC Viewer登录192.168.1.123:5900。发现可以远程。并且鼠标可以使用了。键盘还没测试。显示的界面现在过大。应该可以通过参数来调整。后面有更好的指令,我再发出来。

-----------------------------------------------------------------------------------------------------------

关于界面显示不全的问题,是QWS_SIZE设置不正确。这个尺寸设置越大,VNC Viewer可以看到的内容就越多。QT的界面尺寸相对就会变小。将QWS_SIZE从800*480改成2560*1920。则VNC viewer显示的内容就会完整。

方案三,下载X11 vnc源码交叉编译。安装到开发板上面。参考:嵌入式linux实现vnc功能_五香花生米的博客-CSDN博客

源码下载地址:https://download.csdn.net/download/xikangsoon/11726854

解压缩后执行:

CC=arm-cortex_a9-linux-gnueabi-gcc CFLAGS=-O2 ./configure --host=arm-linux --without-x --prefix=/usr/local/x11vnc

make

make install

然后,将生成的x11vnc拷贝到开发板相应的目录下面。

执行程序:

./x11vnc -noipv6 -rawfb /dev/fb0 -pipeinput UINPUT:touch,tslib_cal=/etc/pointercal,direct_abs=/dev/input/event2,nouinput,dragskip=4 -clip 2560x1920+0+0

然后,在电脑端使用vnc viewer进行登录。工具下载地址:vnc_viewer.rar-Web开发文档类资源-CSDN下载

登录账号是ip地址+ 端口号5900,192.168.1.123:5900

下面是效果图:

现在存在的问题是,不能操作键盘和鼠标。后面继续研究。

------------------------------------------------------------------------------------------------------------------------

--without-x编译出来的是不支持鼠标和键盘的,参考:

给imx6嵌入式平台移植x11vnc搭建远程控制环境_wanvan的博客-CSDN博客_x11vnc 交叉编译

继续做下去,需要使用libX11。而libX11需要交叉编译。参考:

交叉编译libX11_OneSea的博客-CSDN博客_交叉编译libx11

注意在安装的时候,对应版本的依赖。否则会出问题。

libxcb-1.12

xcb-proto-1.12

lib所需要下载的源代码库:

交叉编译GTK交叉编译Xserver交叉编译DFB用到的库_libpng1.4.4-C代码类资源-CSDN下载

Index of /dist

Index of /raspbian/pool/main

https://www.veryarm.com/116150.html

freedesktop.org git repository browser

--------------------------------------------------------------------------------------------------------------

现在存在的问题,执行下面的指令。会显示:XOpenDisplay("") failed.

/usr/local/x11vnc/bin/x11vnc -auth guess -once -loop -noxdamage -repeat -rfbauth /home/kevin/.vnc/passwd -rfbport 5900 -shared
 这个问题,还没有解决。先放一放。因为我发现,当远程进入arm板的界面的时候,运行我的QT程序。会使远程连接断开。不知道是什么原因。先使用第二种方法。后面有时间再继续研究这个远程登录的方法。

后续:对于XOpenDisplay("") failed的问题,应该是X Server没有正常启动造成的。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AllenSun-1990

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值