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

相关推荐
旖旎夜光20 分钟前
Linux(13)(中)
linux·网络
威迪斯特1 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.1 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔1 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
ONE_SIX_MIX1 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞051 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
*小海豚*1 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
June`1 小时前
muduo项目排查错误+测试
linux·c++·github·muduo网络库
消失的旧时光-19431 小时前
Linux 编辑器入门:nano 与 vim 的区别与选择指南
linux·运维·服务器
晓13132 小时前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言