Yserver: A modern X11 server written in Rust
yserver: A Contemporary X11 Server Crafted in Rust
yserver is a ground-up reimplementation of an X11 server, developed entirely using the Rust programming language.
🎯 Project Objectives
The primary goal is to deliver a functional X11 server capable of powering modern Linux desktop environments, window managers, and various applications. To achieve this, the project intentionally discards legacy architectural baggage, such as:
- Support for multiple screens
- Non-TrueColor visuals
- Indirect GLX
- The DDX driver ABI
- Clients with swapped endianness
Note on Naming: The title yserver is currently a "working name"—the first one that came to mind. Because other GitHub projects share this name (though none are X11 servers), it may be rebranded in the future.
🚀 Current Status & Capabilities
The standalone DRM/KMS version of yserver is now capable of running full-featured desktops including Cinnamon, XFCE, and MATE.
Supported Extensions
The server implements and tests the following protocol extensions:
- BIG-REQUESTS
- Composite
- DAMAGE
- DPMS
- DRI3
- GLX (including
GLX_EXT_texture_from_pixmap) - Generic Event Extension
- MIT-SCREEN-SAVER
- MIT-SHM
- Present
- RANDR
- RENDER
- SHAPE
- SYNC
- X-Resource
- XFIXES
- XInputExtension
- XC-MISC
- XKEYBOARD
- XTEST
Hardware Compatibility Matrix
| Vendor | Status | Specific Hardware Tested |
|---|---|---|
| AMD | ✅ Supported | Ryzen 9 6900HX (RDNA2), i9 13900k + RX580 (Polaris) |
| Intel | ✅ Supported | Various modern chipsets |
| Apple | ✅ Supported | M1 MBA, M2 MBP (via Asahi Linux / apple-drm / AGX-V) |
| Qualcomm | ✅ Supported | Tested and functional |
| NVIDIA | ❌ Unsupported | Proprietary drivers will NEVER work. Nouveau failed on GTX 1050. |
Visual Proof
With the implementation of TFP, the server now supports Compiz.
(Reference: compiz-720p.mp4)
🛠️ Technical Architecture & Setup
The server's execution flow can be visualized as follows:
Prerequisites
You will need a recent stable Rust toolchain. Depending on your distribution, install the following:
Arch Linux
sudo pacman -S just gcc seatd libxshmfence libxkbcommon libinput shaderc systemd-libs fontconfig
Ubuntu
sudo apt install just gcc libseat-dev libxshmfence-dev libxkbcommon-dev libinput-dev glslc libudev-dev libfontconfig-dev
Alpine Linux
export RUSTFLAGS=" -C target-feature=-crt-static "
apk add gcc musl-dev fontconfig-dev freetype-dev libxshmfence-dev libxkbcommon-dev libinput-dev libseat-dev shaderc
🖥️ Deployment and Usage
Option A: Integration with LightDM
Since lightdm allows for a configurable X-server command, it is the recommended display manager.
- Install the binary (requires root):
just installinstalls to/usr/local/bin/yserver - Configure LightDM:
Create
/etc/lightdm/lightdm.conf.d/99-yserver.confwith the following content:[Seat:*] xserver-command=/usr/local/bin/yserver - Restart the service:
sudo systemctl restart lightdm
Option B: Manual TTY Launch
Switch to an available TTY and execute:
just startx
This triggers yserver and loads your ~/.xinitrc (or the system default at /etc/X11/xinit/xinitrc).
Useful Hotkeys:
Ctrl+Alt+Backspace: Kill the server and return to the console.Ctrl+Alt+Enter: Capture a framebuffer screenshot in the current directory.Ctrl+Alt+D: Export all drawables as.ppmfiles to the current directory.
🧪 Quality Assurance
To ensure protocol adherence and completeness, the project utilizes:
- xts5: The X.Org X Test Suite.
- rendercheck: For rendering validation.
Current progress and pass rates are documented in docs/test-status.md.
📊 Repository Statistics
The project is overwhelmingly written in Rust, as shown by the language distribution:
- Stars: 274
- Forks: 15
- Watchers: 6
- Releases: 11 tags