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

相关推荐
秦jh_7 分钟前
【Linux】多线程(概念,控制)
linux·运维·前端
keep__go2 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
矛取矛求2 小时前
Linux中给普通账户一次性提权
linux·运维·服务器
Fanstay9852 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
大熊程序猿2 小时前
ubuntu 安装kafka-eagle
linux·ubuntu·kafka
daizikui4 小时前
Linux文件目录命令
linux·运维·服务器
NikitaC4 小时前
ldconfig 和 LD_LIBRARY_PATH 区别
linux·c++
清源妙木真菌4 小时前
Linux:进程概念
linux
许嵩664 小时前
IC 脚本之VIM 记录
linux·编辑器·vim