Linux: Adventures with Pop!_OS

19 March 2022

Pop!_OS is a Ubuntu-based distribution produced by System76. It has received good press and is, at the time of writing, ranked in fifth place in the linux distribution popularity rankings over at https://distrowatch.com/.

Certainly, Ubuntu with extra polish sounds like a strong proposition. Can Pop!_OS breath new life into a slightly tired MacBook Pro manufactured in the heady days of early 2015 — a whole 7 years ago? Let’s find out …

Installation

  • I went with the latest long-term support version at the time of writing, Pop!_OS 20.04 LTS
    • In Ubuntu-land using the long-term support version means more time between operating system installs, however it seems that for Pop!_OS it actually makes no difference, with the LTS releases being supported for the same length of time as any other
  • The install was quick; I told it to take over the whole drive; which timezone and language etc, username and pass for the first user, select a keyboard layout, all that standard stuff. Fast and trouble-free

Usability: initial finesse

A few things that required a some small tweaks out of the box:

  • Auto screen brightness does not work that well so I turned that off in Settings→Display
  • The touchpad sensitivity, also in settings
  • Not sure about Bluetooth so I turned that off … I am happy to use wires
  • It was not obvious how to right-click: it turns out that a click with two fingers on the touch pad will do it
  • Out of the box the command/⌘ key to the left of space bar on the Mac keyboard seems to show all windows and provide an application picker and search functionality, which is quite handy

Usability: essential tweaks

There are only two bits of utter madness and these are thankfully very easy to sort out:

  • The windows have a close button but no minimise or maximise buttons by default. This is apparently a GNOME decision which can be sorted with gsettings set org.gnome.desktop.wm.preferences button-layout ":minimize,maximize,close" (reference: https://github.com/pop-os/pop/issues/64#issuecomment-801094753)
  • The default terminal programme has a blinking cursor which then stops blinking after a time. Personally this was not to my taste, so I turned it off with with gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default|tr -d \')/ cursor-blink-mode off

Initial setup

  • Set hostname with hostnamectl set-hostname obiwan where the latter is the hostname of choice
  • No need to install redshift or similar to add red to the display as this is a built-in option in the display settings
  • pop! shop (a front-end to apt) can be used to easily install e.g.
    • Spotify
    • PulseEffects (to allow you to have an EQ)
  • Old-school apt e.g. sudo apt install neovim tmux zsh for
    • Neovim
    • tmux
    • zsh
  • Going to the website and following the instructions for linux/ubuntu/debian works well for
    • 1password (https://1password.com/downloads/linux/)
    • Dropbox
    • Brave
    • miniconda
      • wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
      • There now seems to be a command to stop conda activating the base environement automatically which is quite nice: conda config --set auto_activate_base false
  • I quite like to remove anything that seems glaringly unnecessary
    • I don’t want all of libreoffice so as root I just ran apt remove --purge libreoffice*
    • Removing anything not needed means that apt update and apt upgrade take less time
  • Get nfs mounts working
    • sudo apt install nfs-common
    • sudo mkdir /mnt/mount-name
    • sudo mount server-name:/mount-name /mnt/mount-name

Further setup: sorting the shell with zsh+prezto

  • Install zsh with apt
  • Check /usr/bin/zsh in /etc/shells
  • Change default shell to zsh with chsh -s /usr/bin/zsh
  • prezto is a super simple install following the steps at: https://github.com/sorin-ionescu/prezto

Further setup: Gatsby

The node available via apt is too old so a more recent version is required.

curl -fsSL https://deb.nodesource.com/setup_17.x | sudo -E bash -
sudo apt-get install -y nodejs
  • npm install then worked for me as I already have a packages.json in the repo that holds my gatsby files
  • If using node v17 need to tweak the packages.json file per https://stackoverflow.com/a/69665354 and/or export NODE_OPTIONS=--openssl-legacy-provider
  • Can then npx gatsby develop as normal

Gremlins

I had no idea what this meant but it looked like it needed sorting out:

Err:9 http://repository.spotify.com stable InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5E3C45D7B312C643
Reading package lists... Done
W: GPG error: http://repository.spotify.com stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5E3C45D7B312C643
E: The repository 'http://repository.spotify.com stable InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Thanks to https://chrisjean.com/fix-apt-get-update-the-following-signatures-couldnt-be-verified-because-the-public-key-is-not-available/ for an explainer and solution though …

It can be fixed with a quick

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 5E3C45D7B312C643

Polishing: gnome-tweaks and kinto.sh

Further customisation can be undertaken with gnome-tweaks which can be installed with sudo apt install gnome-tweaks, which is then run as tweaks.

I changed the following:

  • General -> Animations: Off
  • Keyboard & Mouse -> Mouse -> Acceleration profile: Adaptive

The final change I wanted was for e.g. ⌘-c, ⌘-v to work across the browser, terminal, etc, which was achieved with kinto.sh.

Bonuses

  • Quite a lot just works
    • The wifi, changing screen brightness, headphone volume, etc. just works and with sensible little screen overlays to show you what is going on, like MacOS
  • It’s fast
    • The Intel Core i5 with two cores at 2.7 GHz — which feels semi-vintage in the age of the new M1 Apple silicon — feels snappy again and free -h tells me I am using only 3GB of the available 8GB of RAM, and a quick df -h tells me that 15 Gb is being used by the installed software, which is not too bad for a modern system
  • Proper EQ
    • The PulseEffects EQ plug-in is aggressive i.e. it has no problem at all clipping the output signal and it will not stop you doing so. Spotify seems to output high by default so to add any kind of headroom you need to reduce the input and output levels. The ‘gstreamer_more_bass’ preset is pretty much what I was looking for and works well. Combined PulseAudio and PulseEffects do use about 25% CPU which seems acceptable
  • Tiling windows
    • Tiling windows can be toggled on and off which is a significant productivity enhancement as you don’t then have to try to line up two windows side by side when you want to use both of them
  • Very sensible automounting behaviour
    • Stick a usb stick in
    • Gnome disks (disks) tells you the device, the partition scheme, the filesystem, and where it is mounted …
    • … mounting defaults to /media/$USER/$VOLUME_NAME which is very sensible
  • External display works well over HDMI
  • It looks quick nice I think …

Pop OS screenshot

Addendum, August 2022

I enjoyed my adventures with Pop!_OS enough to install it on another machine, this time using the latest release at that time, Pop!_OS 22.04 LTS

I found out a few extra things:

  • For the ‘Happy Hacker Keyboard Pro’, a standard US layout is the one to go for
  • Alacritty is the terminal to use: it can use the GPU and does not have a blinking cursor by default
  • sudo apt install -y ubuntu-restricted-extras will install certain software which cannot be auto-installed (per https://support.system76.com/articles/codecs/)
  • To install the Python scipy package with either pip or poetry you will need to sudo apt-get install libblas-dev liblapack-dev gfortran