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

相关推荐
maosheng11462 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken2 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.2913 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C3 小时前
CPU Cache
linux·cache
Hoshino.413 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
播播资源5 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos
源远流长jerry5 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
lay_liu6 小时前
Linux安装redis
linux·运维·redis
寂柒7 小时前
序列化与反序列化
linux·网络
lay_liu7 小时前
ubuntu 安装 Redis
linux·redis·ubuntu