Project Url: tenaf0/drm-shell
More: Author   ReportBugs   

A toy graphical shell running directly on top of Linux's DRM subsystem written in modern Java (20, early access) using Foreign Function & Memory API.

The project includes high-level wrappers for libdrm, libinput and libseat and it has a basic poll loop for listening to events. It uses double-buffering with vsync and renders via Skija (https://github.com/JetBrains/skija). The program also features a very basic GUI toolkit that handles damages/redraws.


The project uses bleeding-edge versions of both the JDK and jextract, so packaging it is very hard, only Nix is supported. As of now it only supports "manual building" inside a nix shell.

In order to do that check out the project and issue nix develop. Note that it will take quite some time the first time, as it will have to build the JDK, which takes something on the order of 10 minutes. After you are inside the shell, simply issue the following:

nix develop
gradle installDist


By default, the program will use the video card /dev/dri/card0, to change that (e.g. if you have multiple cards) add the desired path as a command line argument. Go to an unused tty and issue the following


# Using card1 instead
./shell.sh /dev/dri/card1



About Me
GitHub: Trinea
Facebook: Dev Tools