由于这半年来一直在做嵌入式Linux系统软件开发工作,所以经常和嵌入式设备打交道,最早接触的嵌入式Linux应该就是树莓派了,而我的树莓派一般也不接屏幕,基本上都使用VNC远程连接,所以就想着能不能把VNC也移植到嵌入式设备上,最后找到了x11vnc
。
VNC(虚拟网络计算)是一种非常有用的网络图形协议(应用程序在一台计算机上运行,但在另一台计算机上显示其窗口),但与X不同,查看端非常简单,不保持任何状态。它是一种远程帧缓冲区(RFB)协议。
x11vnc允许用户通过任何VNC viewer远程查看并与real X显示器(即与物理监视器、键盘和鼠标相对应的显示器)交互。
准备工作#
需要先用git克隆下面两个仓库,libvncserver
和x11vnc
。
x11vnc
是基于libvncserver
的服务端程序。
编译 libvncserver#
编译x11vnc需要libvncserver,libvncserver按照 README 编译即可
1
2
3
4
| mkdir build
cd build
cmake ..
cmake --build .
|
编译完成后将build文件夹下生成的.so文件复制到 sysroot
例:
1
2
3
4
5
6
7
| # 复制 .so 文件
$ sudo cp ./libvncclient.so* /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/
# 复制 pkgconfig 文件
$ sudo cp ./libvnc*.pc /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/pkgconfig/
# 复制头文件
$ sudo cp -r ../rfb /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/
$ sudo cp ./rfb/rfbconfig.h /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/include/rfb/
|
编译 x11vnc#
x11vnc 需要使用 autoconf 和 automake 生成 configure 和 makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
| $ cd x11vnc-master
# 使用aclocal工具生成aclocal.m4
$ aclocal
# 使用autoconf工具生成configure文件
$ autoconf
# 使用autoheader工具生成config.h.in文件
$ autoheader
# 使用automake生成Makefile.in文件
$ automake --add-missing
# configure 配置交叉编译,如果libvncserver没有正确编译安装,这里会提示找不到libvncserver
$ ./configure CC=arm-poky-linux-gnueabi-gcc AR=arm-poky-linux-gnueabi-ar AS=arm-poky-linux-gnueabi-as LD=arm-poky-linux-gnueabi-ld --host=arm-poky-linux --prefix=/home/ubuntu/ CFLAGS="-march=armv7ve -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi"
# 编译安装
$ make install
|
安装完成后在 /home/ubuntu/
(configure 步骤设置的 –prefix)目录下出现了bin
和 share
两个目录,bin
目录下的就是 x11vnc 的可执行文件。
安装运行#
将 libvncserver 编译得到的 *.so 文件和 x11vnc 可执行文件复制到开发板即可。
1
2
3
4
| # 复制可执行文件
$ scp -r /home/ubuntu/bin root@192.168.10.7:~/
# 复制 libvncserver
$ scp /opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi/usr/lib/libvnc*.so.0.9.13 root@192.168.10.7:/usr/lib/
|
ssh登录开发板
1
2
3
4
5
6
7
8
9
10
11
12
| # 创建符号链接
root@imx6ulevk:~# ln -s /usr/lib/libvncclient.so.0.9.13 /usr/lib/libvncclient.so.1
root@imx6ulevk:~# ln -s /usr/lib/libvncclient.so.1 /usr/lib/libvncclient.so
root@imx6ulevk:~# ln -s /usr/lib/libvncserver.so.0.9.13 /usr/lib/libvncserver.so.1
root@imx6ulevk:~# ln -s /usr/lib/libvncserver.so.1 /usr/lib/libvncserver.so
# 重命名文件夹
root@imx6ulevk:~# mv ~/bin ~/x11vnc
root@imx6ulevk:~# cd ~/x11vnc
root@imx6ulevk:~# chmod +x ./x11vnc
# 运行 x11vnc
# x11vnc -display :0
root@imx6ulevk:~# ./x11vnc
|
然后在电脑上启动 VNC Viewer, 输入开发板的ip地址就可以通过远程桌面访问设备了。
实际运行效果如图
参考