Skip to content

Configuration: Debug Options

github-actions[bot] edited this page Aug 23, 2024 · 11 revisions

Overview

Niri has several options that are only useful for debugging, or are experimental and have known issues. They are not meant for normal use.

Caution

These options are not covered by the config breaking change policy. They can change or stop working at any point with little notice.

Here are all the options at a glance:

debug {
    preview-render "screencast"
    // preview-render "screen-capture"
    enable-overlay-planes
    disable-cursor-plane
    disable-direct-scanout
    render-drm-device "/dev/dri/renderD129"
    dbus-interfaces-in-non-session-instances
    wait-for-frame-completion-before-queueing
    emulate-zero-presentation-time
    disable-resize-throttling
    disable-transactions
}

binds {
    Mod+Shift+Ctrl+T { toggle-debug-tint; }
    Mod+Shift+Ctrl+O { debug-toggle-opaque-regions; }
    Mod+Shift+Ctrl+D { debug-toggle-damage; }
}

preview-render

Make niri render the monitors the same way as for a screencast or a screen capture.

Useful for previewing the block-out-from window rule.

debug {
    preview-render "screencast"
    // preview-render "screen-capture"
}

enable-overlay-planes

Enable direct scanout into overlay planes. May cause frame drops during some animations on some hardware (which is why it is not the default).

Direct scanout into the primary plane is always enabled.

debug {
    enable-overlay-planes
}

disable-cursor-plane

Disable the use of the cursor plane. The cursor will be rendered together with the rest of the frame.

Useful to work around driver bugs on specific hardware.

debug {
    disable-cursor-plane
}

disable-direct-scanout

Disable direct scanout to both the primary plane and the overlay planes.

debug {
    disable-direct-scanout
}

render-drm-device

Override the DRM device that niri will use for all rendering.

You can set this to make niri use a different primary GPU than the default one.

debug {
    render-drm-device "/dev/dri/renderD129"
}

dbus-interfaces-in-non-session-instances

Make niri create its D-Bus interfaces even if it's not running as a --session.

Useful for testing screencasting changes without having to relogin.

The main niri instance will not currently take back the interfaces when you close the test instance, so you will need to relogin in the end to make screencasting work again.

debug {
    dbus-interfaces-in-non-session-instances
}

wait-for-frame-completion-before-queueing

Wait until every frame is done rendering before handing it over to DRM.

Useful for diagnosing certain synchronization and performance problems.

debug {
    wait-for-frame-completion-before-queueing
}

emulate-zero-presentation-time

Emulate zero (unknown) presentation time returned from DRM.

This is a thing on NVIDIA proprietary drivers, so this flag can be used to test that niri doesn't break too hard on those systems.

debug {
    emulate-zero-presentation-time
}

disable-resize-throttling

Since: 0.1.9

Disable throttling resize events sent to windows.

By default, when resizing quickly (e.g. interactively), a window will only receive the next size once it has made a commit for the previously requested size. This is required for resize transactions to work properly, and it also helps certain clients which don't batch incoming resizes from the compositor.

Disabling resize throttling will send resizes to windows as fast as possible, which is potentially very fast (for example, on a 1000 Hz mouse).

debug {
    disable-resize-throttling
}

disable-transactions

Since: 0.1.9

Disable transactions (resize and close).

By default, windows which must resize together, do resize together. For example, all windows in a column must resize at the same time to maintain the combined column height equal to the screen height, and to maintain the same window width.

Transactions make niri wait until all windows finish resizing before showing them all on screen in one, synchronized frame. For them to work properly, resize throttling shouldn't be disabled (with the previous debug flag).

debug {
    disable-transactions
}

Key Bindings

These are not debug options, but rather key bindings.

toggle-debug-tint

Tints all surfaces green, unless they are being directly scanned out.

Useful to check if direct scanout is working.

binds {
    Mod+Shift+Ctrl+T { toggle-debug-tint; }
}

debug-toggle-opaque-regions

Since: 0.1.6

Tints regions marked as opaque with blue and the rest of the render elements with red.

Useful to check how Wayland surfaces and internal render elements mark their parts as opaque, which is a rendering performance optimization.

binds {
    Mod+Shift+Ctrl+O { debug-toggle-opaque-regions; }
}

debug-toggle-damage

Since: 0.1.6

Tints damaged regions with red.

binds {
    Mod+Shift+Ctrl+D { debug-toggle-damage; }
}