An open-source Linux tool to split your screen into zones (columns, 2:1, 1:2, thirds, etc.) and snap windows into them by dragging.
Inspired by the screen-splitting feature found in ASUS DisplayWidget (Windows/macOS only), but built specifically for Linux from scratch, using only public, documented operating-system APIs — no proprietary ASUS code, assets, or reverse-engineered binaries were used or referenced in any way. See Attribution & disclaimer below.
This is the primary, actively tested backend. Works on GNOME 45–47 with both Wayland and X11.
Requirements: GNOME Shell 45, 46, or 47 (tested on 46.0, Ubuntu 24.04+).
git clone https://github.com/serenasensini/linux-fancyzones.git
cd linux-fancyzones/backends/gnome
./install.shOn Wayland, GNOME Shell only detects newly-installed extensions after a
fresh login (Wayland sessions can't restart the Shell in-place). After
running install.sh for the first time:
- Log out of your session and log back in.
- Enable the extension:
Or open the Extensions app and toggle "ScreenZones" on.
gnome-extensions enable screenzones@ssensini.local
Once enabled, it loads automatically on every future login — no further action needed.
Usage:
- Click the grid icon (⊞) in the top bar.
- Pick a layout (e.g. "3 Columns (1:1:1)").
- Drag any window by its title bar — a blue zone overlay appears and highlights the zone under your cursor.
- Release the window over a zone to snap it there.
- Pick "Off (no zones)" to disable snapping.
For troubleshooting, uninstall instructions, and more details see
backends/gnome/README.md.
For non-GNOME desktops running on X11 (XFCE, MATE, Cinnamon, etc.).
Requirements (Debian/Ubuntu):
sudo apt install python3-gi gir1.2-gtk-3.0 gir1.2-ayatanaappindicator3-0.1 \
python3-xlib wmctrl xdotoolOn Fedora: sudo dnf install python3-gobject gtk3 libappindicator-gtk3 python3-xlib wmctrl xdotool
Run:
cd backends/x11
python3 -m screenzones.appA tray icon will appear. Click it, choose a layout, then drag any window by its title bar — zones will appear as an overlay; drop the window on a zone to snap it there.
Autostart (optional):
mkdir -p ~/.config/autostart
cp backends/x11/data/screenzones.desktop ~/.config/autostart/Note: This X11 backend is lightly maintained in favor of the GNOME extension. It's kept for X11-only setups but may not receive the same level of attention. Contributions welcome.
| Backend | Path | Target |
|---|---|---|
| GNOME Shell extension | backends/gnome/ |
GNOME on Wayland or X11 (recommended) |
| X11 tray app | backends/x11/ |
Any X11 DE (XFCE, MATE, Cinnamon, etc.) |
| KDE Plasma | planned | Vote / discuss → |
| Hyprland | planned | Vote / discuss → |
| Sway / wlroots | planned | Vote / discuss → |
Check your session type with echo $XDG_SESSION_TYPE. If you're on GNOME
(most Ubuntu/Fedora installs), use the GNOME backend above.
We want to expand ScreenZones to more desktop environments, but we need to know where the demand is. Please upvote (👍) the issue for your DE so we can prioritize development:
Each backend lives in its own directory under backends/ and implements
the same core concepts (layout math, monitor detection, drag detection,
zone overlay, window snapping) using DE-native APIs. Contributions for any
backend are very welcome — see CONTRIBUTING.md.
| Environment | Supported? | Notes |
|---|---|---|
| GNOME Shell 45–47, Wayland | ✅ backends/gnome/ |
Primary target; tested on GNOME 46 (Ubuntu 24.04+). |
| GNOME Shell, X11 ("GNOME on Xorg") | ✅ backends/gnome/ |
Extension works identically; also compatible with backends/x11/. |
| GNOME Shell < 45 | ❌ | Pre-45 uses a different (CommonJS) API; would need porting. |
| KDE Plasma (any) | ❌ not yet | Would need a KWin script/plasmoid rewrite. Contributions welcome. |
| XFCE, MATE, Cinnamon, i3/sway, other WMs | ❌ | No GNOME Shell to host the extension. The backends/x11/ app may work on XFCE/MATE/Cinnamon over Xorg (untested). |
| Non-GNOME Wayland compositors | ❌ | Each compositor needs its own native integration. |
| macOS / Windows | ❌ out of scope | This project exists for Linux specifically. |
| Multi-GPU / mixed HiDPI | Should work (uses logical monitor geometry) but unverified. | |
Distro packaging (.deb/Flatpak/AUR) |
❌ not yet | Install-from-source only. See Roadmap. |
- DDC/CI brightness/contrast/color-temperature presets ("themes") via
ddcutil - Configurable custom layouts (user-defined zone grids)
- Keyboard shortcuts to snap the focused window into a zone
- Packaging (
.deb, Flatpak, AUR)
- "ASUS" and "DisplayWidget" are trademarks of ASUSTeK Computer Inc. This project is not affiliated with, endorsed by, or sponsored by ASUS in any way.
- This tool was built purely from the idea of a screen-splitting utility (a concept ASUS's tool also implements, similar to Microsoft's FancyZones/PowerToys) — no ASUS software was decompiled, disassembled, or otherwise reverse-engineered to build this project, and no ASUS code or assets are included.
- All functionality is implemented against publicly documented Linux APIs:
GNOME Shell/Mutter extension APIs (
Meta,St,Clutter) for the primary implementation, and standard X11/EWMH tooling (wmctrl/xdotool/python-xlib) for the legacy variant. - See NOTICE for the full trademark notice, and LICENSE for licensing terms.
Licensed under the Apache License, Version 2.0 — a permissive, genuinely open-source license. You're free to use, modify, and even sell software based on this project, provided you retain the required copyright and attribution notices (see NOTICE) per the license terms.
Issues and pull requests are welcome! See CONTRIBUTING.md for development setup and guidelines, and please follow our Code of Conduct.