Files
niri/docs/wiki/FAQ.md
2025-09-24 08:31:01 +03:00

7.4 KiB

How to disable client-side decorations/make windows rectangular?

Uncomment the prefer-no-csd setting at the top level of the config, and then restart your apps. Then niri will ask windows to omit client-side decorations, and also inform them that they are being tiled (which makes some windows rectangular, even if they cannot omit the decorations).

Note that currently this will prevent edge window resize handles from showing up. You can still resize windows by holding Mod and the right mouse button.

Why are transparent windows tinted? / Why is the border/focus ring showing up through semitransparent windows?

Uncomment the prefer-no-csd setting at the top level of the config, and then restart your apps. Niri will draw focus rings and borders around windows that agree to omit their client-side decorations.

By default, focus ring and border are rendered as a solid background rectangle behind windows. That is, they will show up through semitransparent windows. This is because windows using client-side decorations can have an arbitrary shape.

You can also override this behavior with the draw-border-with-background window rule.

How to enable rounded corners for all windows?

Put this window rule in your config:

window-rule {
    geometry-corner-radius 12
    clip-to-geometry true
}

For more information, check the geometry-corner-radius window rule.

How to hide the "Important Hotkeys" pop-up at the start?

Put this into your config:

hotkey-overlay {
    skip-at-startup
}

How to run X11 apps like Steam or Discord?

To run X11 apps, you can use xwayland-satellite. Check the Xwayland wiki page for instructions.

Keep in mind that you can run many Electron apps such as VSCode natively on Wayland by passing the right flags, e.g. code --ozone-platform-hint=auto

Why doesn't niri integrate Xwayland like other compositors?

A combination of factors:

  • Integrating Xwayland is quite a bit of work, as the compositor needs to implement parts of an X11 window manager.
  • You need to appease the X11 ideas of windowing, whereas for niri I want to have the best code for Wayland.
  • niri doesn't have a good global coordinate system required by X11.
  • You tend to get an endless stream of X11 bugs that take further time and effort away from other tasks.
  • There aren't actually that many X11-only clients nowadays, and xwayland-satellite takes perfect care of most of those.
  • niri isn't a Big Serious Desktop Environment which Must Support All Use Cases (and is Backed By Some Corporation).

All in all, the situation works out in favor of avoiding Xwayland integration.

Since: 25.08 niri has seamless built-in xwayland-satellite integration that by and large works as well as built-in Xwayland in other compositors, solving the hurdle of having to set it up manually.

I wouldn't be too surprised if, down the road, xwayland-satellite becomes the standard way of integrating Xwayland into new compositors, since it takes on the bulk of the annoying work, and isolates the compositor from misbehaving clients.

Can I enable blur behind semitransparent windows?

Not yet, follow/upvote this issue.

There's also a PR adding blur to niri which you can build and run manually. Keep in mind that it's an experimental implementation that may have problems and performance concerns.

Can I make a window sticky / pinned / always on top / appear on all workspaces?

Not yet, follow/upvote this issue.

You can emulate this with a script that uses the niri IPC. For example, nirius seems to have this feature (toggle-follow-mode).

How do I make the Bitwarden window in Firefox open as floating?

Firefox seems to first open the Bitwarden window with a generic Firefox title, and only later change the window title to Bitwarden, so you can't effectively target it with an open-floating window rule.

You'll need to use a script, for example this one or other ones (search niri issues and discussions for Bitwarden).

Can I open a window directly in the current column / in the same column as another window?

No, but you can script the behavior you want with the niri IPC. Listen to the event stream for a new window opening, then call an action like consume-or-expel-window-left.

Adding this directly to niri is challenging:

  • The act of "opening a window directly in some column" by itself is quite involved. Niri will have to compute the exact initial window size provided how other windows in a column would resize in response. This logic exists, but it isn't directly pluggable to the code computing a size for a new window. Then, it'll need to handle all sorts of edge cases like the column disappearing, or new windows getting added to the column, before the target window had a chance to appear.
  • How do you indicate if a new window should spawn in an existing column (and in which one), as opposed to a new column? Different people seem to have different needs here (including very complex rules based on parent PID, etc.), and it's very unclear design-wise what kind of (simple) setting is actually needed and would be useful. See also https://github.com/YaLTeR/niri/discussions/1125.

Why does moving the mouse against a monitor edge focus the next window, but only sometimes?

This can happen with focus-follows-mouse. When using client-side decorations, windows are supposed to have some margins outside their geometry for the mouse resizing handles. These margins "peek out" of the monitor edges since they're outside the window geometry, and focus-follows-mouse triggers when the mouse crosses them.

It doesn't always happen:

  • Some toolkits don't put resize handles outside the window geometry. Then there's no input area outside, so nowhere for focus-follows-mouse to trigger.
  • If the current window has its own margin for resizing, and it extends all the way to the monitor edge, then focus-follows-mouse won't trigger because the mouse will never leave the current window.

To fix this, you can:

  • Use focus-follows-mouse max-scroll-amount="0%", which will prevent focus-follows-mouse from triggering when it would cause scrolling.
  • Set prefer-no-csd which will generally cause clients to remove those resizing margins.

How do I recover from a dead screen locker / from a red screen?

When your screen locker dies, you will be left with a red screen. This is niri's locked session background.

You can recover from this by spawning a new screen locker. One way is to switch to a different TTY (with a shortcut like CtrlAltF3) and spawning a screen locker to niri's Wayland display, e.g. WAYLAND_DISPLAY=wayland-1 swaylock.

Another way is to set allow-when-locked=true on your screen locker bind, then you can press it on the red screen to get a fresh screen locker.

binds {
    Super+Alt+L allow-when-locked=true { spawn "swaylock"; }
}