-
Notifications
You must be signed in to change notification settings - Fork 133
ipc
mangowm includes a powerful IPC (Inter-Process Communication) tool called mmsg. This allows you to query the window manager's state, watch for events, and execute commands from external scripts.
The general syntax for mmsg is:
mmsg [-OTLq]
mmsg [-o <output>] -s [-t <tags>] [-l <layout>] [-c <tags>] [-d <cmd>,<arg1>,<arg2>,<arg3>,<arg4>,<arg5>]
mmsg [-o <output>] (-g | -w) [-OotlcvmfxekbA]| Flag | Description |
|---|---|
-q |
Quit mangowm. |
-g |
Get values (tags, layout, focused client). |
-s |
Set values (switch tags, layouts). |
-w |
Watch mode (streams events). |
-O |
Get all output (monitor) information. |
-T |
Get number of tags. |
-L |
Get all available layouts. |
-o |
Select output (monitor). |
-t |
Get/set selected tags (set with [+-^.]). |
-l |
Get/set current layout. |
-c |
Get title and appid of focused client. |
-v |
Get visibility of statusbar. |
-m |
Get fullscreen status. |
-f |
Get floating status. |
-d |
Dispatch an internal command. |
-x |
Get focused client geometry. |
-e |
Get the name of the last focused layer. |
-k |
Get current keyboard layout. |
-b |
Get current keybind mode. |
-A |
Get scale factor of monitor. |
You can perform arithmetic on tags using the -t flag with -s (set).
# Switch to Tag 1
mmsg -t 1
# Add Tag 2 to current view (Multiview)
mmsg -s -t 2+
# Remove Tag 2 from current view
mmsg -s -t 2-
# Toggle Tag 2
mmsg -s -t 2^Switch layouts programmatically. Layout codes: S (Scroller), T (Tile), G (Grid), M (Monocle), K (Deck), CT (Center Tile), RT (Right Tile), VS (Vertical Scroller), VT (Vertical Tile), VG (Vertical Grid), VK (Vertical Deck), TG (TGMix).
# Switch to Scroller
mmsg -l "S"
# Switch to Tile
mmsg -l "T"Any command available in config.conf keybindings can be run via IPC.
# Close the focused window
mmsg -d killclient
# Resize window by +10 width
mmsg -d resizewin,+10,0
# Toggle fullscreen
mmsg -d togglefullscreen
# Disable a monitor power
mmsg -d disable_monitor,eDP-1Use -g or -w to build custom status bars or automation scripts.
# Watch for all message changes
mmsg -w
# Get all messages without watch
mmsg -g
# Watch focused client appid and title
mmsg -w -c
# Get all available outputs
mmsg -O
# Get all tags message
mmsg -g -t
# Get current focused client message
mmsg -g -c
# Get current keyboard layout
mmsg -g -k
# Get current keybind mode
mmsg -g -b
# Get scale factor of current monitor
mmsg -g -A- State: 0 → none, 1 → active, 2 → urgent
Example output:
| Monitor | Tag Number | Tag State | Clients in Tag | Focused Client |
|---|---|---|---|---|
| eDP-1 | tag 2 | 0 | 1 | 0 |
| Monitor | occupied tags mask | active tags mask | urgent tags mask |
|---|---|---|---|
| eDP-1 | 14 | 6 | 0 |
You can create headless outputs for screen mirroring or remote desktop access (e.g., Sunshine/Moonlight).
# Create a virtual output
mmsg -d create_virtual_output
# Configure it (set resolution)
wlr-randr --output HEADLESS-1 --pos 1920,0 --mode 1920x1080@60Hz
# Destroy all virtual outputs
mmsg -d destroy_all_virtual_output