This repository provides a Slackware X11 build tree modified to build XLibre. The sources were imported from Slackware-current Xorg and the XLibre project on July 1, 2025 and are constantly updated.
Now, once XLibre xserver and drivers have been included by The Man into Slackware-current /testing directory, which is clearly a GREAT THING, the goal of this repository has been changed. The packages officially provided by Slackware follow the long-standing general principle: all software is kept as “vanilla” as possible, with exceptions possible mostly for rare patches adopted long time ago. Chances are good that you will encounter no problems, as XLibre is mature enough now.
On the other hand, this repository is updated based on its author experience in maintaining XLibre installs on numerous desktops and laptops. Convenience and additional features are primary goals. Therefore some pull requests submitted but not yet adopted by mainstream, are applied to the source, but only if they proved to be safe and useful. Gradually they move to stable and/or master versions, so disappear from patches, and other ones are proposed. Examples include options to configure and run multiseat systems or to use legacy nVidia drivers. The latter need also legacy_nvidia_padding and legacy_nvidia_340x confguration options, the second of which is not enabled by default in the official package, but does not hurt, so we enable it as well.
nVidia legacy proprietary drivers are not included here, but you can get here slackbuilds with sources for NVidia 340, NVidia 390, NVidia 470, and NVidia 580 drivers that have been tested to work nicely with this XLibre install.
Another goal is to provide XLibre for Slackware-15.0 users.
Summing up, this repository will be maintained as a testbed for newer features and as a contact point where users can submit bug complaints and proposals concerning XLibre experience on Slackware, so that they will be taken into account in the development process, and the result will appear in the official Slackware-current XLibre packages.
Before building and installing the packages, it is recommended to set the default runlevel of your system to text mode a.k.a. runlevel 3 instead of graphical mode a.k.a. 4 in the file /etc/inittab:
#id:4:initdefault:
id:3:initdefault:Doing so will make your system always boot into text mode and gives you a nice safety margin in case the X server fails to start. After system startup and logging in as root user you will be able to manually switch to graphical mode by running telinit 4.
When you see that XLibre works the way you want it, you can switch the default runlevel back to 4 in /etc/inittab. Another possibility to work around problems with X server is to have a SSH server start up on your machine by default and remote controlling it from another computer.
Thanks to rc-05 it turned out that it is perfectly possible to build XLibre on a stable Slackware-15.0. He provided a CI script that rebuilds the packages for 64 bit each time this repository gets updated. Just go to Releases and get XLibre-Slackware-15-x86_64-{release date and time}-{commit sha reference}.tar.gz archive with the latest release, unpack it in some directory, and run
cat blacklist >> /etc/slackpkg/blacklist
upgradepkg --install-new --reinstall *.txzPlease be advised that the archive is about 478 Mb (498 Mb when unpacked), but 384 Mb of this took newer versions of Mesa, libdrm and different flavours of LLVM, namely llvm-22 (248 Mb!) and compatibilty files for llvm-21, llvm-20, llvm-19, llvm-17, and llvm-13, which it does not hurt to have on your Slackware stable anyway.
Now you have a working XLibre!
It is assumed that you have installed the entire X packages set. Some things of it will be necessary to build XLibre, another ones will be overwritten or upgraded during XLibre install. This set is not that large, so it's safer to install it completely.
If you have a more or less recent Slackware-current, this is sufficient. For a stable Slackware-15.0 or an older Slackware-current, please upgrade several outdated packages:
- go to slackware-15.0 testing directory, grab
libdrm-2.4.125-x86_64-1_slack15.0.txz,libva-2.22.0-x86_64-1_slack15.0.txz,mesa-25.0.7-x86_64-2_slack15.0.txz, andspirv-llvm-translator-20.1.3-x86_64-1_slack15.0.txz, and run
upgradepkg --install-new --reinstall libdrm-2.4.125-x86_64-1_slack15.0.txz libva-2.22.0-x86_64-1_slack15.0.txz mesa-25.0.7-x86_64-2_slack15.0.txz spirv-llvm-translator-20.1.3-x86_64-1_slack15.0.txzto replace libdrm, libva, mesa, and spirv-llvm-translator with newer versions.
- take
llvm-20.1.8-x86_64-1_slack15.0.txzat slackware-15.0 extra directory and upgrade it:
upgradepkg --install-new --reinstall llvm-20.1.8-x86_64-1_slack15.0.txzfor X drivers to build and function correctly.
Older LLVM versions are available as llvm13-compat, llvm17-compat and llvm19-compat. These packages can be installed like this:
slackpkg install llvm13-compat llvm17-compat llvm-19compator manually by grabbing them from the slackware-15.0 extra directory and simply running installpkg on each package.
There are two ways to obtain the build files: via downloading a ZIP archive or via Git cloning the repository.
You can download the ZIP archive of this repository and extract it afterwards:
wget -O X11Libre-SlackBuild.zip https://github.com/ONykyf/X11Libre-SlackBuild/archive/refs/heads/main.zip
unzip X11Libre-SlackBuild.zip
mv X11Libre-SlackBuild-main X11Libre-SlackBuild
cd X11Libre-SlackBuildPlease be advised that the initial download of the ZIP archive is about 76 MB.
You can also clone the repository with Git like so:
git clone https://github.com/ONykyf/X11Libre-SlackBuild.git
cd X11Libre-SlackBuildUsing this method gives you the opportunity to later simply update the repository by running git pull. Please be advised that the initial download of the Git repository is about 160 MB.
After downloading and changing into the main directory, just run the SlackBuild to build all the packages provided by this build tree:
./x11libre.SlackbuildGrab some coffee and wait. It won't take too long to compile the entire X11 tree with XLibre instead of Xorg. By default the built packages are immediately installed and replace older versions you have on your system. As a bonus, you get the most up-to-date X libraries and applications with all dependencies satisfied.
If your system is more or less up-to-date, you can try to recompile the X server and its drivers only:
./x11libre.SlackBuild xlibre-server
./x11libre.SlackBuild xlibre-driver
# second pass due to circular dependencies on libinput
./x11libre.SlackBuild xlibre-serverTo build select packages only you can utilize the structure of the src directory. If you e.g. only want to build the package xkeyboard-config located under src/data you would invoke the build with:
./x11libre.SlackBuild data xkeyboard-configThis applies to all the other directories and files found in src as well.
You can control how packages are upgraded as they are built via the environment variable UPGRADE_PACKAGES. The default is to always upgrade newly-built packages, effectively setting UPGRADE_PACKAGES=always. To install newly built packages only if a package with the exact name is not already installed, use UPGRADE_PACKAGES=yes. To not upgrade any packages when they are built, pass UPGRADE_PACKAGES=no.
Although in most cases the upgrade works flawlessly, you might want to collect the configure and build logs of all packages for future reference or troubleshooting by invoking the SlackBuild like this:
./x11libre.SlackBuild 2>&1 | tee ~/X-configure-build.logIn the unlikely case some package foo fails to build, a file foo.patch_failed, foo.configure_failed, or foo.make_failed will appear in /tmp/x11-build instead of foo.txz.
If your Slackware is too outdated, you may have to build all packages via x11libre.SlackBuild and it may take two passes to build them. This is very unlikely, but libSM, libXaw, libXaw3d and libXt needed a second pass to build on one of my boxes.
On another rather outdated system xkeyboard-config failed to configure and the log revealed that python3 lacked the module strenum. So I installed the missing module and reran the build:
pip3 install strenum
./x11libre.SlackBuild data xkeyboard-configAfter the build you will find the built packages in /tmp/x11-build/*.txz. Please keep them in a safe place. You may also use them to install XLibre on another computer. In the x11-build directory there will also be subdirectories containing source code. You may remove them if you are not curious about their contents.
To prevent slackpkg package manager from accidentally downgrading the installed XLibre packages, use the provided generate_slackpkg_blacklist.sh script to generate a blacklist file and add its contents to /etc/slackpkg/blacklist. Add libdrm, libva, and mesa to the last file manually as well, if XLibre is built on a stable Slackware-15.0.
Don't worry, you can go back to Xorg any time!
Switch your default runlevel to text mode as described above, change to your safe place where you kept the *.txz packages and run removepkg:
cd <safe-place-of-packages>
removepkg *.txzThen change into the main SlackBuild directory X11Libre-SlackBuild, open the file x11libre.SlackBuild in your text editor of choice and uncomment the line below the line # You can build Xorg as well and comment the third line before it containing xlibre-server like so:
--- x11libre.SlackBuild.orig 2025-12-29 20:56:45.000000000 +0200
+++ x11libre.SlackBuild 2025-12-29 20:56:55.000000000 +0200
@@ -147,10 +147,10 @@
# EXACTLY ONE OF THE FOLLOWING FIVE "for" LINES MUST BE UNCOMMENTED!
# xlibre-server is built twice due to a circular dependency on input-libinput in xlibre-driver
- for x_source_dir in proto data util xcb lib app doc xlibre-server xlibre-driver xlibre-server font ; do
+# for x_source_dir in proto data util xcb lib app doc xlibre-server xlibre-driver xlibre-server font ; do
# You can build Xorg as well
-# for x_source_dir in proto data util xcb lib app doc xserver driver font ; do
+ for x_source_dir in proto data util xcb lib app doc xserver driver font ; do
# This way you will build the latest verified "bleeding edge" xserver version from master branch
# for x_source_dir in proto data util xcb lib app doc xserver-master xlibre-driver xserver-master font ; doGrab another cup of coffee and run:
./x11libre.SlackBuildYou will get a brand new Xorg... but what for?
If you are adventurous and want to try the latest development version of XLibre xserver that I have successfully tried out myself, the tree contains sources for it as well in the src/xserver-master subdirectory.
Then the third of the five proposed options must be chosen:
--- x11libre.SlackBuild.orig 2025-12-29 20:56:45.000000000 +0200
+++ x11libre.SlackBuild 2025-12-29 21:05:56.000000000 +0200
@@ -147,13 +147,13 @@
# EXACTLY ONE OF THE FOLLOWING FIVE "for" LINES MUST BE UNCOMMENTED!
# xlibre-server is built twice due to a circular dependency on input-libinput in xlibre-driver
- for x_source_dir in proto data util xcb lib app doc xlibre-server xlibre-driver xlibre-server font ; do
+# for x_source_dir in proto data util xcb lib app doc xlibre-server xlibre-driver xlibre-server font ; do
# You can build Xorg as well
# for x_source_dir in proto data util xcb lib app doc xserver driver font ; do
# This way you will build the latest verified "bleeding edge" xserver version from master branch
-# for x_source_dir in proto data util xcb lib app doc xserver-master xlibre-driver xserver-master font ; do
+ for x_source_dir in proto data util xcb lib app doc xserver-master xlibre-driver xserver-master font ; do
# This line (re)builds xserver and drivers only, if your system is recent enough
# for x_source_dir in xlibre-server xlibre-driver xlibre-server ; doYou can even build the actual untested version by going to XLibre xserver repository with a browser and pressing the green Code button and Download ZIP afterwards to get an xserver-master.zip archive.
Repack it to *.tar.gz format by
unzip xserver-master.zip
rm xserver-master.zip
tar cvzf xserver-master.tar.gz xserver-master
rm -rf xserver-masterand replace the file src/xserver-master/xserver-master.tar.gz with the obtained one. PLEASE be advised that the patches in patch/xserver-master may then stop working or simply fail to be applied cleanly, e.g., if they have already been merged into master.
Now it's your playground and you are free to experiment.
Please report any issues to Issues · ONykyf/X11Libre-SlackBuild. In case you need help, want to report success or talk about other aspects of the build, just go to Welcome to XLibre on Slackware Linux! · X11Libre · Discussion #217.