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)程桌面連接工具測試連接。
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è)功能。
提交
基于 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)非對稱多核處理

投訴建議