yserver: 一个用Rust从头编写的现代X11服务器

Lobsters Hottest 工具

摘要

yserver是一个用Rust从头编写的现代X11服务器,能够运行MATE、XFCE和Cinnamon等完整的桌面环境,同时去掉了遗留的负担。它支持多种X扩展,并已在多种硬件上测试过。

<p><a href="https://lobste.rs/s/yy8je0/yserver_modern_x11_server_written_from">评论</a></p>
查看原文
查看缓存全文

缓存时间: 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

相似文章

XS: 一种编程语言。随时随地,人人可用。

Hacker News Top

XS是一种新的编程语言,以单个静态链接的二进制文件形式分发,其中包含编译器、语言服务器、调试器、格式化器、代码检查器、测试运行器、性能分析器和包管理器。它可以在多个平台上无需修改地运行,包括Linux、macOS、Windows、WASI、iOS、Android、ESP32和Raspberry Pi,并提供多种后端,包括JIT、虚拟机以及到C和JavaScript的转译器。