yserver: 一个用Rust从头编写的现代X11服务器
摘要
yserver是一个用Rust从头编写的现代X11服务器,能够运行MATE、XFCE和Cinnamon等完整的桌面环境,同时去掉了遗留的负担。它支持多种X扩展,并已在多种硬件上测试过。
查看缓存全文
缓存时间: 2026/06/12 04:49
joske/yserver
来源:https://github.com/joske/yserver
yserver
一个用 Rust 从头编写的现代 X11 服务器。
目标并非克隆 Xorg。而是提供一个实用的 X11 服务器,能够在现代 Linux 上运行真实的桌面环境、窗口管理器和应用程序,同时抛弃遗留的负担(多屏幕、非 TrueColor 视觉、间接 GLX、DDX 驱动 ABI、字节序交换的客户端等)。
完整设计和范围请参见 docs/high-level-design.md。
名称
yserver 这个名称是“工作用”名称,因为它是项目开始时我脑海中冒出的第一个想法。但 GitHub 上有多个同名项目(不过没有用于 X11 服务器的),名称可能会更改。目前这不是优先事项。
状态
yserver(独立 DRM/KMS)现在可以运行完整的 MATE/XFCE/Cinnamon 桌面。其他经过测试的窗口管理器包括 FVWM3、e16 和 wmaker。
我们支持以下扩展:
- BIG-REQUESTS
- Composite
- DAMAGE
- DPMS
- DRI3
- GLX
- Generic Event Extension
- MIT-SCREEN-SAVER
- MIT-SHM
- Present
- RANDR
- RENDER
- SHAPE
- SYNC
- X-Resource
- XFIXES
- XInputExtension
- XKEYBOARD
- XTEST
GLX_EXT_texture_from_pixmap
已在 AMD、Intel、Asahi 和 Qualcomm 上实现并测试。它不能(注意:永远不能)在 NVIDIA 专有驱动程序上工作,在我唯一的 NVIDIA 卡(GTX 1050)上,nouveau 驱动甚至无法启动 Xorg。Nouveau 可能在其他卡上工作,但未经测试。
演示
TFP 实现后,我们现在支持 compiz,演示视频如下:
https://github.com/user-attachments/assets/dc266c55-e9ee-4649-a0c4-be3db2526713
已测试硬件
yserver(独立 DRM/KMS)已在以下平台上针对 MATE / xfce4 / Cinnamon 桌面进行了端到端测试:
- AMD — Ryzen 9 6900HX(Rembrandt、RDNA2、RADV);i9 13900k + RX580(Polaris/GCN4、RADV)。
- Intel — i5-7200U(Kaby Lake、ANV)iGPU。
- NVIDIA — i5 6500 + GTX 1050(专有驱动)。
- Snapdragon X1 X1E80100(Adreno X1、Turnip)。
- Apple M1 MBA、M2 MBP 在 Asahi Linux 上(apple-drm KMS + asahi GPU、Mesa AGX-V)。
- 虚拟化 —
virtme-ng下的 virtio-gpu(Venus 透传)。
运行独立 DRM/KMS 服务器
yserver 如果可用则使用 libseat 进行 seat 管理。它也可以直接驱动 atomic KMS,但此时你的用户需要访问 /dev/dri/ 和 /dev/input/。
它需要最新的稳定版 Rust 工具链和以下依赖:
Arch
sudo pacman -S just gcc libseat libxshmfence libxkbcommon libinput glslc systemd-libs fontconfig
Ubuntu
sudo apt install just gcc libseat-dev libxshmfence-dev libxkbcommon-dev libinput-dev glslc libudev-dev libfontconfig-dev
Justfile 封装了相关操作:
## 切换到空闲 TTY,然后运行:
just startx
这将启动 yserver,然后执行你的 ~/.xinitrc(或回退到 /etc/X11/xinit/xinitrc)。
如果你使用 libseat,可以切换 VT;但如果使用直接模式,当 yserver 运行时不能切换 VT。请终止服务器,或者注销会话。
一些便利的快捷键可用:
- Ctrl-Alt-Backspace:终止服务器,返回控制台
- Ctrl-Alt-Enter:在当前工作目录创建帧缓冲区的截图/扫描输出
- Ctrl-Alt-F12:将所有 drawable 以 PPM 文件形式导出到当前工作目录
通过 xts5 和 rendercheck 进行回归测试
我们针对 yserver 运行 X.Org X 测试套件(xts5)以评估协议完整性。
最新的每个场景通过数记录在 docs/test-status.md 中。
许可证
本项目采用 MIT 许可证。详情请查看 LICENSE。
相似文章
zinnia: 一个用Rust编写的模块化64位类Unix内核
Zinnia 是一个用Rust编写的模块化64位类Unix内核,旨在在UEFI系统上启动并运行带有Wayland或X11的现代桌面。它实现了POSIX API和常见的Linux/BSD扩展。
Show HN: 用汇编语言构建 Web 服务器,为我的生命赋予(些许缺乏的)意义
ymawky 是一个专为 macOS 编写的 ARM64 汇编 Web 服务器,其特点是不依赖 libc 仅使用系统调用,并具备基本的 HTTP 功能。
XS: 一种编程语言。随时随地,人人可用。
XS是一种新的编程语言,以单个静态链接的二进制文件形式分发,其中包含编译器、语言服务器、调试器、格式化器、代码检查器、测试运行器、性能分析器和包管理器。它可以在多个平台上无需修改地运行,包括Linux、macOS、Windows、WASI、iOS、Android、ESP32和Raspberry Pi,并提供多种后端,包括JIT、虚拟机以及到C和JavaScript的转译器。
用 aarch64 汇编构建 Web 服务器,给我的生活(缺乏)意义
本文介绍了 'ymawky',一个完全用 aarch64 汇编为 macOS 编写的最小 HTTP Web 服务器,使用原始系统调用而无需 libc 包装器,以探索底层系统机制。
Xs of Y – 每局自动命名的roguelike游戏,用4千行代码编写
Xs of Y 是一款用名为 let-go 的自定义Lisp方言编写的roguelike游戏,每局都会生成新的标题、任务和符文映射。游戏具有独特的基于s表达式的魔法系统,可以原生运行或通过WASM在浏览器中运行。