kanshi_gui
Waylandswaywlrootsv2.0.2

Drag a monitor.It is already applied.

kanshi_gui arranges multi-display setups under Wayland by hand instead of by config file. Move a screen and the running compositor moves with you — no save, no restart, no reload. Save the arrangement once and it comes back exactly like this, every time you dock.

curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo sh
Source
Setup 1
DP-1Samsung Electric Company2560 × 1440landscape0°60 Hz
DP-2Samsung Electric Company2560 × 1440landscape0°60 Hz
HDMI-A-1InfoVision Optoelectronics1920 × 1080landscape0°60 Hz
Drag a screen, or its corner to scale
Saved. These 3 screens come back exactly like this.

A working piece of the app, running in your browser. In the real thing, every one of these moves reaches the compositor.

The compositor moves while you drag

Position, scale, rotation and mode go into the running session the moment you change them. What you are looking at is not a preview of the result — it is the result.

A change that can black out a screen has 15 seconds

It is only kept if you say so. A click elsewhere, a focus change or simply waiting are not a yes. The timeout always puts it back, because the person who cannot see anymore cannot answer either.

It comes back exactly like this

The arrangement is written into your kanshi config by a real scfg parser that edits the file in place — your comments, your other profiles and anything it does not recognise survive the save.

The safety net

The question you can only answer if it worked

Changing a mode or switching an output off can leave a screen black — and someone who sees nothing cannot take it back. So the app asks, on the screen, and waits.

Only a positive answer keeps the change. Not a click on the dimmed canvas, not a focus change, and above all not the clock running out. Doing nothing is the safe move — which is the whole point, because doing nothing is exactly what happens when you cannot see the question.

Try it: keep it, put it back, or just let the countdown finish.

Setup 1
DP-12560 × 1440
DP-22560 × 1440
Saved. These 2 screens come back exactly like this.
Everything else

Small app, decided details

Version 2.0 deleted ten preferences, a 248px rail and the first-run wizard. What is left is what arranging monitors under Wayland actually needs — and each of these is a decision, not an option you have to go and find.

Smart snapping

Guide lines like a design tool, corner alignment on top, bottom and centre — and a magnet that backs off once you have escaped it twice in the same drag.

Hotplug aware

Plug a screen in or pull it out and the canvas refreshes itself. A drag that a hotplug invalidated is cancelled, never committed to the wrong output.

Identify displays

One button flashes a large pulsing number onto every screen, so you know which rectangle on the canvas is the panel on your left.

Mirror onto another output

Point one screen at another through wl-mirror. Mirrored tiles take a colour of their own, because mirroring is a relationship between two screens and not a selection.

Workspaces, if you want them

Optionally spread sway workspaces 1–9 across your monitors, interleaved or grouped. Off by default — a first launch never reshuffles the desk you already have.

Setups, not config blocks

Capture the screens you have now, rename them, forget them. Switching uses kanshictl reload where it exists, so re-applying no longer flickers the screen.

It will not lock you out

The last enabled output cannot be disabled. Not a warning dialog, not a preference — the app simply refuses, because there is no good reason to allow it.

Light, dark, and your accent

The theme follows the system, and the accent colour is read from sway's client.focused so the app agrees with the window manager it sits next to.

Compositors

It picks its backend at startup

swaymsg where sway is actually running, wlr-randr everywhere else in the wlroots family. If neither is there, it stays useful as an offline profile editor rather than refusing to start.

CompositorBackendLive applyMirror · identify · workspaces
swayswaymsgyesEverything
Hyprland · Wayfire · niri · other wlrootswlr-randryesLayout only
GNOME on Waylandnot supported yetnoOffline editor

sway needs a SWAYSOCK that points at a live socket — having the sway tools installed is not enough, so a non-sway session with them lying around lands on the wlr-randr path on purpose. Mirroring, identify banners and workspace placement are sway-specific because they go through sway IPC, swaynag and wl-mirror.

Install

Three ways to install it

You need a Wayland session and kanshi with a working config at ~/.config/kanshi/config. Everything else the app brings along.

Debian and Ubuntu users: the APT route is the one that keeps updating. The other two are for when you would rather build it yourself.

Registers apt.nurkert.de as a source, so kanshi_gui updates with the rest of the system instead of needing you to remember it.

curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo sh

Then launch it with kanshi_gui — or from your application menu.

Questions

What people ask before installing

Mostly about compositors, and mostly about whether it is going to touch a config file they spent an evening on. The short answers are: probably yes, and no.

Does kanshi_gui work on Hyprland, niri or Wayfire?

Yes. On any wlroots-style compositor it drives wlr-randr, which covers position, resolution, refresh rate, scale, rotation and enabling or disabling an output — live, the same as on sway. Mirroring, the identify banners and workspace placement stay sway-only, because they go through sway IPC, swaynag and wl-mirror.

Do I need kanshi installed to use kanshi_gui?

Yes. kanshi_gui is a front end for kanshi, so kanshi has to be installed with a config file at ~/.config/kanshi/config. The GUI reads that file, edits it, and lets kanshi keep doing the work of reapplying your profiles when displays change.

Will it overwrite my existing kanshi config?

No. Since version 2.0 the app parses your config with a real scfg parser and edits it in place. Comments, profiles you wrote by hand and any directive the GUI does not understand are kept exactly as they were. Backups are written before each save.

What happens if a monitor stays black after a mode change?

Nothing you did not confirm survives. Mode changes and output-disables arm a 15-second countdown with a card asking whether you can still read it. Only a positive answer keeps the change — a click elsewhere, a focus change or the timer running out all put the layout back.

Does kanshi_gui run on GNOME or KDE Wayland?

Not for live changes. GNOME and KDE do not expose the wlroots output management protocol that kanshi_gui uses, so neither swaymsg nor wlr-randr can reach them. The app still starts and works as an offline profile editor, with the apply actions disabled.

How do I install kanshi_gui on Debian or Ubuntu?

Run curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo sh. That registers apt.nurkert.de as a package source and installs the kanshi-gui package, so later versions arrive with your regular system updates. You can also build a .deb from the repository, or build the Flutter app from source.

Can it mirror one monitor onto another?

On sway, yes, through wl-mirror: pick "Mirror onto…" in a screen's menu and it takes its picture from the output you choose. Mirrored tiles are drawn in a separate colour, because mirroring is a relationship between two screens rather than a property of one.

Is kanshi_gui free?

Yes. kanshi_gui is free software under the GNU General Public License v3.0, with the full source on GitHub. There is no paid tier, no account and no telemetry.

Arrange the screens once.Then stop thinking about it.

curl -fsSL https://apt.nurkert.de/install/kanshi-gui | sudo sh
Read the source, open an issue