窗口管理器

一个X11窗口管理器,具有焦点管理功能,可通过LLM和MCP工具进行控制和操作。

  • by atrix86
  • C
  • 本地部署
  • 更新于
在 GitHub 查看 atrix86/Cortex-Desktop

使用说明

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:

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)