专栏中心

EEPW首页 > 专栏 > NXP iMX8MM ARM 平台 Weston RDP 远程桌面部署测试

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

发布人:toradex 时间:2025-10-11 来源:工程师 发布文章

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 自带的远程桌面连接工具测试连接。

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

 

 

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 远程桌面功能,不过请注意远程桌面功能由于安全性以及显示质量会受到影响,通常只用于开发测试阶段,不建议在量产设备上面开通这个功能。


专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: ARM Linux rdp NXP iMX8MM Toradex Verdin

相关推荐

走进智能工厂 为何智能诊断是持续运行的关键

Arm财报过山车:营收创纪录,股价跌7%

ARM Axion 处理器加持谷歌第八代 TPU,云端全面转向智能体 AI 架构

ARM嵌入式系统开发

基于 Zephyr 实时操作系统与恩智浦平台搭建可扩展嵌入式系统

ARM开发详解

WinCE+ARM开发及关键技术 下

视频 2009-10-22

Arm宣布推出Performix,为开发者带来 AI 时代必备的可扩展性能

ARM 展示小型低功耗上网本样品

视频 2009-03-16

最新ARM技术和嵌入式技术发展动态 下

视频 2009-10-22

安谋科技Arm China与国民技术签署Arm Total Access授权许可协议,加速AI时代MCU灵活创新与高效落地

边缘 AI 加速的 Arm Cortex‑M0+ MCU 如何为电子产品注入更强智能

汽车暖通空调(HVAC)控制参考设计

最新ARM技术和嵌入式技术发展动态 中

视频 2009-10-22

Arm CEO:AI智能体将推动CPU核心数升至 512

网络与存储 2026-05-11

WinCE+ARM开发及关键技术 上

视频 2009-10-22

arm学习资料

资源下载 2007-12-03

Arm遭遇监管危机:FTC针对其技术授权启动反垄断调查

2026-05-18

ARM嵌入式系统开发:软件设计与优化

ARM嵌入式软件编程经验谈

更多 培训课堂
更多 焦点
更多 视频

技术专区