MorgenWM stellt eine Niri-kompatible IPC-Schnittstelle über einen Unix-Domain-Socket bereit. Jedes Bar oder Tool, das das Niri-IPC-Protokoll spricht, funktioniert sofort.
Der Socket befindet sich standardmäßig unter $XDG_RUNTIME_DIR/morgenwm.sock. Überschreiben lässt sich dies mit der $NIRI_SOCKET-Umgebungsvariable.
Die Kommunikation verwendet JSON-Zeilen (durch Newline getrennt) über einen Unix-Stream-Socket. Jede Anfrage ist eine einzelne JSON-Zeile; jede Antwort ist eine einzelne JSON-Zeile.
Abfragen werden als JSON-String gesendet (z.B. "Outputs"). Antworten sind bei Erfolg in {"Ok": ...} verpackt, bei Fehler in {"Err": "Nachricht"}.
Gibt alle angeschlossenen Ausgänge mit aktuellem Modus, Position und physischen Abmessungen zurück.
morgenwm_msg outputs
Antwortstruktur:
{
"Ok": {
"Outputs": {
"DP-1": {
"name": "DP-1",
"connected": true,
"make": "ASUSTek COMPUTER INC",
"model": "VG27AQML1A",
"serial": "S9LMQS168079",
"physical_size": [600, 340],
"modes": [{"width": 2560, "height": 1440, "refresh_rate": 240001, "is_preferred": true}],
"current_mode": 0,
"refresh_rate": 240001,
"x": 0, "y": 0,
"width": 2560, "height": 1440,
"scale": 1.0,
"transform": "Normal"
}
}
}
}
Hinweis: make, model und serial hängen davon ab, ob deine Monitore EDID über die Wayland-wl_output-Beschreibung bereitstellen. Falls nicht, werden diese als "Unknown" / null angezeigt.
Gibt alle Workspaces mit ID, Name, Ausgang und Fokusstatus zurück.
morgenwm_msg workspaces
Gibt alle verwalteten Fenster mit ID, Titel, App-ID, Workspace und Fokusstatus zurück.
morgenwm_msg windows
Gibt das aktuell fokussierte Fenster zurück (oder null).
morgenwm_msg focused-window
Gibt zurück, ob die Übersichtsansicht geöffnet ist.
morgenwm_msg overview-state
Gibt die aktuelle Tastaturlayout-Konfiguration zurück.
morgenwm_msg keyboard-layouts
Aktionen werden als JSON-Objekte mit einem "Action"-Schlüssel gesendet. Antworten geben {"Ok": "Handled"} bei Erfolg zurück.
Alle Aktionen sind auch über morgenwm_msg action <Unterbefehl> verfügbar.
# Fokussiertes Fenster schließen morgenwm_msg action close-window # Bestimmtes Fenster nach ID schließen morgenwm_msg action close-window --id 42 # Bestimmtes Fenster nach ID fokussieren morgenwm_msg action focus-window --id 42 # Vollbild umschalten morgenwm_msg action fullscreen-window # Floating umschalten morgenwm_msg action toggle-window-floating # Übersichtsansicht umschalten morgenwm_msg action toggle-overview
# Workspace nach Index fokussieren (1-basiert) morgenwm_msg action focus-workspace 3 # Nächsten/vorherigen Workspace fokussieren morgenwm_msg action focus-workspace-up morgenwm_msg action focus-workspace-down # Workspace-Name setzen morgenwm_msg action set-workspace-name --name "dev" # Workspace-Name entfernen morgenwm_msg action unset-workspace-name
# Spalte links/rechts fokussieren morgenwm_msg action focus-column-left morgenwm_msg action focus-column-right morgenwm_msg action focus-column-first morgenwm_msg action focus-column-last # Fenster hoch/runter im Frame fokussieren morgenwm_msg action focus-window-up morgenwm_msg action focus-window-down # Spalte nach links/rechts verschieben morgenwm_msg action move-column-left morgenwm_msg action move-column-right # Fenster verschieben morgenwm_msg action move-window-up morgenwm_msg action move-window-down morgenwm_msg action move-window-left morgenwm_msg action move-window-right
# Befehl starten (Array-Form) morgenwm_msg action spawn -- foot # Shell-Befehl starten (String-Form) morgenwm_msg action spawn-sh --command "echo hallo"
# MorgenWM beenden (River wird aufgefordert, die Sitzung zu beenden) morgenwm_msg action quit # Konfigurationsdatei neu laden und Keybindings + Tastaturlayout live neu # anwenden (entspricht dem Speichern der Konfigurationsdatei, aber explizit). # Nützlich, nachdem ein Parse-Fehler behoben wurde, der die alte Konfiguration # aktiv ließ. morgenwm_msg action reload-config
Abonniere Live-Zustandsänderungen. Die erste Antwort enthält den aktuellen Zustand; nachfolgende Zeilen werden bei Zustandsänderungen gepusht.
morgenwm_msg event-stream
Ereignisse sind JSON-Objekte mit einem dieser Schlüssel:
| Ereignis | Beschreibung |
|---|---|
| WorkspacesChanged | Workspace-Liste hat sich geändert (erstellt, entfernt, umbenannt, fokussiert) |
| WindowsChanged | Fensterliste hat sich geändert (geöffnet, geschlossen, verschoben, fokussiert) |
| OutputsChanged | Ausgangsliste hat sich geändert (verbunden, getrennt, Moduswechsel) |
| OverviewOpenedOrClosed | Übersichtsansicht wurde umgeschaltet |
morgenwm_msg event-stream | jq --unbuffered '.'
morgenwm_msg event-stream | while read -r line; do echo "$line" | jq -r 'select(.WorkspacesChanged) | .WorkspacesChanged.workspaces[] | "\(.id) \(.name // "")"' done
MorgenWMs Niri-kompatible IPC bedeutet, dass jede Bar funktioniert, die Niri unterstützt.