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,这就奇怪了哦

相关推荐
REDcker6 分钟前
Linux 进程资源占用分析指南
linux·运维·chrome
samroom8 分钟前
Linux系统管理与常用命令详解
linux·运维·服务器
一叶之秋14121 小时前
Linux基本指令
linux·运维·服务器
码割机1 小时前
Linux服务器安装jdk和maven详解
java·linux·maven
亚林瓜子1 小时前
在amazon linux 2023上面源码手动安装tesseract5.5.1
linux·运维·服务器·ocr·aws·ec2
爱学习的大牛1231 小时前
Ubuntu 24.04 安装 FreeSWITCH 完整教程
linux·freeswitch
go_bai1 小时前
Linux--进程池
linux·c++·经验分享·笔记·学习方法
人工智能训练2 小时前
在ubuntu系统中如何将docker安装在指定目录
linux·运维·服务器·人工智能·ubuntu·docker·ai编程
Lisonseekpan2 小时前
Linux 常用命令详解与使用规则
linux·服务器·后端
青木川崎2 小时前
linux面试题
java·linux·运维