工控網(wǎng)首頁
>

應(yīng)用設(shè)計(jì)

>

NXP iMX8MM ARM 平臺(tái) Weston RDP 遠(yuǎn)程桌面部署測試

NXP iMX8MM ARM 平臺(tái) Weston RDP 遠(yuǎn)程桌面部署測試

1). 簡介

嵌入式平臺(tái)開發(fā)部署過程中為了方便需要遠(yuǎn)程桌面連接到設(shè)備以便于直接在 PC 上面操控設(shè)備,本文就基于NXP i.MX8M Mini ARM SoC 平臺(tái),通過 Weston Compositor 的 RDP 組件來測試遠(yuǎn)程桌面功能。

 

本文所演示的平臺(tái)來自于 Toradex Verdin i.MX8MM 嵌入式平臺(tái)

 

 

2. 準(zhǔn)備

a). Verdin i.MX8MM ARM核心版配合Dahlia 載板,并連接調(diào)試串口用于測試

b). Dahlia 載板通過 DSI-HDMI 轉(zhuǎn)接卡連接 HDMI 顯示器。

 

 

3). 通過 Yocto 環(huán)境編譯部署 RDP 相關(guān)支持

a). 首先參考這里說明創(chuàng)建 Yocto/Openembedded 編譯框架當(dāng)前最新版本是對應(yīng)于 Toradex Yocto Linux BSP 7.x 版本的 scarthgap-7.x.y branch

 

b). 創(chuàng)建定制化 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 來修改默認(rèn)的 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). 在開發(fā) Ubuntu 主機(jī)使用下面命令生成 RDP 服務(wù)需要的 TLS keys 相關(guān)文件。

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

$ winpr-makecert -rdp -path

$ cd weston-rdp-cert/ && ls

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

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

 

f). 在上述同樣 wayland 目錄下增加 TLS keys 相關(guān)bb file 和上述步驟生成的具體 key 文件用于編譯時(shí)候部署。

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

$ 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 文件結(jié)構(gòu)如下:

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). 模塊啟動(dòng)后,首先通過下面命令將開機(jī)自動(dòng)運(yùn)行的 Qt Cinema 示例應(yīng)用停止。

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

$ systemctl stop wayland-app-launch

$ systemctl disable wayland-app-launch

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

 

b). 確認(rèn) 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 屏幕已經(jīng)正常顯示 Weston desktop 桌面,同時(shí)可以通過如下命令查看 RDP 服務(wù)是否啟動(dòng)成功。

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

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

tcp        0      0 0.0.0.0:3389            0.0.0.0:*               LISTEN

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

 

d). 在同一局域網(wǎng)內(nèi)的 PC 主機(jī)上面通過核心板的 IP 地址使用 RDP Client 應(yīng)用連接,本文使用 Windows 自帶的遠(yuǎn)程桌面連接工具測試連接。

NXP iMX8MM ARM 平臺(tái) Weston RDP 遠(yuǎn)程桌面部署測試6951.png 

 

 

5). Headless 模式 RDP 連接測試

a). 由于上述測試中, weston 默認(rèn)使用 drm-backend 來輸出顯示,然后通過 screen-share module 來共享到 RDP 輸出,因此需要設(shè)備實(shí)際連接物理顯示器,當(dāng)設(shè)備是 Headless 時(shí)候,RDP 服務(wù)無法啟動(dòng)成功。如果在 Headless 下需要 RDP 連接,就需要修改相關(guān)配置文件,讓 weston 直接使用 rdp-backend 來輸出顯示。

 

b). 如下修改 /etc/xdg/weston/weston.ini 來關(guān)閉之前配置的 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). 重啟設(shè)備后,此時(shí)無論是否連接 HDMI 顯示器(如果連接了,顯示器也只會(huì)顯示 console 信息),RDP 服務(wù)都可以正常使能,并通過 RDP client 連接到 weston 桌面。

 

 

6). 總結(jié)

本文基于 NXP i.MX8MM 處理器平臺(tái)測試了 RDP 遠(yuǎn)程桌面功能,不過請注意遠(yuǎn)程桌面功能由于安全性以及顯示質(zhì)量會(huì)受到影響,通常只用于開發(fā)測試階段,不建議在量產(chǎn)設(shè)備上面開通這個(gè)功能。

審核編輯(
王靜
)
投訴建議

提交

查看更多評(píng)論
其他資訊

查看更多

基于 NXP iMX8MP 平臺(tái)測試 CODESYS TargetVisu

通過 Docker 部署測試 CODESYS PLC示例

Yocto layer 使用 TI AM62 安全啟動(dòng)功能

定制 Linux Kernel Driver 編譯示例

在 NXP i.MX 95 上運(yùn)行 Zephyr 實(shí)現(xiàn)非對稱多核處理