Blog:
嵌入式 Arm 平台配置远程桌面

terça-feira, 9 de julho de 2019

简介

在 PC 平台经远程桌面连接已经是非常方便了,而现在在嵌入式 Arm 平台,由于远程控制或者远程调试的需要,配置远程桌面的需求也越来越多,本文就着重演示基于嵌入式 Arm 平台实现远程桌面服务器端和客户端应用示例。

本文演示所使用的 Arm 平台来自 Toradex 基于 NXP i.MX6Q SoC 平台的 Apalis iMX6 Arm 核心板。

准备

Apalis iMX6Q Arm 核心版配合 Apalis Evaluation Board 载板,连接调试串口 UART1(载板X29)到开发主机方便调试。更多关于 Apalis iMX6 配合 Apalis Evaluation Board 载板的说明请参考 Datasheet开发上手指南

Apalis iMX6Q  安装基于 Toradex Linux BSP V2.8  并集成 Qt opensource 5.9 基本库的 Embedded Linux,系统基于 Ycoto Project/OpenEmbedded 编译环境进行编译,编译方法请参考这里,编译好的 Linux Image 安装方法请参考这里

Apalis iMX6 WinCE 系统下远程桌面配置

Apalis iMX6 除了本文下面要演示的 Embedded Linux 系统,也支持 WinCE 系统,因此这里也将 WinCE 系统下远程桌面配置做简单罗列,但并不做相关测试演示。

Apalis iMX6 WinCE 作为远程桌面Client配置,通过 CETSC  工具,使用 RDP 协议来登录基于 Windows(RDP支持)的远程桌面服务器,详细请参考如下:
https://developer.toradex.cn/knowledge-base/remote-desktop-protocol-rdp-on-windows-ce

Apalis iMX6 WinCE 作为远程桌面 Server 配置,通过 VNC Server 工具,使用 VNC 协议来供支持 VNC 协议的 Client 登录,详细请参考如下:
https://developer.toradex.cn/knowledge-base/VNC-Server-(WinCE)

Apalis iMX6 Embedded Linux 系统下远程桌面配置之 Client 端

通过 FreeRDP 工具,使用 RDP 协议连接 RDP 远程桌面Server端(Windows 主机为主)

安装 FreeRDP 软件,可以通过下面两种方法:

  • 通过OE环境直接编译到Embedded Linux Image里面去

# add freerdp to build/conf/local.conf
IMAGE_INSTALL_append = " freerdp"

  • 通过 OE 环境编译出对应的 ipk 安装包,然后在 Apalis iMX6 模块系统上面通过 opkg 命令来安装

# compile freerdp related ipk package in OE envirionment
$ bitbake freerdp
# cp below ipks to Apalis iMX6 and install
$ cd deploy/ipk/armv7at2hf-neon-mx6qdl
$ scp freerdp_1.0.0-7677-g62da9d2-r0_armv7at2hf-neon-mx6qdl.ipk libfreerdp1.2_1.0.0-7677-g62da9d2-r0_armv7at2hf-neon-mx6qdl.ipk root@ipaddress_aplis_imx6:/home/root/
$ opkg install libfreerdp1.2_1.0.0-7677-g62da9d2-r0_armv7at2hf-neon-mx6qdl.ipk
$ opkg install freerdp_1.0.0-7677-g62da9d2-r0_armv7at2hf-neon-mx6qdl.ipk

通过下面示例命令连接 RDP 远程桌面 Server,更多配置选项可以通过执行 “xfreerdp --help” 来查看
$ xfreerdp /u:username /p:password /v:server ipadress or domain name

通过 Tightvnc viewer 工具,使用 VNC 协议连接 VNC 远程桌面 Server 端(Linux 主机为主)

安装 Tightvnc软件,可以通过下面两种方法:

  • 通过OE环境直接编译到Embedded Linux Image里面去

# add tightvnc to build/conf/local.conf
IMAGE_INSTALL_append = " tightvnc"

  • 通过 OE 环境编译出对应的 ipk 安装包,然后在 Apalis iMX6 模块系统上面通过 opkg 命令来安装

# compile tightvnc related ipk package in OE envirionment
$ bitbake tightvnc
# cp below ipks to Apalis iMX6 and install
$ cd deploy/ipk/armv7at2hf-neon
$ scp libxaw6-6_1.0.13-r2_armv7at2hf-neon.ipk tightvnc-viewer_1.3.10-r2_armv7at2hf-neon.ipk root@ipaddress_aplis_imx6:/home/root/
$opkg install libxaw6-6_1.0.13-r2_armv7at2hf-neon.ipk
$ opkg install tightvnc-viewer_1.3.10-r2_armv7at2hf-neon.ipk

通过下面示例命令连接 VNC 远程桌面 Server,更多配置选项可以通过执行 “vncviewer --help” 来查看
$ vncviewer vncserver_ipadress:<DISPLAY#>

Apalis iMX6 Embedded Linux 系统下远程桌面配置之 Server 端

通过 X11vnc工具,使用 VNC 协议提供基于 X11 桌面服务器的远程桌面 Server 端

.安装 X11vnc 软件,可以通过下面两种方法:

  • 通过OE环境直接编译到Embedded Linux Image里面去

# add x11vnc to build/conf/local.conf
IMAGE_INSTALL_append = " x11vnc"

  • 在Apalis iMX6模块系统上面通过opkg命令来在线安装

# on Apalis iMX6 Linux, make sure it has internet access
$ opkg update
$ opkg install x11vnc

通过下面示例命令启动远程桌面 Server,然后即可通过 vncviewer client 来进行连接

# on Apalis iMX6, startup vnc server
$ x11vnc -display :0

# on vnc client, use vncviewer to visit
$ vncviewer apalis_imx6_ipadress:0

通过 Teamviewer Host 工具,建立 teamviewer 远程桌面 Server 端

由于teamviewer软件本身的特性,可以提供穿透局域网的远程桌面服务,而上述所列的软件默认都是只能在局域网内工作。

安装 Teamviewer Host软件。

在 Linux 主机上面下载 Teamviewer Host 针对armv7 架构的 tar 压缩包,解压并重新打包为 tar.bz2 压缩包以便于在 Apalis iMX6 系统上面解压

# on Linux host

$ wget https://download.teamviewer.com/download/linux/teamviewer-host_armhf.tar.xz
$ tar Jxf teamviewer-host_armhf.tar.xz
$ tar cjvf teamviewer-host_armhf.tar.bz2 teamviewer/

将 teamviewer 安装包上传到 Apalis iMX6 系统上进行解压并检查安装依赖环境,teamviewer 需要 Qt 的一些基本库。

# on Apalis iMX6 Linux

$ tar xjvf teamviewer-host_armhf.tar.bz2
$ cd teamviewer
# run below command to check the dependency requirement
./tv-setup checklibs

由于本文这里编译的 image 绝大多数 Qt 库都已经有了,个别没有的可以通过 OE 环境单独编译出来 ipk 安装包,再在 Apalis iMX6 上面进行安装。通过上面打印信息看到缺少的是 libqt5x11extras5 依赖库,参考如下进行安装

# on OE envirionment

$ bitbake qtx11extras

# cp below ipks to Apalis iMX6 and install

$ cd deploy/ipk/armv7at2hf-neon
$ scp libqt5x11extras5_5.9.7+git0+34dcc9ea76-r0_armv7at2hf-neon.ipk root@ipaddress_aplis_imx6:/home/root/
$ opkg install libqt5x11extras5_5.9.7+git0+34dcc9ea76-r0_armv7at2hf-neon.ipk

检查依赖没有问题后,通过下面命令进行安装,安装过程中遇到提示都选择Yes。

$ ./tv-setup install

安装成功后,修改 teamviewe r开机自启动 systemd 服务文件 /etc/systemd/system/termviewerd.service 为如下内容

[Unit]
Description = TeamViewer remote control daemon
After = systemd-networkd-wait-online.service network.target network-online.target dbus-org.freedesktop.network1.service
Wants = dbus-org.freedesktop.network1.service network-online.target
Requires = dbus-org.freedesktop.network1.service

[Service]
Type = forking
PIDFile = /var/run/teamviewerd.pid
ExecStart = /opt/teamviewer/tv_bin/teamviewerd -d
Restart = on-abort
StartLimitInterval = 60
StartLimitBurst = 10

[Install]
WantedBy = multi-user.target

另外,我这里遇到了 random pool  初始化延迟的问题导致 teamviewer 开机自启动 timeout 失败,可以通过安装下面ipk包解决

# random pool initiate will print below kernel message when finished
kernel: random: crng init done

# on OE environment, compile rng-tools ipk package
$ bitbake rng-tools

# cp below ipks to Apalis iMX6 and install

$ cd deploy/ipk/armv7at2hf-neon
$ scp rng-tools_5-r0_armv7at2hf-neon.ipk root@ipaddress_aplis_imx6:/home/root/
$ opkg install rng-tools_5-r0_armv7at2hf-neon.ipk

上述项目都配置完成后重启

卡机后稍微等待一小段时间 teamviewr 服务即可自启动成功,这时候打开 teamviewr 界面根据提示的 ID 等信息,通过 teamviewer client 端进行连接访问

总结

本文示例了基于 Arm 嵌入式平台进行远程桌面 client 和 server 配置的方法供参考。

Autor: 秦海,技术销售工程师,韬睿(上海)

Deixe um comentário

Please login to leave a comment!
Have a Question?