Pop!_OS Floating Window Exception

In my post Pop!_OS Tiling – Always Float, I describe Window Exceptions and how to implement them manually. The latest release of Pop!_OS Shell, installed with the most recent Pop!_OS 20.04 update, now includes a graphical tool for managing Window Exceptions.

New menu option.

Floating Window Exception is part of Pop!_OS’s Tile Windows feature. It allows you to define a set of windows/applications that will float when they are opened, instead of tiling. This is helpful for utility type applications, like a calculator.

Adding an Exception

To add a new exception, open the application you would like to float. Then open the Floating Window Exception tool from the Tiling Menu. Choose the “Select” button, then select the running window.

Managing exceptions.

You have the option of creation an exception all windows related to the application or only the current window.

After adding the exception, you will see it listed under System Exceptions. In the example below, there are two exceptions for Firefox. You could float all Firefox windows with the “Firefox” exception or just float a specific Firefox window, like “Firefox / Employee Home – Mozilla Firefox”. When floating a specific window, it’s based on the window title. If the window title changes, the exception will not work.

Firefox exceptions.

System Exceptions

Out of the box, Float Windows Exceptions include “System Exceptions”, which appear to be community curated recommendations. System exceptions default to “On”. I don’t agree with all of the system exceptions and turned a few off.

System Exceptions

config.json

Floating Window Exceptions settings are stored in .config/pop-shell/config.json. Prior to the new graphics tool, I updated this file manually. The file format is easy to understand and update.

config.json

I like to sync this file to multiple computers to keep my configuration the same on all machines.

Pop!_OS Tiling – Always Float

I’m a fan of tiling window managers. Pop!_OS introduced tiling windows, known as Pop Shell, in version 20.04. While the Pop implementation is not as powerful and functional as a tiling windows manager, like i3 or Awesome, it’s a great start but needs some improvements. In my post, Pop!_OS Switch Workspaces with Super + Number, I recommend adding keyboard mapping to move between workspaces easier.

Some windows don’t work well in tiling mode. The Settings and Calculator applications work better as floating windows

Calculator opening in tiling mode
Calculator opening as a floating window.

The Pop Shell team is working on improvements for managing a combination of floating and tiling windows. [UPDATE: Pop Shell has been update – read more here]. In the meantime, you can define specific windows to open in floating mode by default. The .config/pop-shell/config.json file below defines the Settings window, “Gnome-control-center”, and Calculator, “Gnome-calculator”, to open in floating mode.

{
"float": [
{
"class": "Gnome-control-center",
"title": ""
},
{
"class": "Gnome-calculator",
"title": ""
}
],
"log_on_focus": false
}

Currently, only the window class is required in config.json.

How to determine the window class

Finding a window class is simple. Open the application (window). Also open the terminal. In the terminal, run the command: xprop | grep WM_CLASS, then click on the window you want the class for. Back in the terminal you will see the class information. Use the second string as the class.

My Config

{
"float": [
{
"class": "Gnome-control-center",
"title": ""
},
{
"class": "Gnome-calculator",
"title": ""
},
{
"class": "zoom",
"title": ""
},
{
"class": "Org.gnome.Nautilus",
"title": ""
}
],
"log_on_focus": false
}

Moving Forward

In the future, I expect a user interface control will be used to update this config.json file. In the meantime, it’s easy enough to update it manually.

Your first Linux distro should be Pop!_OS

For developers, I recommend using Pop!_OS as your first Linux distribution. After using MacOS for fifteen years, my first Linux experience was with Pop!_OS, and I’ve explored other Debian and Arch-based distros. I’m currently using Pop!_OS and EndevourOS.

Pop!_OS is an excellent transition distribution for developers moving to Linux for the following reasons:

Made by developers for developers.

Pop!_OS is maintained by System 76, a leading manufacturer of professional hardware designed to run Linux. In the hands of System76, there is a focus on performance, reliability, and usability for the developer. System76 descried Pop!_OS as “an operating system for STEM and creative professionals who use their computer as a tool to discover and create.”

Hardware Support

While Pop!_OS comes pre-installed on System76 computers, it will install on any (Linux friendly) computer. While there are distributions designed to run well on old, underpowered hardware, I have found Pop!_OS to be lightweight enough to perform well on a broad range of hardware. I’m currently running it on a System76 Laptop, custom-built tower, and the good old classic Thinkpad T420. Pop!_OS also supports modern, cutting edge hardware and is often the choice of gamers.

Premium Interface

As a recovering Mac “fan boy”, I appreciate an operating system that looks and feels premium. Before switching to Linux, I had the impression that Linux would look and feel old. While some Linux desktop environments look old, many, like Pop!_OS and Elementary, are beautiful. Out of the box, without customization, Pop!_OS is not a step down from Mac OS.

No Clutter

The Pop!_OS desktop is clutter-free. No dock. No Menu. Just a status bar at the top of the window. This minimal interface can be a jarring when coming from Windows and macOS. I now appreciate the OS getting out my way and valuable screen space is reserved reserved for my work.

While it’s possible to add a macOS like dock (with Dash to Dock), I encourage people to use op!_OS defaults for a few weeks before making changes. As I mentioned earlier, Pop!_OS is made by developers; the default settings are purposeful.

Pop Store

While Pop!_OS comes with very few applications installed, the Pop Store provides one-click installation of hundreds of applications. From Slack and VS Code to photo editors, video editors, office tools, and games. The Pop Shop catalog has grown a lot in two years. It supports APT, and Flatpack installs.

Pop Store

Tiling Window Manager

Pop!_OS introduced a “tiling window” like feature with version 20.04. With tiling window mode on, windows don’t overlap. When a window opens, it splits the space with the existing windows. Without tiling windows mode on, Pop!_OS works like macOS and Windows, with floating windows. Windows are resized by you and can overlap. Tiling windows allow you to maximize screen space and increase productivity using keyboard shortcuts.

Tiled Windows – Browser, file manager and terminal.

Pop!_OS also supports Workspaces, which are virtual desktops. The combination of Tiling Windows, Workspaces makes for a powerful combination. (I make a minor tweak to the keyboard shortcuts to switch workspaces with Super + Number.)

Tiling Windows on Dual Monitors

In Summary

Switching to Linux can be challenging. Choosing a Linux distribution that looks and works great out of the box makes the transition easier. In my experience, Pop!_OS ‘just works’, allowing you to get comfortable in the Linux world.

Pop!_OS Switch Workspaces with Super + Number

About Titling Windows

Pop!_OS introduced a “tiling window” like feature with version 20.04. With tiling window mode on, windows don’t overlap. When a window opens, it splits the space with the existing windows. Tiling windows allow you to maximize screen space and increase productivity using keyboard shortcuts.

Pop!_OS Tiling Settings

Pop!_OS also supports Workspaces, which are virtual desktops. The combination of Tiling Windows, Workspaces and dual monitors makes for a powerful combination.

I like to setup Workspace 1 for communication with e-mail and chat clients (Slack, Telegram, Mattermost…). Workspace 2 for developments with terminals, IDE, and browsers. Workspace 3 for documentation with text editors, note taking apps and browsers.

Dual monitors with tiling windows.

Keyboard Bindings

Pop!_OS has a set of keyboard shortcuts to navigate between windows and workspaces. I find them inadequate when it comes to switching between Windows and Workspaces. With the additional keyboard bindings below you can switch between Workspaces using SuperKey + Number.

Pop!_OS Tiling Shortcuts

SuperKey + 1 switches to workspace 1 and SuperKey + 2 to workspace 2, etc… up to 9. Add the Shift key, and the current focus window moves it to the workspace.

This minor change to Pop!_OSs titling window keyboard shortcuts make it far more usable.

Copy and paste the code below at the terminal.


gsettings set org.gnome.mutter dynamic-workspaces false
gsettings set org.gnome.desktop.wm.preferences num-workspaces 8

gsettings set org.gnome.shell.keybindings switch-to-application-1  []
gsettings set org.gnome.shell.keybindings switch-to-application-2  []
gsettings set org.gnome.shell.keybindings switch-to-application-3  []
gsettings set org.gnome.shell.keybindings switch-to-application-4  []
gsettings set org.gnome.shell.keybindings switch-to-application-5  []
gsettings set org.gnome.shell.keybindings switch-to-application-6  []
gsettings set org.gnome.shell.keybindings switch-to-application-7  []
gsettings set org.gnome.shell.keybindings switch-to-application-8  []
gsettings set org.gnome.shell.keybindings switch-to-application-9  []

gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-1  "['<Super>1']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-2  "['<Super>2']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-3  "['<Super>3']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-4  "['<Super>4']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-5  "['<Super>5']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-6  "['<Super>6']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-7  "['<Super>7']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-8  "['<Super>8']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-9  "['<Super>9']"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-10 "['<Super>0']"

gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-1  "['<Super><Shift>1']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-2  "['<Super><Shift>2']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-3  "['<Super><Shift>3']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-4  "['<Super><Shift>4']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-5  "['<Super><Shift>5']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-6  "['<Super><Shift>6']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-7  "['<Super><Shift>7']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-8  "['<Super><Shift>8']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-9  "['<Super><Shift>9']"
gsettings set org.gnome.desktop.wm.keybindings move-to-workspace-10 "['<Super><Shift>0']

Resources

Thank you to Jibar Ali Ouassao for this solution in the Pop Shell repo issue queue.