Jetson Nano 桌面 Weston 自定义编译

想研究下 Wayland,Jetpack 4.x 系统自带 Weston,但是不支持 X11 backend,只能以 standalone 模式运行。我不想放弃那个桌面。我设置成自动登录桌面,方便 vnc 远程访问。文档中说,那个 Gnome 桌面可切换到 Wayland,本来这样最好不过,但文档操作步骤中需要修改的一个文件不存在,这条路也不通。所以我得自己编译 Weston。

系统自带的 Weston 是 6.0 版本,已经很旧了(Jetson Nano 和 Jetpack 4.x 本来就是老瓶装旧酒)。Weston 文档说,一般要依赖当前最新 release 的 waylandwayland-protocols 库,而 wayland 本身又有自己的依赖。系统是 Ubuntu 18.04,软件包仓库中很多工具和开发库版本都非常旧,合理怀疑,如果要编译最新的 Weston/wayland 会相当麻烦。就弄 6.0 版。

编译和安装 Weston

首先,按照安装文档,准备好 pip3 和 meson。meson 需要 CMake 或者 ninja,默认 ninja,所以还要安装 ninja。接下来,执行下面的命令,安装 Weston 的依赖包。注意,执行下面命令之前需要把 apt 的 Source 源打开:

bash 复制代码
sudo apt-get build-dep weston

这个命令会把几乎所有依赖包都安装好,漏网之鱼等到编译过程中报错再个别安装。把 Weston 6.0 源码下载下来:

bash 复制代码
git clone -b 6.0 https://gitlab.freedesktop.org/wayland/weston.git
cd weston

参照安装文档,设置一些环境变量,自定义安装目录。因为不想覆盖系统自带的 Weston,决定安装在用户主目录下:

bash 复制代码
export WLD=$HOME/weston_install_dir
export LD_LIBRARY_PATH=$WLD/lib
export PKG_CONFIG_PATH=$WLD/lib/pkgconfig/:$WLD/share/pkgconfig/
export PATH=$WLD/bin:$PATH

我的目标是在 Gnome 桌面环境下运行 Weston,只需要支持 X11 backend。先修改 meson_options.txt,把不需要的东西都禁用掉,然后开始进行配置:

bash 复制代码
mkdir -p build
meson setup build/

如果有依赖包不满足,meson setup 命令会报错,根据错误信息提示,从 apt 仓库安装。这里有一个例外,wayland-protocols 要求最低版本是 17.0,而 Ubuntu 18.04 apt 仓库中的版本太低,所以需要下载 v17.0 版本的源码并安装,具体步骤放到后面。

meson setup 命令通过后,继续进行配置:

bash 复制代码
meson configure build/ -Dprefix=$WLD

这里通过 prefix 配置项来指定自定义安装目录。若直接执行 meson configure build/ 命令(不带其他选项),则会打印出所有配置项。仔细检查,如有必要可直接修改 meson_options.txt 文件,或者像上面的命令用 -Dname=value 的形式进行修改。可以了就开始编译和安装:

bash 复制代码
ninja -C build/ 
ninja -C build install

安装 wayland-protocols

wayland-protocols 使用 autotools:

bash 复制代码
git clone -b 17.0 https://gitlab.freedesktop.org/wayland/wayland-protocols.git
cd wayland-protocols
aclocal
autoconf
automake --add-missing
./configure --prefix=$WLD
make
make install

其实 wayland-protocols 不需编译,只要安装到与 Weston 相同的目录下即可。前面已设置 LD_LIBRARY_PATH 等环境变量,使得在编译 Weston 时,编译工具能够找到新版本的 wayland-protocols

运行 Weston

这里有一个要点。weston 可执行程序动态链接到 $WLD/lib/aarch64-linux-gnu/libweston-6.so.0,因此需要将该动态库所在目录添加到 LD_LIBRARY_PATH 环境变量中,否则,在运行 Weston 时会链接系统目录(在 /usr/local 下)中同一文件名(libweston-6.so.0)的动态库,这显然不好。除此以外,不同的 libweston-6.so.0 还会进一步加载不同路径下的 x11-backend.so 等其他动态库。

arduino 复制代码
export LD_LIBRARY_PATH="$WLD/lib/aarch64-linux-gnu"
weston --no-config

在 Gnome/X11 环境下,Weston 会自动选择 x11-backend.so。Weston 默认启动 desktop-shell,如下图:

不过,在 Weston / desktop-shell 中检查仍是 X11 session,这就奇怪了哦

相关推荐
电鱼智能的电小鱼7 分钟前
EFISH-SBC-RK3588无人机地面基准站项目
linux·网络·嵌入式硬件·机器人·无人机·边缘计算
电鱼智能的电小鱼12 分钟前
基于 EFISH-SBC-RK3588 的无人机环境感知与数据采集方案
linux·网络·嵌入式硬件·数码相机·无人机·边缘计算
小诸葛的博客1 小时前
详解Linux中的定时任务管理工具crond
linux·运维·chrome
一默19911 小时前
CentOS 7.9升级OpenSSH到9.9p2
linux·运维·centos
keep intensify1 小时前
Linux常用指令
linux·服务器·php
带电的小王2 小时前
sherpa-ncnn:Linux(x86/ARM32/ARM64)构建sherpa-ncnn --语音转文本大模型
linux·语音识别·实时音视频·sherpa-ncnn
沧浪之水!2 小时前
【Linux网络】:套接字之UDP
linux·网络·udp
BranH2 小时前
Linux系统中命令设定临时IP
linux·运维·服务器
秋风起,再归来~2 小时前
【Linux庖丁解牛】—进程优先级!
linux·运维·服务器
cosX+sinY3 小时前
ubuntu 20.04 编译运行lio-sam,并保存为pcd
linux·ubuntu·机器人