xrantui
TUI för att placera ut skärmar med notcurses och Xrandr i C.
Syfte
Interaktivt verktyg som kör i terminalen (inom X). Användaren väljer skärm, flyttar den med piltangenter och applicerar konfigurationen via xrandr.
Stack
- Språk: C (C11)
- TUI: notcurses
- Skärminformation: libxrandr / libx11
- Build: gcc + pkg-config
Bygg
gcc main.c -o xrantui \
$(pkg-config --libs --cflags notcurses) \
-lX11 -lXrandr
Projektstruktur
xrantui/
├── CLAUDE.md
├── main.c # entry point, event loop
├── monitors.c # hämta/sätta skärminfo via Xrandr
├── monitors.h
├── draw.c # rita skärmar med notcurses
└── draw.h
Datastruktur
typedef struct {
char name[64]; // output-namn, t.ex. "HDMI-1"
int x, y; // position i pixlar
int w, h; // upplösning i pixlar
int connected; // RR_Connected
} Monitor;
Keybindings
| Tangent | Funktion |
|---|---|
| Tab | Växla vald skärm |
| Piltangenter | Flytta skärm (ett steg = scale px) |
| Enter | Applicera med xrandr |
| q | Avsluta |
Skalfaktor
Variabeln scale styr hur många pixlar en terminalcell representerar. Standard: 40. Justera om skärmarna inte får plats eller blir för små.
Applicering
Applicerar via system() med ett genererat xrandr-kommando:
xrandr --output HDMI-1 --pos 320x1080 --auto
Beroenden (Debian)
sudo apt install libnotcurses-dev libnotcurses-core-dev \
libx11-dev libxrandr-dev
Känt att bygga vidare på
- Snapping — magnetism när skärmar är nära varandra
- Batch-apply — ändra alla skärmar innan xrandr anropas
- Spara ut
monitors.shistället för att köra direkt - Visa upplösning och Hz inuti skärmrektangeln
- Stöd för att sätta primärskärm (
--primary)