mangowm
V0.18.3PatchesV0.15.0Configuration

Monitors

Manage display outputs, resolution, scaling, and tearing.

Monitor Rules

You can configure each display output individually using the monitor_rule keyword.

Syntax:

monitor_rule=name:Values,Parameter:Values,Parameter:Values

Info: If any of the matching fields (name, make, model, serial) are set, all of the set ones must match to be considered a match. Use wlr-randr to get your monitor's name, make, model, and serial.

Parameters

ParameterTypeValuesDescription
namestringAnyMatch by monitor name (supports regex)
makestringAnyMatch by monitor manufacturer
modelstringAnyMatch by monitor model
serialstringAnyMatch by monitor serial number
widthinteger0-9999Monitor width
heightinteger0-9999Monitor height
refreshfloat0.001-9999.0Monitor refresh rate
xinteger0-99999X position
yinteger0-99999Y position
scalefloat0.01-100.0Monitor scale
vrrinteger0, 1Enable variable refresh rate
hdrinteger0, 1Enable hdr support
rrinteger0-7Monitor transform
custominteger0, 1Enable custom mode (not supported on all displays — may cause black screen)
disableinteger0, 1Disable the monitor

Transform Values

ValueRotation
0No transform
190° counter-clockwise
2180° counter-clockwise
3270° counter-clockwise
4180° vertical flip
5Flip + 90° counter-clockwise
6Flip + 180° counter-clockwise
7Flip + 270° counter-clockwise

Critical: If you use XWayland applications, never use negative coordinates for your monitor positions. This is a known XWayland bug that causes click events to malfunction. Always arrange your monitors starting from 0,0 and extend into positive coordinates.

Note: that "name" is a regular expression. If you want an exact match, you need to add ^ and $ to the beginning and end of the expression, for example, ^eDP-1$ matches exactly the string eDP-1.

Examples

# Laptop display: 1080p, 60Hz, positioned at origin
monitor_rule=name:^eDP-1$,width:1920,height:1080,refresh:60,x:0,y:10

# Match by make and model instead of name
monitor_rule=make:Chimei Innolux Corporation,model:0x15F5,width:1920,height:1080,refresh:60,x:0,y:0

# Virtual monitor with pattern matching
monitor_rule=name:HEADLESS-.*,width:1920,height:1080,refresh:60,x:1926,y:0,scale:1,rr:0,vrr:0

Monitor Spec Format

Several commands (focusmon, tagmon, disable_monitor, enable_monitor, toggle_monitor, viewcrossmon, tagcrossmon) accept a monitor_spec string to identify a monitor.

Format:

name:xxx&&make:xxx&&model:xxx&&serial:xxx
  • Any field can be omitted and there is no order requirement.
  • If all fields are omitted, the string is treated as the monitor name directly (e.g., eDP-1).
  • Use wlr-randr to find your monitor's name, make, model, and serial.

Examples:

# By name (shorthand)
mmsg dispatch toggle_monitor,eDP-1

# By make and model
mmsg dispatch toggle_monitor,make:Chimei Innolux Corporation&&model:0x15F5

# By serial
mmsg dispatch toggle_monitor,serial:12345678

Tearing (Game Mode)

Tearing allows games to bypass the compositor's VSync for lower latency.

SettingDefaultDescription
allow_tearing0Global tearing control: 0 (Disable), 1 (Enable), 2 (Fullscreen only).

HDR

SettingDefaultDescription
hdr_depth2Set the hdr depth for the current display. 0 is Default, 1 is HDR8, 2 is HDR10.
  • you should enable HDR in monitor_rule first, refer to Monitors — Monitor Rules
  • you must set env=WLR_RENDERER,vulkan before mango starts.

for example(must relogin once after setting):

env=WLR_RENDERER,vulkan
monitor_rule=name:eDP-1,model:0x15F5,width:1920,height:1080,refresh:60,x:0,y:0,scale:1,vrr:0,rr:0:hdr:1

Configuration

Enable Globally:

allow_tearing=1

Enable per Window:

Use a window rule to force tearing for specific games.

window_rule=force_tearing:1,title:vkcube

Tearing Behavior Matrix

force_tearing \ allow_tearingDISABLED (0)ENABLED (1)FULLSCREEN_ONLY (2)
UNSPECIFIED (0)Not AllowedFollows tearing_hintOnly fullscreen follows tearing_hint
ENABLED (1)Not AllowedAllowedOnly fullscreen allowed
DISABLED (2)Not AllowedNot AllowedNot Allowed

Graphics Card Compatibility

Warning: Some graphics cards require setting the WLR_DRM_NO_ATOMIC environment variable before mango starts to successfully enable tearing.

Add this to config and relogin mango:

env=WLR_DRM_NO_ATOMIC,1

GPU Compatibility

If mango cannot display correctly or shows a black screen, try selecting a specific GPU:

# Use a single GPU
WLR_DRM_DEVICES=/dev/dri/card1 mango

# Use multiple GPUs
WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1 mango

Some GPUs have compatibility issues with sync_obj_enable=1 — it may crash apps like kitty that use syncobj. Set env=WLR_DRM_NO_ATOMIC,1 in config.conf and relogin to resolve this.


Power Management

You can control monitor power using the mmsg IPC tool.

Notice: This command does not remove the monitor, it only turns it off. if you want completely remove monitor, just use wlr-randr

# Turn off
mmsg dispatch disable_monitor,eDP-1

# Turn on
mmsg dispatch enable_monitor,eDP-1

# Toggle
mmsg dispatch toggle_monitor,eDP-1

You can also use wlr-randr for monitor management:

# remove a monitor
wlr-randr --output eDP-1 --off

# add a monitor
wlr-randr --output eDP-1 --on

# Show all monitors spec
wlr-randr

Screen Scale

  • If you do not use XWayland apps, you can use monitor rules or wlr-randr to set a global monitor scale.
  • If you are using XWayland apps, it is not recommended to set a global monitor scale.

You can set scale like this, for example with a 1.4 factor.

Dependencies:

yay -S xorg-xrdb
yay -S xwayland-satellite

In config file:

env=QT_AUTO_SCREEN_SCALE_FACTOR,1
env=QT_WAYLAND_FORCE_DPI,140

In autostart:

echo "Xft.dpi: 140" | xrdb -merge
gsettings set org.gnome.desktop.interface text-scaling-factor 1.4

Edit autostart for XWayland:

# Start xwayland
/usr/sbin/xwayland-satellite :11 &
# Apply scale 1.4 for xwayland
sleep 0.5s && echo "Xft.dpi: 140" | xrdb -merge

Using xwayland-satellite to Prevent Blurry XWayland Apps

If you use fractional scaling, you can use xwayland-satellite to automatically scale XWayland apps to prevent blurriness, for example with a scale of 1.4.

Dependencies:

yay -S xwayland-satellite

In config file:

env=DISPLAY,:2
exec_once=xwayland-satellite :2
monitor_rule=name:eDP-1,width:1920,height:1080,refresh:60,x:0,y:0,scale:1.4,vrr:0,rr:0

Warning: Use a DISPLAY value other than :1 to avoid conflicting with mangowm.


Virtual Monitors

You can create and manage virtual displays through IPC commands:

# Create virtual output
mmsg dispatch create_virtual_output

# Destroy all virtual outputs
mmsg dispatch destroy_all_virtual_output

You can configure virtual monitors using wlr-randr:

# Show all monitors
wlr-randr

# Configure virtual monitor
wlr-randr --output HEADLESS-1 --pos 1921,0 --scale 1 --custom-mode 1920x1080@60Hz

Virtual monitors can be used for screen sharing with tools like Sunshine and Moonlight, allowing other devices to act as extended monitors.

Last updated on

On this page