Xorg是Xserver在Linux系统上一种具体的软件实现,属于应用态的程序,因此它的编译和调试会相对方便些,在这里对所掌握的编译安装Xorg方法进行记录。
1,获取Xorg的源代码
目前了解到的获取Xorg代码的方法有以下三种方式,可以根据自己的环境选择合适的方式:
方式1:
sudo apt-get -y install xorg-server-source
下载后代码会以压缩包的形式放在/usr/src目录下,解压到当前目录或你的目录下使用,压缩包如图:
方式2:
sudo apt-get source xserver-xorg-core
这个方式会把代码目录下载到你的当前目录,也就是指令的执行目录下,如图:
这里可能会提示没有代码源,在/etc/apt/sources.list文件中把deb-src的注释去掉,再执行sudo apt update更新即可。
上面两种方式下载的Xorg代码貌似都是最新的版本,我当时查看的版本号都是1.21.xx
方式3:
sudo git clone https://gitlab.freedesktop.org/xorg/xserver.git
这个方式是拷贝代码库,可以自己切换需要的Xorg版本代码,比如我要切换到1.20.14版本,则执行:
sudo git checkout xorg-server-1.20.14
根据你的需要切换到相应的代码分支,分支名可以用git指令(branch)去列出来。
小提示:如果在下载git时提示库里找不到该工具,可以先sudo apt update更新一下就可以了。
图示:
2,编译Xorg
2.1 配置autogen脚本
编译前需要执行代码目录下的autogen脚本,其作用是根据配置参数自动化生成Makefile文件,如
sudo ./autogen.sh --prefix=/usr --enable-dri3
参数解释:--prefix=/usr 指定安装目录为/usr
--enable-dri3 表示启用dri3模块
20250704补充:在银河麒麟上升级后发现鼠标键盘无效,重装xserver-xorg-input-libinput或相关的包也没用;原因是缺少udev,解决方法是配置的时候启用udev,也就是配置参数上加上“--enable-config-udev”
2.2 解决依赖问题
执行autogen脚本的过程中碰到过许多的依赖问题,有两种处理方法:一是使用apt-get build-dep指令,安装软件包相关的编译依赖,指令如下;二是根据提示把缺的工具补全。
2.2.1 安装Xorg编译依赖
apt-get build-dep xserver-xorg-core
2.2.2 逐个处理依赖
这里有个技巧,根据报错提示的关键词,可以使用apt-cache search查找对应的包,如以下实例:
报错为:autogen.sh:9:autoreconf:not found,查找关键词autoreconf,如图:
根据查到的信息安装dh-autoreconf即可。
我遇到的依赖问题以及处理方法记录如下:
autogen.sh:9:autoreconf:not found --> apt install dh-autoreconf
must install xorg-macros --> apt install xutils-dev
No package 'pixman-1' found --> apt install libpixman-1-dev
No package 'libdrm' found --> apt install libdrm-dev
No package 'gl' found --> apt install libgl1-mesa-dev
No package 'dri' 'xkbfile' 'xfont2' --> apt install xorg-dev
No package 'epoxy' --> apt install libepoxy-dev
Glamor for Xorg requires gbm >= 10.2.0 --> apt install libgbm-dev
如果出现:pkgProblemResolver::Resolve error的错误,可以使用aptitude工具,它会对冲突的工具降级或提供其他方案供我们选择:
sudo apt install aptitude
sudo aptitude install libgbm-dev
3, 编译与安装
在前面的autogen脚本顺利完成后,当前目录中应有Makefile文件被创建,此时可执行下面的其中一个指令,作用一样的,区别在于参数写法。
make -j8 install
make -j install
make -j$(nproc) install
参数解释:其中的-j8指利用CPU的8个现成加速编译过程,可根据系统资源(CPU、内存)选择-j4、-j8等数值,平衡编译速度和稳定性。$(npro)表示系统的逻辑核心数,可实现动态设置;部分make版本支持自动优化任务数,不用手动指定(≥4.3),可以直接使用-j参数。
待编译和安装完成后,重启桌面生效;可在控制台终端下执行Xorg -version查看当前运行的Xorg版本。
4,调试说明
4.1 gdb调试
使用gdb调试需要修改Makefile文件,vim Makefile,把CFLAGS和CCASFLAGS选项修改为
CCASFLAGS = -g -O0
CFLAGS = -g -O0
4.2 修改代码
我是在代码中添加打印进行调试的,调试时发现,在修改Xorg代码之后,需要重新执行autogen脚本再去编译,否则修改是没生效的。
5,如何恢复原来的Xorg
如果新编译的Xorg导致桌面起不来,有个很粗暴的方法进行恢复,把当前的Xorg删除干净,然后重新下载Xorg的软件包:
sudo apt remove --purge '^xserver-xorg' '^xorg'
sudo apt install --reinstall xserver-xorg