Skip to content

Commit be301be

Browse files
committed
Add support for running on framebuffer w/o X
Signed-off-by: Joachim Wiberg <[email protected]>
1 parent eceedfb commit be301be

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

Dockerfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ RUN apk add --no-cache \
1111
sdl2_mixer-dev \
1212
libpulse \
1313
libxmp \
14+
mesa-dri-gallium \
15+
mesa-gbm \
1416
gcc \
1517
musl-dev \
1618
make \
@@ -22,6 +24,8 @@ COPY demo.c Makefile topaz-8.otf *.png music.mod* ./
2224

2325
RUN make
2426

27+
# Default to X11, but can be overridden for framebuffer
2528
ENV DISPLAY=:0
29+
ENV SDL_VIDEODRIVER=x11
2630

2731
CMD ["./demo"]

README.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,57 @@ docker run --rm -it \
116116
docker compose up
117117
```
118118

119+
### Run without X11 (Direct Framebuffer)
120+
121+
For embedded systems or headless setups without X11 (e.g., Raspberry Pi, embedded Linux):
122+
123+
**Using KMS/DRM (recommended for modern systems):**
124+
125+
```bash
126+
# Requires access to DRI and input devices
127+
docker run --rm -it \
128+
--privileged \
129+
-v /dev/dri:/dev/dri \
130+
-v /dev/input:/dev/input \
131+
-e SDL_VIDEODRIVER=kmsdrm \
132+
-e SDL_AUDIODRIVER=alsa \
133+
ghcr.io/kernelkit/demo:latest
134+
```
135+
136+
**Using legacy framebuffer:**
137+
138+
```bash
139+
docker run --rm -it \
140+
--privileged \
141+
-v /dev/fb0:/dev/fb0 \
142+
-v /dev/input:/dev/input \
143+
-e SDL_VIDEODRIVER=fbcon \
144+
-e SDL_FBDEV=/dev/fb0 \
145+
-e SDL_AUDIODRIVER=alsa \
146+
ghcr.io/kernelkit/demo:latest
147+
```
148+
149+
**On Raspberry Pi 4:**
150+
151+
```bash
152+
# KMS/DRM mode (best performance)
153+
docker run --rm -it \
154+
--privileged \
155+
-v /dev/dri:/dev/dri \
156+
-v /dev/input:/dev/input \
157+
-e SDL_VIDEODRIVER=kmsdrm \
158+
-e SDL_AUDIODRIVER=alsa \
159+
ghcr.io/kernelkit/demo:latest \
160+
./demo -f
161+
```
162+
163+
**Notes:**
164+
- `SDL_VIDEODRIVER=kmsdrm` uses kernel mode setting (modern, hardware accelerated)
165+
- `SDL_VIDEODRIVER=fbcon` uses legacy framebuffer (fallback)
166+
- `--privileged` gives access to GPU and input devices
167+
- `-f` flag runs in fullscreen mode (recommended for framebuffer)
168+
- For audio without PulseAudio, use `SDL_AUDIODRIVER=alsa` or omit for no audio
169+
119170
## Building from Source
120171

121172
### Dependencies

0 commit comments

Comments
 (0)