Review: Raspberry Pi 400 and Ubuntu Linux 20.10

I recently reviewed the Pi 400 Complete Computer Kit, with its ‘out of the box’ configuration running on Raspberry Pi OS. Now, I’m reviewing an alternative operating system, Ubuntu 20.10, running on the Pi 400.

Ubuntu Desktop, initially released in 2004, may be the most popular Linux desktop distribution in the world. It’s backed by Canonical, a UK-based private company that sells commercial support and services for Ubuntu-based products. Ubuntu comes pre-installed on desktop and laptop computers from various hardware vendors, including System76, Lenovo, and Dell. Ubuntu can also be installed on many other current and legacy computers.

With millions of people using Ubuntu daily, there is no doubt that this world-class operating system could be a good option for Pi 400 desktop users. Let’s find out if it is.

Raspberry Pi and Canonical

The Pi 4, which came to the market in 2019, has hardware components found in a desktop computer, notably a Quad-core CPU, two HDMI ports, Wi-fi, and Bluetooth. Regarding the Pi 4, Martin Wimpress, Desktop Engineering Director at Canonical, said “[there is] plenty of CPU and plenty of RAM, and an upgraded GPU,” and “we really have to start considering the Raspberry Pi Foundation as a PC vendor,” ¹ and they did just that. Teams at Canonical and Raspberry Pi Foundation collaborated to release the first Ubuntu Desktop image on October 22, 2020, for the Pi 4 and Pi 400.

Raspberry Pi is a trademark of the Raspberry Pi Foundation. Ubuntu and Canonical are registered trademarks of Canonical Ltd

Installation

When installing Ubuntu on a Pi 400, start with preparing a microSD. Raspberry Pi Foundation made this easy by providing the Pi Imager application, which prepares a MicroSD, or USB drive, as a boot disk. Pi Imager currently installs two desktop distributions, Raspberry OS (32-bit) and Ubuntu Desktop (64-bit), from a Windows, Mac, or Linux computer. While other third-party desktop distributions are available, such as Manjaro ARM, only Ubuntu is endorsed by Raspberry Pi foundation.

Linux for Everyone’s “Raspberry Pi 400: Install A Different OS The EASY Way” video demonstrates how to use Pi Imager.

With the Ubuntu microSD installed in the Pi 400, the installation is straightforward, prompting for Language, Keyboard, Wifi, Timezone, Username, and Password. Unlike the Raspberry Pi OS, you can set up multiple user accounts, which helps a family computer. Each family member can have separate accounts and application settings.

When the installation is complete, the Pi 400 will reboot. Upon the initial login, you are prompted for account-specific settings: Online Accounts setup (more about this below), an option to send information to Canonical, and enable Location Services.

All systems go!

Look and Feel

Ubuntu uses GNOME for its desktop environment. GNOME describes itself “as an easy and elegant way to use your computer.” I agree. If you are familiar with Windows or Mac OS’s current version, using GNOME will be a comfortable transition.

You will be struck by the default background, which is a gorilla wearing sunglasses. Groovy Gorilla is the code name for Ubuntu 20.10. The next version of Ubuntu 21.04 is Hirsute Hippo.

Groovy Gorilla

Using Appearance Settings, you can set windows to dark mode and move the dock from its default location on the left of the screen to the bottom or right. A bar at the top of the window gives you quick access to wireless/network, sound, and Bluetooth settings.

Software

Ubuntu includes the software applications needed for everyday computing, including a word processor, spreadsheet, web browser, and e-mail program. Canonical has a partnership with Mozilla; therefore, the Firefox web browser and Thunderbird e-mail client are installed.

Since the Pi is an ARM-based computer, there are not yet as many applications as on an X86 computer. But there are hundreds, maybe thousands, to choose from in the Ubuntu Software “store.” It’s unlikely you cannot find an application that fits your needs. All applications are free to install.

Ubuntu Software Store

Gimp and Snap Store

I’ve been using the Pi 400 with Ubuntu 20.10 for daily computing tasks, like e-mail (via browser), YouTube videos, research, and writing this review. This article’s images were modified using Gimp, which could not be installed via the Ubuntu Software store. The software store installs Snap versions of applications, and I received an error during installation.

Gimp install error

I successfully installed the .deb version of Gimp from the command line with the following command: sudo apt install gimp. I don’t know how wide-spread this type of Snap problem is, but I expect it will be corrected in the future.

What is a Snap? Simplified explanation: Snap packages, known as ‘snaps’, are self-contained software packages, meaning all application dependencies are included within the install. On the other hand, .deb files, the traditional packaging for Ubuntu applications, do not include dependencies, and they must be installed separately. If you are using .deb packaging and two applications require different versions of the same dependency, you have problems. Snaps resolve that issue. You can learn more about snaps on the Snapcraft website.

Video and Premium Content

While the Pi 400 is a desktop computer and not a media server, there is a reasonable expectation of watching videos. Premium content from Netflix, Amazon Prime, Disney Plus, Spotify, and others is not available on a Pi 400 with Ubuntu 20.10. This issue is not the fault of the Pi or Ubuntu. These streaming services use the Digital Rights Management (DRM) software WideVine, to prevent non-subscriber access to content. The WideVine software is not available for 64-bit ARM environments, like the Pi 4 and Pi 400. Until WideVine makes these libraries available, DRM content cannot be accessed.

Netflix error.

NOTE: If premium content is a must, you can access Netflix and others on a Pi 400 running Raspberry PiOS (32-bit). WideVine libraries are available for ARM 32-bit that run on older versions of the Chromium browser. Thanks to Veselin at blog.vpetkov.net, with just a few terminal commands, 32-bit WideVine is installed and configured for a special installation of Chromium.

YouTube videos play well in Firefox. 480p and 720p are both usable, with some frames dropped. The lower the resolutions, the better the video experience. 4k video is not usable.

Online Accounts

During the setup process, you are prompted to connect your Online Accounts, including Facebook, Google, Microsoft, Foursquare, and more. The idea behind this feature is to make it easier to connect your online services to applications. For example, after connecting to your Google account, the Calendar application automatically uses your Google calendar. Conceptually, this feature makes sense, but I found the implementation to be disjointed and confusing.

Wait, What? Did I say Foursquare? That’s still a thing? It sure is — with 55 million monthly active users! ²

Online Account Settings

I connected Online Accounts to G-Mail and enabled that connection for Mail, Calendar, Contacts, Documents, Photos, Files, and Printers. I proceeded to open Thunderbird, the default e-mail client, and expected it to load my e-mail, but it didn’t. Thunderbird was ‘not aware’ of my G-Mail account. After some research, I learned that a limited number of applications use Online Accounts, and most are not the default applications installed. It’s misleading and confusing to setup Online Accounts that don’t work with default applications. I tested the 20.10 Ubuntu installation on an Intel computer and had the same problem. This issue is not specific to the Pi 400 implementation of Ubuntu Desktop.

Then, I installed Evolution, an e-mail client that works with Online Accounts. Upon startup, it connected to my G-Mail, which is what I expected. While my e-mail and calendar were working in Evolution, the performance of the Pi 400 had a noticeable decline. I uninstalled Evolution, but performance did not improve until I removed Google from Online Accounts.

The Pi 400 hardware may not be powerful enough for the Online Accounts feature of Ubuntu, and maybe IMAP e-mail clients should be avoided as well.

Technical Details: When Online Accounts were connected to Google, the “evolution-calendar-factory” process used a significant amount of CPU and Memory. This process is part of GNOME and cannot be removed. When Online Accounts are not connected to any services, the evolution processes still run but use minimal resources.

Sound and Printing

Ubuntu 20.10 recognized my HP network printer, connected to it, and printed flawlessly.

The Pi 400 does not have a 3.5mm audio jack; therefore, sound comes from speakers connected through HDMI, USB, or Bluetooth. I attached a USB speaker for testing. By default, Ubuntu 20.10 is configured to use the “Headphones — Built-in Audio” audio output, which does not exist. I had to change the audio output device manually.

Performance

Outside of the issues I found with Online Accounts, Ubuntu 20.10 performs well on the Pi400. I did not benchmark the performance of Ubuntu or Raspberry Pi OS, but used them regularly. Pi OS feels snappier. I know that’s not very technical, but it is a useful measurement. Like I said in my previous review, “While it’s not as quick as my high-end computers, it performs well. It’s an uncompromising solution for everyday computer tasks.”

Conclusion

Ubuntu is a fantastic desktop operating system. While I uncovered a few problem points with Ubuntu 20.10 on a Pi 400, its maturity shines. Keeping in mind that 20.10 was recently released, I expected there would be issues and they will be resolved with time.

Ubuntu 20.10 Desktop for Pi strengths:

  • Mature desktop environment
  • Support for multiple user accounts
  • Vast number of applications available

Ubuntu 20.10 Desktop for Pi weaknesses:

  • No support for premium content providers (Netflix, Amazon Prime…)
  • Just beyond beta — there are clearly issues that need to be worked out.
  • Lack of support for the unique features of the Raspberry Pi. Ubuntu 20.10 does fully support the ‘maker tools’ for interfacing the GPIO (General Purpose Input/Output). See Ubuntu 21.04 below for more details.

“Multi-Boot”

Dual-booting a computer is when it’s configured to run two different operating systems, such as Mac OS and Windows. With the cost of a microSD and ease of loading a new operating system on it, the Pi 400 is a multi-boot system. You can explore different desktop operating systems and use the one that works best for the tasks at hand. Next up for me, Manjaro. Stay tuned!

Ubuntu Desktop 21.04

Ubuntu is planning ¹ the following updates for the April 2021 release:

  • Finalize the GPIO implementation
  • Track and implement the improvements made to the kernel by the Raspberry Pi Foundation
  • (Hopefully) Making a full transition to the full KMS drivers to provide better hardware support.

References

¹ “Ubuntu Desktop on Raspberry Pi” — Rhys Davies, Product Manager Canonical, Martin Wimpress, Engineering Director Ubuntu Desktop. https://www.youtube.com/watch?v=0pT4-RcTERU&t=879s

² “41+ Must Know Foursquare Statistics in 2020” — Denis Metev, https://review42.com/foursquare-statistics/Linux For Everyone

Welcome /Home

One Mask to Rule Them All

Never did I imagine a government request to wear a mask while in public, and when it began, I never imagined I would have an opinion about the design of a mask, but I do.

I expect most people own at least three masks and maybe a dozen or more. For those like my wife, Erica, who wears a mask nine or more hours a day while teaching at school, fit, comfort, and protection are important.

A friend, Johanna, is making masks and gifted one to me. I’ve worn store-bought and homemade masks, and Johanna’s mask is, by far, better than any other I’ve worn. This is why…

Fit

My previous masks are not shaped to fit my face. They are basically a strip of material with ear loops on either end. Some have a little shape for better coverage, but none have a place for my nose and chin, and have large gaps around the edges.

Before making my mask, Johanna asked for a measurement from the tip of my nose to the tip of my chin. I expect that is part of the secret sauce.

A – Pocket for the nose
B – Pocket for the chin
C – No gap around the nose
D – No gap on the cheeks
E – No gap around the neck

Anti-fog

Other than using an N-95 mask, I’ve had trouble with my glasses fogging. Without a gap at C, fogging is not a problem.

Comfort

Since the mask fits well, it’s comfortable and easily worn for longer periods of time.

Craftsmanship

I’m not an expert in clothing, but the mask feels well made. It’s my daily driver. It’s been through the wash many times and still holds its shape.

Learn More

For more information, and to order your own custom-made mask, visit Johanna’s website at www.rayojohis.com. Tell her Stephen sent you!

Drupal 9 and Lando

Overview

Below are steps to setup a local Drupal 9 composer based environment using Lando.

Prerequisites

You need to have Lando installed using these instructions.

Steps

Create a local folder. <app> will be the name of your application folder and Lando instance.

mkdir <app>

Position your working directory as your new folder

cd <app>

Initialize Lando and answer a few questions. This utility creates a .lando.yml file in your working directory. When you start Lando in the next step, this file is used to define the Lando configuration.

lando init
Choose: current working directory
Choose: Drupal9
Enter for webroot: web
Enter for app: <app>

Start Lando

lando start

Install Drupal code using composer. Note – Drupal is being install in a Docker container, not on your local computer.

lando composer create-project drupal/recommended-project blah -n

The above command uses composer to install Drupal and it’s dependencies into a folder called ‘blah’. Now, the files/folders in ‘blah’ will be move up one level into your directory and the ‘blah’ folder will be removed.

mv blah/* .
mv blah/.* .
rm -rf blah

Rebuild Lando containers.

lando rebuild -y

On a success rebuilt on Lando, it’s time to install Drupal 8. Goto the local URL for your Drupal 8 website.

https://<app>.lndo.site  

Follow the steps in the Drupal installation Wizard. When the database page appears, use ‘drupal9‘ for the database name, username and password. Also, use ‘database‘ for the host name (under the Advanced settings.

You should be up and running,

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.

With Liberty and Justice for All

In 2008, my daughter Allie and I recorded seven episodes of a podcast called With Liberty and Justice for All. Allie was in 5th grade learning about the election in school. It was my idea to create a podcast and she was enthusiastic, for seven episodes anyway. Enjoy!

Episode 1 – The 2008 Candidates

Episode 2 – Vice President

Episode 3 – Issue: Iraq

Episode 4 – Issue: Education

Episode 5 – Debates

Episode 6 – Campaign and the Economy

Episode 7 – Electoral College

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.

Lessons from Computer No POST

A learning experience.

At the beginning of the year, I built my first computer. This post is about my first hardware issue with that computer.

Hardware Failure

I should title this section, ‘User Failure’ or ‘Idiot’. My computer has been fantastic and worked flawlessly until I decided to upgrade, adding a second m.2 drive for expanded storage. While adding the new drive, I turned my back, and the computer fell from my desk onto the floor. Ugh. Then it would not boot.

No POST

The computer appeared to turn on, I could see lights and fans were spinning, but nothing appeared on the display. I’ve since learned this behaviour is called a “no post”. A POST is a Power On Self-Test, a process that runs on each boot and tests the system hardware before loading the operating system. On a successful POST, you will likely see the motherboard logo and option to enter the BIOS.

Successful POST

Resolving No Post

There is a wealth of information online to help resolve a no POST. It boils down to understanding the minimum hardware you need for a successful POST and eliminating each as causing the problem. Basically, with just the CPU, Power and RAM you should get a successful POST.

MSI, the makers of my motherboard, provide a help page “How to fix a PC with powers up but no display?

My Steps

I removed the parts not required to have a successful POST, the m.2 storage, Wifi card, and GPU. I disconnected all power cables and connectors except the motherboard power, CPU power and power switch connector. I verified the CPU and RAM were seated properly. The only external connections were to the power and display (via HDMI port). On power-up, the fans spun up, but no POST.

Just the minimal parts.

RAM
I tried each memory sticks alone and verified they were in the right location. Power-up, no POST. It was unlikely both sticks of RAM were faulty. Move onto BIOS.

BIOS
I used a jumper to reset the BIOS, removed the battery, and pushed the CMOS reset. Power-up, no POST. I have three parts left, Power Supply, Motherboard, and CPU.

Power Supply
Since the fans are spinning and lights are on, I assumed the power supply was working fine. My research explained that the power supply could be faulty and still provide some power, like a battery that powers the radio but will not start the car. I purchased a power supply. Again, power-up, no POST.

Motherboard
Unlike the power supply, which I could purchase at Best Buy fifteen miles away, I had to order a motherboard online. Again, power-up, no POST.

RAM Part 2
Since I had to wait a few days for the motherboard, why not replace the RAM. Back to Bestbuy. Power-up, no POST.

CPU
My research indicated the CPU was the most unlikely problem, but I had nothing else to replace. I ordered a new CPU and waited another two days. Ugh, power-up, no POST.

The Solution

Less the case, I built a new computer and had the same problem. This reminded me of my father’s old joke, “The lumberjack said, I used the same axe for 25 years, I’ve replaced the handle ten times and head five times”. Something was going on here I did not understand. Clearly, the issue was between my ears.

There is a set of lights on the motherboard called Check EZ Debug LED indicator, used for debugging the POST process. The VGA indicator was lit during each test, which made sense because that is the problem I was trying to solve. If I removed the RAM, the RAM indicator would light up.

EZ Debug LED Documentation

I put the GPU back into the system, and the VGA indicator remained on. This is when MY light went on. While there is an HDMI port on the motherboard, there is no onboard graphics. The CPU (or motherboard) would need to have graphics support, which my CPU does not. The fine print regarding Onboard Graphics for the MSI X470 Gaming Plus reads:

  1. Only support when using Radeon™ Vega Graphics and 2nd Gen AMD Ryzen™ with Radeon™ Graphics/ Athlon™ with Radeon™ Vega Graphics Processors

The issue, all along, was the GPU. One more trip to Best Buy and I was up and running.

All new parts, up and running.

Conclusion

The issue was very straight forward, but my lack of experience turned a one-day minor problem into a ten-day, painful, costly issue. If there was graphics support on the motherboard or CPU, I would have discovered the issue quickly. Because there wasn’t and I didn’t understand that, I saw the same No POST issue with the GPU and without it.

My take away: The presence of an HDMI port does not mean it’s usable, onboard graphics must be supported.

I did enjoy the learning process, and I’m more comfortable inside the computer.

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.

Shared Keyboard and Mouse

I have two Linux computers at my desk. A (closed) laptop connected to a monitor and a home grown tower connected to two monitors. Three monitors in all. I frequently switch between these computers and control them with one keyboard and mouse.

For the past few years, I’ve been using a Logitech wireless keyboard (K780) and mouse (M585) that support multiple computers. One computer is connected to the keyboard and mouse via a wireless dongle, and the other is connected via Bluetooth. A set of keys switches the keyboard between computer, and a button switches the mouse. While the switching works most of the time, sometimes there is a delay. It’s frustrating when keystrokes are delayed or missing.

I recently switched to a wired keyboard and mouse and control the switching with software KVM (Keyboard Video Mouse). After using this for a week, I wish I had made this change sooner. Barrier is an open-source solution that works on Linux, Mac and Windows.

This solution is for sharing a single keyboard and mouse with multiple computers. Each computer requires a monitor.

After installation, you set up one computer as the server, and others as clients. On the Barrier server, you add a screen for each client computer using it’s machine name and position it relative to the server screen. For example, my computer called “pop-os” is to the left of “rebel-tower”.

On the client machines, you identify the address of the Barrier server.

After Barrier is running on the clients and server, when working on rebel-tower and moving the mouse off the screen to the left, the mouse will begin moving on the pop-os screen. Wherever the mouse is active, the keyboard is active. You move the mouse to the computer you want to type on. This implementation is more natural to use than pushing keys and buttons, and it’s fast and smooth.

I have not used any of Barrier’s advanced settings, maybe someday. You can define keystrokes to switch computers and activate advanced functionality. Barrier’s Linux version does not support drag and drop between computers, but Mac and Windows is supported. While this feature could be useful, it’s not critical for me.

I’m always surprised by the quality and abundance of open source Linux applications.