Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ScreenZones

License: Apache 2.0

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.


Installation

GNOME Shell extension (recommended)

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.sh

⚠️ Important — log out and back in after first install:

On 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:

  1. Log out of your session and log back in.
  2. Enable the extension:
    gnome-extensions enable screenzones@ssensini.local
    Or open the Extensions app and toggle "ScreenZones" on.

Once enabled, it loads automatically on every future login — no further action needed.

Usage:

  1. Click the grid icon (⊞) in the top bar.
  2. Pick a layout (e.g. "3 Columns (1:1:1)").
  3. Drag any window by its title bar — a blue zone overlay appears and highlights the zone under your cursor.
  4. Release the window over a zone to snap it there.
  5. Pick "Off (no zones)" to disable snapping.

For troubleshooting, uninstall instructions, and more details see backends/gnome/README.md.


X11 tray app (any X11 desktop — lightly maintained)

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 xdotool

On Fedora: sudo dnf install python3-gobject gtk3 libappindicator-gtk3 python3-xlib wmctrl xdotool

Run:

cd backends/x11
python3 -m screenzones.app

A 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.


Which version should I use?

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.

Help us prioritize: vote for your DE!

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.

Limitations & platform caveats

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 ⚠️ untested Should work (uses logical monitor geometry) but unverified.
Distro packaging (.deb/Flatpak/AUR) ❌ not yet Install-from-source only. See Roadmap.

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)

Attribution & disclaimer

  • "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.

License

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.

Contributing

Issues and pull requests are welcome! See CONTRIBUTING.md for development setup and guidelines, and please follow our Code of Conduct.

About

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.

Topics

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages