--- title: IPC description: Control mangowm programmatically using mmsg. --- # mmsg(1) - User Manual `mmsg` is the command-line interface for the Mango compositor's Inter-Process Communication (IPC) system. It allows users and scripts to query the state of the compositor or subscribe to real-time events. ## SYNOPSIS `mmsg [arguments...]` ## DESCRIPTION `mmsg` acts as a client that connects to the Mango compositor via a Unix domain socket defined by the `MANGO_INSTANCE_SIGNATURE` environment variable. It supports two primary modes of operation: 1. **One-shot Request (`get`)**: Sends a query to the compositor, receives a single JSON response, and terminates. 2. **Persistent Stream (`watch`)**: Subscribes to a specific state, receiving continuous JSON updates whenever that state changes. ## ENVIRONMENT VARIABLES * **`MANGO_INSTANCE_SIGNATURE`**: Must be set to the path of the Unix socket created by the running Mango instance. This is typically handled automatically when running `mmsg` from within a terminal spawned by the compositor. ## COMMANDS ### GET (One-Shot Queries) | Command | Description | | :--- | :--- | | `get version` | Returns the current version of the compositor. | | `get keymode` | Returns the current active keyboard mode (e.g., normal, insert). | | `get keyboardlayout` | Returns the active XKB layout (abbreviated). | | `get monitor ` | Returns full JSON details for a specific monitor. | | `get focusing-client` | Returns full JSON details for the client currently in focus. | | `get client ` | Returns full JSON details for a client with the given ID. | | `get tag ` | Queries status of a specific tag on a monitor. | | `get all-clients` | Returns a JSON array of all active clients. | | `get all-monitors` | Returns a JSON array of all connected monitors. | | `get all-tags` | Returns a JSON object containing the status of all tags. | | `get last_open_surface ` | Returns the last focused surface name for a monitor. | *Example:* ```bash mmsg get monitor eDP-1 mmsg get all-clients mmsg get all-monitors ``` ### WATCH (Event Subscription) Subscribes the client to real-time updates. When the state changes, the server pushes a new JSON object to the output stream. * `watch monitor ` * `watch focusing-client` * `watch client ` * `watch tags ` * `watch all-monitors` * `watch all-tags` * `watch all-clients` * `watch keymode` * `watch keyboardlayout` * `watch last_open_surface ` *Example:* ```bash # watch all monitors mmsg watch all-monitors # watch all tags mmsg watch all-tags ``` ### DISPATCH Allows sending commands to the compositor to alter its state. * `dispatch ,[args...] [client,]` *Example:* ```bash # operate specific client by id mmsg dispatch exchange_client,left client,375 # operate current client mmsg dispatch exchange_client,left ````