Jump to content

XLibre

From ArchWiki
(Redirected from Xlibre)


XLibre is a modern, community-maintained display server implementing the X Window System protocol, version 11 (X11). It is a fork of the X.Org Server, created on June 5, 2025. It continues development of the X.Org Server codebase while retaining compatibility with existing X11 applications and Xorg configuration. XLibre is a configuration-compatible drop-in replacement for xorg-server.

Since 2025, the project has incorporated security fixes and code cleanups, added the Xnamespace extension for separating X clients, and restored support for several legacy drivers. It also supports seat management through seatd as an alternative to systemd-logind [1].

Because XLibre shares its configuration and most of its behaviour with Xorg, this article focuses on the differences between the two. For general configuration, monitor settings, input devices, compositing and generic troubleshooting, see Xorg.

Installation

Tip XLibre ships its own forked set of input/video drivers. The package names mirror those of Xorg with the prefix changed from xf86- to xlibre-, e.g. xf86-video-amdgpu becomes xlibre-video-amdgpu.

XLibre binary repository

Pre-compiled x86_64 binary packages are provided by the XLibre project in an unofficial user repository.

Install xlibre-meta from the XLibre repository.

The packages pulled by xlibre-meta replace their installed X.Org counterparts. If the current X session is interrupted while packages are being replaced, log in on a Linux console and complete the package transaction.

After installation, install xorg-xdpyinfo if needed and check the vendor string:

$ xdpyinfo | grep 'vendor'
Note The remaining xorg-apps (e.g. xorg-xinput, xorg-xrandr, xorg-xdpyinfo), xorg-fonts and libraries such as libx11 are not forked by XLibre. The Xorg versions are used directly and remain useful complements to an XLibre installation.
Warning The repository name in /etc/pacman.conf is separate from its server URL. The XLibre Arch package maintainers renamed the stable repository from [xlibre] to [xlibre-stable]. Existing installations using the old name should change the section name; the stable repository URL remains https://packages.xlibre.net/arch/stable/$arch. The maintainers state that the old repository name will be removed at the end of 2026.

AUR packages

The XLibre X server is also available in the AUR. Install one of the following packages:

The stable xlibre-xserverAUR package belongs to the xlibre package group and provides xorg-server. XLibre input and video driver packages belong to the xlibre-drivers group and provide their corresponding xf86-* package names. These packages conflict with the Xorg server or driver package that they replace.

Switching from X.Org

The xlibre-meta package replaces the corresponding X.Org server, input and video driver packages. If the graphical session is interrupted during installation, switch to a Linux console and complete the installation described in #Installation.


When building packages from the AUR, use matching XLibre server, input and video driver packages together. Loadable Xorg modules and XLibre modules use different ABI version numbers, so do not mix xorg-server with xlibre-* drivers or xlibre-xserverAUR with xf86-* drivers. See #Package name mapping for common package-name replacements.

Broken dependency on lightdm

This article or section is being considered for removal.

Reason: "The literal package name" argument is not accurate since xlibre-server provides xorg-server. Packaging issues and hacks to circument them also belong on the AUR page, at best, and not on the wiki (Discuss in Talk:XLibre)

Installing xlibre-xserverAUR may fail with:

removing xorg-server breaks dependency 'xorg-server' required by lightdm

Because lightdm depends on the literal package name xorg-server, the conflict cannot be resolved while lightdm is installed. Remove it first, then reinstall after the migration is complete:

pacman -Rdd lightdm
# ... complete the XLibre installation ...
pacman -S lightdm

Drivers

See Graphics processing unit#Installation to identify your hardware, and Xorg#Drivers for the generic driver-selection behaviour. XLibre ships its own forked set of Device Dependent X (DDX) and input drivers; always use the xlibre- packages to match the XLibre ABI. For input devices, XLibre defaults to the libinput driver (xlibre-input-libinputAUR)

The generic modesetting(4) DDX driver, which uses Kernel mode setting and Glamor for 2D acceleration, is built into XLibre and works on modern hardware, so no separate video driver package is needed for most setups. When a specific DDX driver is wanted, install the corresponding xlibre-video-* package from the repository used for installation or the AUR. XLibre auto-searches for installed drivers, falling back to fbdev, then vesa, then the built-in modesetting.

The xlibre-metaAUR package requires the XLibre server and xlibre-input-libinputAUR. Hardware-specific video drivers and additional input drivers are optional dependencies. Installing the meta package does not automatically install a video driver for every GPU.

The full list of forked drivers, including many for legacy hardware, is on the upstream XLibre compatibility wiki.

Usage

The X server is normally started by a display manager or with startx(1). All common display managers work with XLibre (see #Compatibility). Generic X11 procedures documented for Xorg also apply to XLibre, see Xorg for details.

Rootless operation

XLibre upstream supports seat management via systemd-logind(8) and seatd. The XLibre third-party binary packages for Arch currently have seatd support disabled, so the seatd-specific example below does not apply to those packages. For the usual rootless X server setup, see Xorg#Rootless Xorg.

If you build XLibre yourself with seatd support enabled and want to use seatd for rootless operation, create an ~/.xserverrc with:

~/.xserverrc
#!/bin/sh
exec X -keeptty "$@"

Make it executable:

$ chmod +x ~/.xserverrc

Nested X session

A nested X server runs a separate X session inside a window of an existing graphical session. For Xnest, install xlibre-xserver-xnestAUR. For Xephyr, install xlibre-xserver-xephyrAUR, which provides xorg-server-xephyr for packages depending on that name. See Xorg#Nested X session for the general procedure.

Virtual framebuffer

Xvfb runs an X server with a screen held in memory instead of displayed on a physical monitor. It is useful for X11 applications and graphical tests on systems without an active graphical display. Install xlibre-xserver-xvfbAUR to use the XLibre-packaged version. The package provides xorg-server-xvfb.

The xvfb-run wrapper starts a temporary Xvfb server, sets up X authentication and a display for a command, and stops the server when the command exits. For example, with xorg-xdpyinfo installed:

$ xvfb-run --auto-servernum xdpyinfo

The --auto-servernum option selects an available display number to avoid conflicts with an existing X server. Unlike Xephyr, Xvfb does not open a window in an existing session. See xvfb-run(1) and Xvfb(1) for further options.

Configuration

XLibre uses the same configuration mechanism as Xorg: an xorg.conf file and files with the .conf suffix in /etc/X11/xorg.conf.d/. See Xorg#Configuration, Xorg#Using .conf files and Xorg#Using xorg.conf for the full details of the file format, search paths, file ordering, Xorg :0 -configure, and available options. This section documents the options that behave differently in XLibre.

TearFree

Unlike the released X.Org Server, XLibre enables TearFree by default, so manual Option "TearFree" "on" configuration is unnecessary.

Tips and tricks

TearFree and atomic modesetting

The TearFree page-flipping implementation for the generic modesetting driver was merged into the Xorg development branch in December 2022. It is not included in the 21.1 release series used by the xorg-server package. XLibre includes the implementation and changes its default from disabled to enabled.

XLibre also allows the generic modesetting driver to opt in to the Linux DRM/KMS atomic modesetting API. The option is disabled by default because limitations remain, including DPMS behavior. In the legacy modesetting API, userspace changes display state through several separate operations, such as setting modes, assigning framebuffers and moving planes. Atomic modesetting instead lets userspace submit one complete display-state update, which the kernel driver validates first and then applies as a single commit. This can avoid intermediate inconsistent states during display changes, and is the API used by modern DRM/KMS drivers. For background on KMS, see Kernel mode setting; for implementation details, see Linux kernel DRM/KMS documentation.

Enable it with:

/etc/X11/xorg.conf.d/xlibre.conf
Section "Device"
    Identifier "amd"
    Driver "modesetting"
    Option "Atomic" "on"
EndSection

Xnamespace extension

The Xnamespace extension (currently v1.0) isolates X clients from each other using namespaces, conceptually similar to Linux kernel namespaces. Each namespace has its own selections, and clients in one namespace cannot directly send messages to or access the resources of clients in another. The root namespace is unrestricted.

Namespaces are defined in a configuration file passed to the server at startup with the -namespace flag. Client-to-namespace assignment is based on the xauth authentication token, so token authentication must be enabled. An example configuration ships in the source tree at Xext/namespace/ns.conf.example.

Note Xnamespace is an advanced feature intended for hardened or multi-tenant setups. It is disabled by default (no namespace config is loaded unless -namespace is given).

Nvidia legacy driver support

XLibre re-added support for the proprietary NVIDIA driver legacy branches 340, 390, and 470 in addition to the already supported 570 and newer. These branches support older Nvidia hardware that the current driver line has dropped. See NVIDIA/Tips and tricks#Forked legacy driver versions. Because of the ABI mismatch described in #Ignoring the ABI (proprietary Nvidia driver), older X.Org-built Nvidia modules require IgnoreABI on XLibre releases before 25.0.0.16.

seatd support

In addition to systemd-logind(8), XLibre upstream can obtain device/seat privileges from seatd, which is useful on systems that run an alternative init (e.g. on systems where systemd is not installed). The XLibre third-party binary packages for Arch currently have seatd support disabled; see #Rootless operation.

Compatibility

XLibre retains the X11 protocol API, so X11 clients do not require XLibre-specific changes. Upstream maintains a detailed compatibility matrix; the following table provides a condensed overview.

Desktop environments, display managers and window managers

The major desktop environments, display managers and X11 window managers work with XLibre. A condensed overview:

Category Working with XLibre Notes
Desktop environments GNOME (up to 48), KDE Plasma (6.x), Xfce, MATE, Cinnamon, LXQt, LXDE, Budgie (up to 10.9), Trinity (TDE), Enlightenment, Moksha. GNOME 50+ and KDE Plasma 6.8+ are moving to Wayland-only; community forks (gnome-xorg, SonicDE) track the X11 path.
Display managers GDM, SDDM, LightDM, LXDM, XDM, SLiM, Entrance, ly GDM with GNOME 50+ will be Wayland-only.
Window managers i3, bspwm, Awesome, openbox, fluxbox, FVWM, IceWM, herbstluftwm, xmonad, dwm, Qtile, KWin, Mutter, Marco, Muffin, xfwm4, Moksha, compiz, twm, WindowMaker, and most others A maintained compatibility matrix is published on the XLibre wiki.

XWayland

On Arch Linux, XWayland is provided by the standalone xorg-xwayland package. The XLibre packages replace the standalone X server but do not replace XWayland, which continues to provide X11 application compatibility in Wayland sessions.

Troubleshooting

This section lists XLibre-specific issues. For general X server troubleshooting, see the matching Xorg sections in Xorg.

Log files

Like Xorg, XLibre writes logs to ~/.local/share/xorg/Xorg.n.log when run rootless, or to /var/log/ otherwise. Look for (EE) (error) and (WW) (warning) lines.

Nvidia driver flickering with compositors

Proprietary Nvidia driver 580.119.02 introduced flickering with compositors such as picom and Xfwm. This is a driver issue, not an XLibre bug. Use 580.105.08, 580.142, or 595.58.03 instead. See the driver matrix for tested combinations.

Module fails to load due to ABI mismatch

If a module (typically the proprietary Nvidia driver built for the Xorg ABI) is refused at startup, add the IgnoreABI option described in #Ignoring the ABI (proprietary Nvidia driver). On XLibre 25.0.0.16 and later this is handled automatically for the Nvidia driver.

nvidia_drv.so not found

The factual accuracy of this article or section is disputed.

Reason: What is "some builds"? Is this still an issue with versions ≥25.0.0.16? Untracked symlinks outside of pacman are a workaround that, at best, should be mentioned on the AUR page, not the wiki. (Discuss in Talk:XLibre)

If the proprietary driver's module is not found even with IgnoreABI set (reported on some source builds), the nvidia_drv.so may not be in XLibre's module search path. Symlink or copy it into the module directory, e.g. /usr/lib/xorg/modules/drivers/, or pass the correct -modulepath to the server.

XLibre fails to replace xorg-server (dependency)

The factual accuracy of this article or section is disputed.

Reason: This is not how depends work and ignores the existence of provides and (for local repositories) replaces. (Discuss in Talk:XLibre)

A package depending on the literal xorg-server name (e.g. lightdm) blocks the conflict resolution. See #Broken dependency on lightdm.

Module ABI

This article or section is a candidate for moving to Xlibre#Troubleshooting.

Notes: Not a configuration section, only for specific troubleshooting purposes. (Discuss in Talk:XLibre)

The XLibre server ABI is versioned and bumped on each major release. Out-of-tree modules built for a different ABI are refused by default. This check can be disabled globally for all modules with the following configuration:

/etc/X11/xorg.conf.d/xlibre.conf
Section "ServerFlags"
    Option "IgnoreABI" "1"
EndSection

See also