Jetson Nano平台编译安装Xpra¶
我采用 X持久化远程应用Xpra 来实现远程运行X window程序,可以非常平滑融合到本地操作系统平台。Jetson Nano平台是ARM平台,我也尝试采用该方案来运行图形程序。
备注
Xpra官方只支持i686和x86_64,不过已知Xpra也可以工作在ARM和其他CPU架构。Xpra官方文档引用了 XPRA - installation on Orange PI Plus 2E ,提供了在ARM平台编译Xpra的指南。
编译¶
安装基本依赖:
apt-get install libx11-dev libxtst-dev libxcomposite-dev libxdamage-dev \ libxkbfile-dev python-all-dev
对于GTK3的服务器和GUI客户端:
apt-get install libgtk-3-dev python3-dev python3-cairo-dev python-gi-dev cython3
并且需要安装一些X11工具:
apt-get install xauth x11-xkb-utils
解码器¶
要支持视频(x264和vpx)需要安装:
apt-get install libx264-dev libvpx-dev yasm
这个在ARM版本Ubuntu中没有找到:要使用nvenc(NVIDIA的SDK)需要安装:
apt-get install libnvidia-encode1
基于ffmpeg视频编码:
apt-get install libavformat-dev libavcodec-dev libswscale-dev
jpeg支持:
apt-get install libturbojpeg-dev
webp支持:
apt-get install libwebp-dev
可选安装¶
对html5客户端支持:
apt-get install uglifyjs brotli libjs-jquery libjs-jquery-ui gnome-backgrounds
opengl and rendering:
apt-get install python3-opengl python3-numpy python3-pil
network bits(没有找到python3-lzo):
apt-get install python3-rencode python3-lz4 python3-dbus python3-cryptography \ python3-netifaces python3-yaml python3-lzo
杂项支持(没有找到python3-pycuda):
apt-get install python3-setproctitle python3-xdg python3-pyinotify python3-opencv python3-pycuda
报错:
Package python3-pycuda is not available, but is referred to by another package
pycuda
是 Python wrapper for Nvidia CUDA ,可以通过 pip install pycuda
安装。这个软件包 python3-pycuda
在 pycuda
安装源( contrib archive area )中提供,我查看了Jetson Nano的Ubuntu 18.04安装源 sources.list没有找到contrib,所以是按照 Jetson Nano安装pycuda 方法通过 pip
安装 pycuda
。
备注
参考 Setting up PyCUDA on Ubuntu 18.04 for GPU programming with Python
但我感觉后续需要解决通过发行版软件包安装 pyton3-pycuda
,以便保持随发行版持续更新。待后续实践。
安装X11杂项支持:
apt-get install libpam-dev quilt xserver-xorg-dev xutils-dev xserver-xorg-video-dummy xvfb keyboard-configuration
认证模块:
apt-get install python-kerberos python-gssapi
avahi发现支持(我在运行时发现最好能够提供avahi支持,等下次实践再尝试):
apt-get install python-avahi
声音支持:
apt-get install gstreamer1.0-pulseaudio gstreamer1.0-alsa \ gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ gstreamer1.0-plugins-ugly python-gst-1.0
打印支持:
apt-get install cups-filters cups-common cups-pdf python3-cups
ssh支持:
apt-get install openssh-client sshpass python3-paramiko
补充安装¶
编译手册中没有提到,但是Jetson Nano使用的L4T操作系统需要安装:
apt-get install dh-systemd libsystemd-dev
打包¶
安装deb打包工具:
apt-get install devscripts build-essential lintian debhelper
从 https://www.xpra.org/src/ 下载最新源代码:
wget https://www.xpra.org/src/xpra-4.0.4.tar.xz
也可以从svn源代码获取:
svn co https://xpra.org/svn/Xpra/
从svc源代码编译可以制作deb包:
cd trunk/src/ ln -sf ../debian . debuild -us -uc -b
备注
我采用trunk代码编译安装deb软件包,遇到报错和解决方法见下文。完成后在源代码 trunk
目录下有两个deb包:
xpra_4.1-1_arm64.deb
xpra-html5_4.1-1_arm64.deb
安装:
# 需要依赖 python3-brotli ,补充安装
sudo apt install python3-brotli
# 然后安装软件包
sudo dpkg -i xpra_4.1-1_arm64.deb
如果要提供html5访问,再安装一个html5包:
sudo dpkg -i xpra-html5_4.1-1_arm64.deb
从release编译:
./setup.py install
上述安装到全局,如果本地安装则使用命令:
./setup.py install --home=install
svn代码编译报错处理¶
执行
debuild -us -uc -b
报错:dpkg-checkbuilddeps: error: Unmet build dependencies: brotli libjs-jquery libjs-jquery-ui gnome-backgrounds dh-systemd libsystemd-dev
原因是需要 html5 client支持和systemd支持:
apt-get install uglifyjs brotli libjs-jquery libjs-jquery-ui gnome-backgrounds
apt-get install dh-systemd libsystemd-dev
出现有关cuda报错:
dh_install: Cannot find (any matches for) "usr/share/xpra/cuda/*" (tried in ., debian/tmp) dh_install: xpra missing files: usr/share/xpra/cuda/* dh_install: missing files, aborting debian/rules:14: recipe for target 'binary' failed make: *** [binary] Error 25 dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2 debuild: fatal error at line 1152: dpkg-buildpackage -rfakeroot -us -uc -ui -b failed
我是采用 JetPack SDK 完成CUDA安装。按照编译手册,我也采用 Jetson Nano安装pycuda 方式通过 pip 安装 pycuda
(没有找到 python3-pycuda
) ,但是依然存在上述报错。
这个问题在 Package patched xpra to support WM_CLASS #296 提到一种ugly的解决方法,是将 debian/xpra.install
中的 usr/share/xpra/cuda/*
删除掉。这显然是削弱了软件包的功能。
备注
由于我暂时没有时间详细排查cuda报错,暂时采用上述方式完成编译安装。后续使用CUDA开发时再排查进一步解决。
备注
世界之大,科技之广,实在超乎想象。无意中因为编译Xpra,发现了一个集成了Xpra实现安全网络操作系统的 Subgraph OS ,这是在 xrdp远程桌面 之外,可以比拟微软终端服务的Linux解决方案,而且产品化且开源。
在Jetson Nano中使用Xpra¶
使用方法借鉴 X持久化远程应用Xpra 主要步骤如下:
在Jetson Nano服务器端执行以下命令启动Xpra服务:
systemctl start xpra
如果没有安装html5组件,则启动日志中会提示:
'/usr/share/xpra/www' does not exist
但对常规客户端不影响使用。此外,如果服务器端没有安装 avahi
(Apple公司主推的网络资源发现服务,方便找到服务器),则提示:
Warning: failed to load the mdns publisher
No module named 'avahi'
either install the 'python-avahi' module
or use the 'mdns=no' option
所以,我还补充安装:
sudo apt install python-avahi
然后重新启动xpra,但是我发现上述报错还是存在。我感觉应该在下次编译软件包之前先安装,以提供编译支持。
Jetson Nano服务器上启动应用程序:
xpra start --start=/usr/bin/chromium-browser --bind-tcp=127.0.0.1:1100
客户端配置
~/.ssh/config
添加:Host jetson-chrome HostName 192.168.6.10 User huatai LocalForward 1100 127.0.0.1:1100
客户端执行ssh端口转发命令:
ssh -C jetson-chrome
之后就可以使用xpra客户端访问本地tcp端口1100,连接后就是访问服务器上chromium浏览器了
依次类推,可以在Jetson上运行开发程序,无论何时何地,只要有网络连接,就可以访问应用开发系统,进行开发。