arm开发板移植VNC功能

本文详细介绍三种在嵌入式设备上实现VNC的方法:直接安装VNC功能的开发板,使用QT自带的VNCPlugin,及下载X11vnc源码交叉编译。涵盖配置、编译、安装步骤及遇到的问题与解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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没有正常启动造成的。

### 如何在ARM开发板上设置和配置VNC服务器 #### 配置环境 为了使VNC能够在ARM开发板上正常工作,通常需要先完成必要的软件包安装以及初始化配置。这可以通过标准的Linux发行版命令来实现[^1]。 #### 安装VNC Server 在大多数基于Debian的系统(如Ubuntu或Armbian),可以使用`apt-get`工具来安装TightVNC或其他版本的VNC server: ```bash sudo apt-get update sudo apt-get install tightvncserver ``` #### 初始化VNC服务 首次运行VNC之前,需通过`vncserver`命令设定密码并生成基础配置文件。此操作会提示输入访问密码,并自动创建所需的`.vnc/xstartup`脚本文件[^3]。 ```bash vncserver :1 ``` 上述命令中的`:1`表示第一个虚拟显示器实例,默认监听端口为5901。 #### 修改xstartup文件 如果默认启动行为不符合需求,则可能需要手动编辑位于用户家目录下的隐藏子目录`.vnc/`内的`xstartup`文件。例如,在某些情况下,添加以下内容可确保图形界面正确加载[^2]: ```bash #!/bin/sh xrdb $HOME/.Xresources startxfce4 & ``` 注意要赋予该脚本执行权限: ```bash chmod +x ~/.vnc/xstartup ``` #### 启动与停止VNC服务 一旦完成了初步配置,就可以随时利用下面这些指令控制VNC session的状态: - **启动** ```bash vncserver :1 ``` - **关闭特定session** ```bash vncserver -kill :1 ``` #### 连接客户端设备 最后一步是从远程设备接入已搭建好的VNC server。假设目标ARM开发板IP地址为`192.168.x.y`,那么只需打开任意支持的标准VNC Viewer应用,指定连接字符串形如`192.168.x.y:5901`即可建立链接。 对于特殊用途场景比如嵌入式GUI框架Qt的应用程序展示,还可以尝试调整其显示输出方式至VNC模式[^4]: ```bash export QWS_DISPLAY="VNC:LinuxFb" ./your_qt_application ```
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AllenSun-1990

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

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

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

打赏作者

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

抵扣说明:

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

余额充值