当前位置: 首页 > news >正文

NXP iMX8MM ARM 平台 Weston RDP 远程桌面部署测试

By Toradex秦海

1). 简介

嵌入式平台开发部署过程中为了方便需要远程桌面连接到设备以便于直接在 PC 上面操控设备,本文就基于NXP i.MX8M Mini ARM SoC 平台,通过 Weston Compositor 的 RDP 组件来测试远程桌面功能。

本文所演示的平台来自于 Toradex Verdin i.MX8MM 嵌入式平台。

2. 准备

a). Verdin i.MX8MM ARM核心版配合Dahlia 载板,并连接调试串口用于测试。

b). Dahlia 载板通过 DSI-HDMI 转接卡连接 HDMI 显示器。

3). 通过 Yocto 环境编译部署 RDP 相关支持

a). 首先参考这里说明创建 Yocto/Openembedded 编译框架,当前最新版本是对应于 Toradex Yocto Linux BSP 7.x 版本的 scarthgap-7.x.y branch。

b). 创建定制化 layer meta-customer-demos。

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

$ mkdir -p ../oe_core/layers/meta-customer-demos/conf

$ cd .../oe_core/layers/meta-customer-demos/conf

### create layer.conf file ###

# We have a conf and classes directory, append to BBPATH

BBPATH .= ":${LAYERDIR}"

# We have recipes-* directories, add to BBFILES

BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend"

BBFILE_COLLECTIONS += "customer-demos"

BBFILE_PATTERN_customer-demos = "^${LAYERDIR}/"

BBFILE_PRIORITY_customer-demos = "24"

# Let us add layer-specific bbappends which are only applied when that

# layer is included in our configuration

BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bbappend' % layer \

               for layer in BBFILE_COLLECTIONS.split())}"

# Add layer-specific bb files too

BBFILES += "${@' '.join('${LAYERDIR}/%s/recipes*/*/*.bb' % layer \

               for layer in BBFILE_COLLECTIONS.split())}"

LAYERDEPENDS_customer-demos = " \

    core \

    yocto \

    openembedded-layer gnome-layer multimedia-layer networking-layer \

"

LAYERSERIES_COMPAT_customer-demos = "hardknott honister kirkstone scarthgap"

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

c). 在定制化 layer meta-customer-demos 下面添加 Weston bbappend 文件以增加 RDP 支持。

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

$ cd .../oe_core/layers/meta-customer-demos/

$ mkdir recipes-graphics/wayland/

$ cd recipes-graphics/wayland

### cteate weston_%.bbappend file ###

# enable weston rdp backend

PACKAGECONFIG:append = " rdp"

# add TLS keys when rdp enabled

RRECOMMENDS:${PN}:append = " ${@bb.utils.contains('PACKAGECONFIG', ' rdp', ' weston-rdp-keys', '', d)} "

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

d). 在上述同样 wayland 目录下增加 weston-init.bbappend 来修改默认的 weston.ini 配置文件以便使能 RDP / Screen share。

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

$ cd .../oe_core/layers/meta-customer-demos/recipes-graphics/wayland

### cteate weston-init.bbappend file ###

o_install:append() {

    # add screen share modules

    sed -i '/#enable-overlay-view/ a modules=screen-share.so' ${D}${sysconfdir}/xdg/weston/weston.ini

    # add rdp backend support

    sed -i '/^command/s/$/ --rdp-tls-key=\/etc\/xdg\/weston\/weston-rdp-tls.key --rdp-tls-cert=\/etc\/xdg\/weston\/weston-rdp-tls.crt --force-no-compression/' ${D}${sysconfdir}/xdg/weston/weston.ini

    # auto start screen share

    sed -i 's/^#start-on-startup=true/start-on-startup=true/' ${D}${sysconfdir}/xdg/weston/weston.ini

}

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

e). 在开发 Ubuntu 主机使用下面命令生成 RDP 服务需要的 TLS keys 相关文件。

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

$ winpr-makecert -rdp -path <work_dir>

$ cd weston-rdp-cert/ && ls

weston-rdp-tls.crt  weston-rdp-tls.key

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

f). 在上述同样 wayland 目录下增加 TLS keys 相关bb file 和上述步骤生成的具体 key 文件用于编译时候部署。

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

$ cd .../oe_core/layers/meta-customer-demos/recipes-graphics/wayland

### cteate weston-rdp-keys_1.0.bb file ###

SUMMARY = "Weston RDP TLS keys"

LICENSE = "MIT"

LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

# generated with winpr-makecert tool

SRC_URI = " \

    file://weston-rdp-tls.crt \

    file://weston-rdp-tls.key \

"

S = "${WORKDIR}"

do_install() {

    # create floder

    install -d ${D}${sysconfdir}/xdg/weston

    # install key files

    install -m0644 ${WORKDIR}/weston-rdp-tls.crt ${D}${sysconfdir}/xdg/weston/

    install -m0600 ${WORKDIR}/weston-rdp-tls.key ${D}${sysconfdir}/xdg/weston/

}

FILES:${PN} = "${sysconfdir}/xdg/weston/weston-rdp-tls.crt ${sysconfdir}/xdg/weston/weston-rdp-tls.key"

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

然后将生成的 keys 文件也部署好

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

$ mkdir weston-rdp-keys

$ cd weston-rdp-keys/ && ls

weston-rdp-tls.crt  weston-rdp-tls.key

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

g). 最终完整 meta-customer-demos layer 文件结构如下:

meta-customer-demos

├── conf

│   └── layer.conf

├── recipes-graphics

│   └── wayland

│       ├── weston_%.bbappend

│       ├── weston-init.bbappend

│       ├── weston-rdp-keys

│       │   ├── weston-rdp-tls.crt

│       │   └── weston-rdp-tls.key

│       └── weston-rdp-keys_1.0.bb

h). 修改 bblayers.conf 和 local.conf 文件

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

### modify bblayer.conf ###

--- a/build/conf/bblayers.conf  

+++ b/build/conf/bblayers.conf  

@@ -34,7 +34,7 @@

   ${TOPDIR}/../layers/meta-openembedded/meta-python \

   ${TOPDIR}/../layers/meta-freescale-distro \

   ${TOPDIR}/../layers/meta-toradex-demos \

+  ${TOPDIR}/../layers/meta-customer-demos \

   \

   \

   ${TOPDIR}/../layers/meta-toradex-distro \

### add below to local.conf ###

# add Freescale EULA

ACCEPT_FSL_EULA = "1"

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

i). 编译 Yocto Linux image。

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

### compile Reference-Multimedia image ###

$ MACHINE="verdin-imx8mm" bitbake tdx-reference-multimedia-image

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

j). Yocto Linux image部署。

参考这里通过Toradex Easy installer将上面编译好的image更新部署到模块

4). 部署测试

a). 模块启动后,首先通过下面命令将开机自动运行的 Qt Cinema 示例应用停止。

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

$ systemctl stop wayland-app-launch

$ systemctl disable wayland-app-launch

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

b). 确认 weston.ini 的修改以及新部署的 keys 文件正确。

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

root@verdin-imx8mm-07276322:~# ls /etc/xdg/weston/          

weston-rdp-tls.crt  weston-rdp-tls.key  weston.ini

### /etc/xdg/weston/weston.ini ###

[core]

use-g2d=true

repaint-window=16

idle-time=0

xwayland=true

#enable-overlay-view=1

modules=screen-share.so

...

[screen-share]

command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-resize --rdp-tls-key=/etc/xdg/weston/weston-rdp-tls.key --rdp-tls-cert=/etc/xdg/weston/weston-rdp-tls.crt --force-no-compression

start-on-startup=true

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

c). 连接的 HDMI 屏幕已经正常显示 Weston desktop 桌面,同时可以通过如下命令查看 RDP 服务是否启动成功。

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

root@verdin-imx8mm-07276322:~# netstat -tuln | grep 3389

tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN

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

d). 在同一局域网内的 PC 主机上面通过核心板的 IP 地址使用 RDP Client 应用连接,本文使用 Windows 自带的远程桌面连接工具测试连接。

5). Headless 模式 RDP 连接测试

a). 由于上述测试中, weston 默认使用 drm-backend 来输出显示,然后通过 screen-share module 来共享到 RDP 输出,因此需要设备实际连接物理显示器,当设备是 Headless 时候,RDP 服务无法启动成功。如果在 Headless 下需要 RDP 连接,就需要修改相关配置文件,让 weston 直接使用 rdp-backend 来输出显示。

b). 如下修改 /etc/xdg/weston/weston.ini 来关闭之前配置的 screen share :

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

--- a/etc/xdg/weston/weston.ini

+++ b/etc/xdg/weston/weston.ini

@@ -4,7 +4,7 @@

 idle-time=0

 xwayland=true

 #enable-overlay-view=1

-modules=screen-share.so

+#modules=screen-share.so

 [shell]

@@ -28,5 +28,5 @@

 #transform=rotate-90

 [screen-share]

-command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-r

esize --rdp-tls-key=/etc/xdg/weston/weston-rdp-tls.key --rdp-tls-cert=/etc/xdg/weston/weston

-rdp-tls.crt --force-no-compression

-start-on-startup=true

+#command=/usr/bin/weston --backend=rdp-backend.so --shell=fullscreen-shell.so --no-clients-

resize --rdp-tls-key=/etc/xdg/weston/weston-rdp-tls.key --rdp-tls-cert=/etc/xdg/weston/westo

n-rdp-tls.crt --force-no-compression

+#start-on-startup=true

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

c). 如下修改 /lib/system/systemd/weston.service 文件来配置 weston 直接输出到 drm-backend :

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

--- a/lib/systemd/system/weston.service

+++ b/lib/systemd/system/weston.service

@@ -36,7 +36,10 @@

 EnvironmentFile=/etc/default/weston

 ExecStartPre=-/usr/bin/udevadm wait --timeout=30 /dev/dri/card0

 ExecStartPre=-/usr/bin/sh -c "ls /dev/dri/by-path/*gpu* &> /dev/null && /usr/bin/udevadm wa

it --timeout=30 /dev/dri/card1"

-ExecStart=/usr/bin/weston --modules=systemd-notify.so

+ExecStart=/usr/bin/weston --backend=rdp-backend.so --shell=desktop-shell.so \

+--no-clients-resize --rdp-tls-key=/etc/xdg/weston/weston-rdp-tls.key \

+--rdp-tls-cert=/etc/xdg/weston/weston-rdp-tls.crt \

+--width=1920 --height=1080 --modules=systemd-notify.so

 # Optional watchdog setup

 #TimeoutStartSec=60

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

d). 重启设备后,此时无论是否连接 HDMI 显示器(如果连接了,显示器也只会显示 console 信息),RDP 服务都可以正常使能,并通过 RDP client 连接到 weston 桌面。

6). 总结

本文基于 NXP i.MX8MM 处理器平台测试了 RDP 远程桌面功能,不过请注意远程桌面功能由于安全性以及显示质量会受到影响,通常只用于开发测试阶段,不建议在量产设备上面开通这个功能。

http://www.dtcms.com/a/470401.html

相关文章:

  • 低代码的系统化演进:从工具逻辑到平台架构的技术解读
  • 告别“时间战“:清北AI原创学习力模型,开启教育效率革命
  • 东莞市电商网站建设做室内概念图的网站
  • PowerShell 递归目录文件名冲突检查脚本(不区分大小写)
  • STM32项目分享:基于STM32的泳池防溺水检测手环
  • 权威解析GEO优化:如何提升品牌在AI搜索中的曝光?
  • C语言与Java语言编译过程及文件类型
  • 基于SpringBoot的农产品(商城)销售系统
  • 有名的网站建设wordpress博客站模板下载
  • 网站打不开如何解决深圳企业网站建设服务中心
  • 专业的论坛网站建设开发wordpress静态化
  • hive的一些优化配置
  • 做网站一屏一屏的盖州网站建设
  • 佳木斯建设工程交易中心网站在龙港网站哪里做
  • 工具收集 - ContextMenuManager 右键管理
  • 【软件设计师中级】计算机组成与结构(六):系统性能评测与可靠性基础 - 衡量计算机的“尺子“与“保险“
  • 当游戏NPC有了“灵魂”,网易伏羲解码游戏智能交互场景新实践
  • 热更新:移动应用的“空中加油”技术-详解什么是热更新?-优雅草卓伊凡卓伊凡的挑战
  • 【GD32】软、硬件I2C对比
  • YMODEM 协议介绍以及通信流程分析和Lua语言实现
  • 视频直播点播平台EasyDSS如何助力餐饮行业实现“明厨亮灶”直播?
  • 通过网站做外贸广告公司有哪些
  • 关于网站建设的好处seo搜索优化邵阳
  • 百家号淄博圻谷网站建设做网站页面一般用什么软件
  • CCF-GESP 等级考试 2024年3月认证C++三级真题解析
  • 本地部署 DeepSeek 私有助手:从零到上线的完整方案
  • CTF攻防世界WEB精选基础入门:weak_auth
  • 石家庄网站建设蓝点公路建设网站
  • 免费制作网页的网站企业app定制开发公司
  • 若依框架Springboot开发开放接口供他人调用