IPC-Referenz - MorgenWM

IPC-Referenz

English Version

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.

Socket-Pfad

Der Socket befindet sich standardmäßig unter $XDG_RUNTIME_DIR/morgenwm.sock. Überschreiben lässt sich dies mit der $NIRI_SOCKET-Umgebungsvariable.

Protokoll

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

Abfragen werden als JSON-String gesendet (z.B. "Outputs"). Antworten sind bei Erfolg in {"Ok": ...} verpackt, bei Fehler in {"Err": "Nachricht"}.

morgenwm_msg outputs

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.

morgenwm_msg workspaces

Gibt alle Workspaces mit ID, Name, Ausgang und Fokusstatus zurück.

morgenwm_msg workspaces

morgenwm_msg windows

Gibt alle verwalteten Fenster mit ID, Titel, App-ID, Workspace und Fokusstatus zurück.

morgenwm_msg windows

morgenwm_msg focused-window

Gibt das aktuell fokussierte Fenster zurück (oder null).

morgenwm_msg focused-window

morgenwm_msg overview-state

Gibt zurück, ob die Übersichtsansicht geöffnet ist.

morgenwm_msg overview-state

morgenwm_msg keyboard-layouts

Gibt die aktuelle Tastaturlayout-Konfiguration zurück.

morgenwm_msg keyboard-layouts

Aktionen

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.

Fenster-Aktionen

# 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-Aktionen

# 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

Start-Aktionen

# Befehl starten (Array-Form)
morgenwm_msg action spawn -- foot

# Shell-Befehl starten (String-Form)
morgenwm_msg action spawn-sh --command "echo hallo"

Sitzungs-Aktionen

# 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

Event-Stream

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:

EreignisBeschreibung
WorkspacesChangedWorkspace-Liste hat sich geändert (erstellt, entfernt, umbenannt, fokussiert)
WindowsChangedFensterliste hat sich geändert (geöffnet, geschlossen, verschoben, fokussiert)
OutputsChangedAusgangsliste hat sich geändert (verbunden, getrennt, Moduswechsel)
OverviewOpenedOrClosedÜbersichtsansicht wurde umgeschaltet

Beispiel: Ereignisse mit jq überwachen

morgenwm_msg event-stream | jq --unbuffered '.'

Beispiel: Auf Workspace-Änderungen reagieren

morgenwm_msg event-stream | while read -r line; do
  echo "$line" | jq -r 'select(.WorkspacesChanged) | .WorkspacesChanged.workspaces[] | "\(.id) \(.name // "")"'
done

Bar-Integration

MorgenWMs Niri-kompatible IPC bedeutet, dass jede Bar funktioniert, die Niri unterstützt.