使用说明
Cortex Window Manager (C Implementation)
Ziel
Ein X11 Window Manager in C mit funktionierendem Fokus-Management, den ein LLM über MCP-Tools sehen und bedienen kann (Fenster, Bash, Shared Terminal).
Struktur
Cortex-Desktop/
├── main.c # Entry point, startet Programme
├── wm.c/h # WM Core (Event-Loop, IPC, Toolbar-Aktionen)
├── window.c/h # Window Management (Reparenting, FOKUS!)
├── ui.c/h # Cairo UI-Rendering (Toolbar, Titlebar, Statusbar)
├── Makefile # Build (WM + tools)
├── cortex.sh # Starter-Skript (historisch, erwartet alten Cortex-Server)
├── tools/ # IPC-/MCP-Werkzeuge
│ ├── ccmd.c # IPC-Client (list/focus/close/move/resize/spawn/exit)
│ ├── cbash.c/ # Bash-Client + Daemon (sichtbares Terminal-Fenster)
│ │ cbashd.c
│ ├── cterm.c/ # Shared-Terminal-Client + PTY-Daemon (LLM + Mensch
│ │ ctermd.c # teilen sich dasselbe Terminal)
│ ├── cexe.c # Ausführen-Dialog
│ ├── cmcp.c # Control-Panel für MCP-Server-Instanzen
│ └── cmcpd # MCP-Server (Python, HTTPS + Auth, 17 Tools)
└── doku/ # Dokumentation
Der WM findet seine Tools relativ zum eigenen Binary (/proc/self/exe) — das Repo kann
irgendwo liegen. Hartkodierte /home/cortex/…-Pfade stecken noch in cbash.c/cterm.c
(Daemon-Autostart), cmcpd (Tool-Pfade) und cortex.sh.
Kritisches Konzept: FOKUS
Der Fehler in allen bisherigen Versionen:
- Fenster werden "raised" aber nicht fokussiert
XSetInputFocus()fehlt!
Die Lösung in window.c (window_focus()):
// 1. Alten Fokus entfernen, 2. neuen Fokus merken, dann:
XSetInputFocus(display, win->client_window, RevertToPointerRoot, CurrentTime);
XRaiseWindow(display, win->frame_window);
Diese Funktion muss aufgerufen werden:
- Bei jedem Maus-Click auf ein Fenster
- Wenn ein neues Fenster erstellt wird
Abhängigkeiten
sudo apt install libx11-dev libcairo2-dev python3 build-essential
Build
make # WM + alle Tools
Run
# In einer X11-Session oder Xephyr:
./cortex-wm
# Test in Xephyr (nested X server auf :1):
make test
Dokumentation
Vollständige Dokumentation im doku/ Ordner:
- doku/INDEX.md — Dokumentationsübersicht (Start hier!)
- doku/ARCHITEKTUR.md — Detaillierte Systemarchitektur
- doku/API-REFERENCE.md — IPC-Kommando-Referenz
- doku/TOOLS.md — Werkzeuge + MCP-Tools
- doku/ENTWICKLUNG.md — Development Guide
- doku/STATUS.md — Doku-/Projekt-Stand
Referenzen
- TinyWM: Minimaler WM, aber OHNE Fokus-Management
- dwm (suckless): Zeigt wie focus() und setfocus() richtig implementiert werden
- cortex-wm7 (Go): Unsere Go-Version mit Fokus-Bug (fehlendes XSetInputFocus)