Pop!_OS 20.04 was released today, and probably the best new feature is the addition of Pop Shell, which features advanced tiling window management for the GNOME desktop.But this is not just for Pop!_OS. If you use GNOME Shell 3.36, you can give Pop Shell a try right now. This article explains how to install it on Ubuntu 20.04, Fedora 32, Debian Bullseye or Sid, and Arch Linux / Manjaro. It only works on Xorg though; I tried it with Wayland and enabling auto-tiling froze the GNOME desktop (it looks like this is a known bug).
|Pop Shell with auto-tiling enabled on my Ubuntu 20.04 desktop, using an ultra-wide monitor|
First, a bit more about Pop Shell. This is a short summary of Pop Shell. For a lot more, including the motivation behind creating it, a feature overview, and in-depth usage, please see the Pop Shell documentation.
This GNOME Shell extension is described as “a keyboard-driven layer for GNOME Shell which allows for quick and sensible navigation and management of windows”, and it has two modes: stacking and auto-tile, so users can choose what they need. Switching between these two modes can be done from the extension menu from the top bar: disable the Tile Windows option and you’ll be using the stacking mode.
In stacking (floating) mode, windows are allowed to overlap like on a traditional desktop, while in auto-tile mode, Pop Shell provides a tiling window manager experience where windows are automatically tiled.
Even when using stacking mode with Pop Shell though, you get some optional tiling window management features, like a grid-based display in which you can move and resize windows, snap to grid, window focus switching using the keyboard, and more.
|Pop Shell Launcher|
Pop Shell also comes with its own launcher (
Super + /). This can be used not only to launch applications, but also to switch between windows (highlighting the selected application in the grid), execute commands directly or in a terminal, and it even has a calculator mode.
|Pop Shell extension menu|
From the Pop Shell menu from the top bar you can set the size of the gap between windows, and if Pop Shell should show active window hints (a border that’s yellow by default).
|Pop Shell extension settings|
In the extension settings, which can be accessed using GNOME Tweaks or the new Extensions application, you’ll find a few more options:
- Show window titles (to show or hide window titles; this doesn’t seem to work most of the time)
- Snap to Grid (for the stacking mode: it enables window snapping to the grid when using the mouse to move and resize them)
- Change the size of both inner and outer gaps
The Pop Shell tiling window extension project page continues to show a message saying that this is in beta, but since Pop!_OS 20.04 includes this by default, I guess it’s safe to say it’s quite stable by now. Some issues do still exist, which I’ve mentioned in this article (like freezing the desktop on Wayland). Also check out the unsolved issues on its GitHub page.This is a video by System76 presenting the Pop Shell auto-tiling feature on Pop!_OS 20.04:Another very interesting tiling GNOME Shell extension is Material Shell, but it’s quite buggy right now.
How to install Pop OS Shell (tiling window extension) on Ubuntu 20.04, Fedora 32, Debian Bullseye Or Sid, and Arch Linux / Manjaro (Xorg only)
I have to remind you that Pop Shell only works with GNOME Shell 3.36, and only under Xorg for now (it makes the desktop freeze on Wayland right now) so make sure you use this before proceeding. If you use Fedora 32 and want to use this tiling GNOME Shell extension, you’ll need to switch from the default Wayland session to Xorg (logout, click on your username and choose GNOME on Xorg from the bottom right-hand side gear button).It’s also very important to note that installing Pop Shell will change some GNOME keyboard shortcuts (it’s not just those mentioned on the Pop Shell page, but also others like workspace switching, moving a window to a different workspace, etc. – you can see those in the Pop Shell Shortcuts screenshot further down in this article). If you decide you no longer want to use this tiling window extension, you’ll need to reset all GNOME keyboard shortcuts (there’s a
Reset All button in
Settings -> Keyboard shortcuts, in the header bar; this resets all GNOME keyboard shortcuts but not custom shortcuts, which are shown at the bottom of the
Settings -> Keyboard shortcuts window).
|Pop Shell running in a Fedora 32 vm (Xorg session, since it does not work with Wayland yet!)|
|Pop Shell tiling on Manjaro (running in a vm, that’s why the screen is small)|
Now let’s install Pop Shell. Besides GNOME Shell 3.36 (running on X11), you’ll also need TypeScript 3.8 and GNU Make to build it, and Git to get the latest Pop Shell extension code from GitHub. Install these as follows:
- Ubuntu 20.04 / Debian Bullseye (testing) or Sid (unstable) since only these have GNOME Shell 3.36:
sudo apt install node-typescript make git
- Fedora 32:
sudo dnf install nodejs npm make git
The dnf install command doesn’t contain
nodejs-typescript because Fedora 32 has a very old version of this package, so to install TypeScript 3.8 you have 3 options: install it using NVM, use the script from the second part of this article to get npm to install global packages without root, or run
npm -g typescript as root – I don’t recommend the latter).
- Arch Linux / Manjaro: Pop Shell is available on AUR so you can install the Pop Shell tiling window extension without any extra steps (there’s no need for the build/install steps below).
Now you can get the Pop Shell code from GitHub, build and install it for the current user on your GNOME 3.36 desktop using:
git clone https://github.com/pop-os/shell cd shell ./rebuild.sh
After the extension is installed, your GNOME Shell session will be restarted, and you should see the Pop Shell icon on the top panel.
It’s worth noting that auto-tiling is disabled by default, enable it from the Pop Shell icon from the top panel (toggle
Tile Windows to ON).
Also, I don’t recommend installing the Pop Shell extension DEB package from the Pop!_OS PPA on Debian / Ubuntu because that won’t set the proper key bindings. Install the extension through the
rebuild.sh script so it sets the keyboard shortcuts to be used with Pop Shell.
Fix a few conflicting keyboard shortcuts
As I mentioned earlier, Pop Shell changes some GNOME keyboard shortcuts. This is done through the
rebuild.sh script, which also installs the extension.
After using Pop Shell for a while, I noticed that some shortcuts are not changed by this script, so they are in conflict with some GNOME Shell keyboard shortcuts. While I only noticed 4, there might be more, so keep this in mind (and let me know in the comments if you find more!).
These conflicting shortcuts are
Shift + Super + Up,
Shift + Super + Down,
Super + Up and
Super + Down. For the first two, Pop Shell assigns these keyboard shortcuts for moving a window up or down one workspace, but they are also assigned by default (by GNOME) to move the window one monitor up or down. For
Super + Up and
Super + Down, Pop Shell assigns this to switching focus between windows (together the other directional keys), while GNOME Shell uses this for maximizing a window and restoring it.
So you’ll want to go to
Settings > Keyboard Shortcuts and disable (click on them, then when asked to enter a keyboard shortcut, press
Backspace to disable that shortcut) the shortcuts for “Move window one monitor down”, “Move window one monitor up”, “Maximize window” and “Restore window”.
Install Pop Shell Shortcuts (optional)
You may also want to install Pop Shell Shortcuts. This is a simple dialog that lists the Pop Shell keyboard shortcuts, which opens when you click on
View All in the Pop Shell top bar menu, and it’s optional. Even though it looks simple, it actually has more build dependencies than Pop Shell.
Alternatively, if you don’t want to install it, you can save the screenshot below to have the Pop Shell keyboard shortcuts at hand (middle click it to open it at full size in a new browser tab, and save it from there):It’s worth noting that the Pop Shell shortcuts screenshots from its repository page is not up to date.
If you prefer to have this installed on your system (this way you can have both Pop Shell and Pop Shell Shortcuts installed at the same time, so their shortcuts will match — in case they change later on), so you can open it from the Pop Shell top bar menu, proceed as follows.
For Ubuntu / Debian, you can either download the Pop Shell Shortcuts DEB from here (it has no dependencies), or build it yourself as follows.Install the Pop Shell Shortcuts dependencies:
- Ubuntu 20.04 / Debian Bullseye (testing) or Sid (unstable):
sudo apt install cargo rustc libgtk-3-dev
- Fedora 32:
sudo dnf install cargo rust gtk3-devel
- Arch Linux / Manjaro:
sudo pacman -S rust gtk3
Now clone the Pop Shell Shortcuts git repository, build and install it:
git clone https://github.com/pop-os/shell-shortcuts cd shell-shortcuts make sudo make install
How to remove Pop Shell and reset the keyboard shortcuts
It’s worth noting that these instructions are for removing Pop Shell installed as explain in this article, and not for removing it from Pop!_OS 20.04. This won’t work on Pop!_OS 20.04, because the extension is not installed for the current user, but system-wide.
Don’t like Pop Shell? No problem, let’s remove it. Start by disabling the extension using GNOME Tweaks (on the Extensions tab) or the Extensions app. Then remove it by either going to
~/.local/share/gnome-shell/extensions and removing the
[email protected] folder using your file manager, or use the command that follows to remove it:
rm -r ~/.local/share/gnome-shell/extensions/[email protected]
You’ll most probably also want to reset the GNOME keyboard shortcuts to their defaults. Open
Settings, click on
Keyboard Shortcuts in the sidebar, and you’ll see a
Reset All... button at the top of the window. Click it and the GNOME keyboard shortcuts will be reverted to their default values.
After this, restart GNOME Shell: press
Alt + F2 and type
r, then press the
Enter key, or logout and relogin.
If you’ve installed the Pop Shell Shortcuts, you can remove this with:
sudo rm /usr/local/bin/pop-shell-shortcuts