Table of Contents

Ubuntu

Configuration

Instructions for Ubuntu 22 LTS Desktop

First step is to follow the Ubuntu server installation instructions for preliminary setup common to both servers and GUI versions. Note that some requirements may be different, e.g. generally no need to host a mail server in Ubuntu Desktop.

Access controls

Add new user / users to groups. For me, the default user is also already superuser. Adding to dialout for tty access:

sudo adduser justin dialout

SSH server

If SSH access to the desktop is needed, install OpenSSH server:

sudo apt install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh

Software

A general listing of what I typically use:

# Command line stuff
sudo apt install git minicom vim subversion

# Programming stuff
sudo apt install tk docker docker-compose

# Utilities
sudo apt install ffmpeg pandoc imagemagick okular xfig

# Sysadmin utilities
sudo apt install htop


# Other utilities from different channels
# Inkscape
sudo add-apt-repository ppa:inkscape.dev/stable
sudo apt install inkscape

# Visual Studio Code
# Alternatively using downloader: https://code.visualstudio.com/download
sudo apt-get install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
rm -f packages.microsoft.gpg
sudo apt install apt-transport-https
sudo apt update
sudo apt install code

# Tailscale
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/jammy.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt update
sudo apt install tailscale
sudo tailscale up --accept-routes

# Zerotier
curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli info
sudo zerotier-cli join d5e04297a16fa690
sudo zerotier-cli listnetworks

# Signal, from https://signal.org/download/#
wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg
cat signal-desktop-keyring.gpg | sudo tee -a /usr/share/keyrings/signal-desktop-keyring.gpg > /dev/null
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' |\
  sudo tee -a /etc/apt/sources.list.d/signal-xenial.list
sudo apt update && sudo apt install signal-desktop

# Telegram
sudo snap install telegram-desktop

# Ubuntu application settings editor
sudo apt install dconf-editor

See the following links for other software:

Deprecated list of software (inherited from Ubuntu 20.04 LTS Desktop):

wget -qO - https://packagecloud.io/AtomEditor/atom/gpgkey | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] https://packagecloud.io/AtomEditor/atom/any/ any main" > /etc/apt/sources.list.d/atom.list'
sudo apt update
sudo apt install atom			# text editor

sudo snap install bitwarden		# password management

wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-focal.list
sudo apt update
sudo apt install openvpn3		# OpenVPN client

Customization

Double-clicking in Nautilus to run scripts is effectively deprecated. The AskUbuntu forum answer suggests one of the following:

  1. Store scripts in ~/bin and run from command palette (Alt-F2)
  2. Store scripts as .desktop launcher within ~/.local/share/applications

According to a different answer, the directory to store executable scripts is actually /usr/bin. Using the Alternatives system to invoke your default terminal and execute the command:

/usr/bin/belgianwit
#!/usr/bin/env bash
x-terminal-emulator -e "ssh -t belgianwit \"cd ~/projects/qkd/; exec \$SHELL -l\""

The script is invoked by bringing up the Run interface with Alt-F2:

Quick tip on GNOME Shell Extensions for Ubuntu 22.04: GNOME Extensions connector for Firefox is effectively not supported since Firefox now comes as a snap package (which is thoroughly sandboxed) by default. Don't install the Firefox connector and chrome-gnome-shell, and use the extension manager instead:

sudo apt install gnome-shell-extension-manager

Struggling with enabling VNC to serve :0 display. Also need to disable gnome-remote-desktop, which does not have an easily searchable way to disable via command line (gconftool seems to be an old method not applicable to Ubuntu 22). Note to also avoid instructions that tell you to install a desktop environment - these are catered to people running hosted servers that do not automatically come with a desktop environment.

Turns out for x0vncserver, need to install a scraping server edition supplied by TigerVNC instead of the standalone server that uses virtual displays.

Sudden realization that the display is Wayland, and not X, and hence does not seem fully compatible with X-related software.

For corner snapping like in Windows (solution adapted from SO), use the fork of WinTile with PRs merged (to allow out-of-box support for Ubuntu 22). Instructions below:

mkdir -p ~/.local/share/gnome-shell/extensions
cd ~/.local/share/gnome-shell/extensions
git clone https://github.com/Captn138/wintile-reloaded.git
mv wintile-reloaded wintile-reloaded@jaajeur.xyz

# Reload GNOME to load extension, by logging out
gnome-session-quit

# Alternatively, enable from Extensions Manager
gnome-extensions enable wintile-reloaded@jaajeur.xyz