Linux Notes

Welcome! This is an mdbook full on notes that Sam Schlinkert has written about installing and running a Linux desktop. It's mostly for personal reference, but you may find it useful. It mostly pertains to Ubuntu-based systems.

My Config Files

Most of my Linux config files (as opposed to guides, which is what this site is mostly made up of) live in this GitHub repo. (Separately, I keep an Alacritty config file as a Gist.)

How this book is set up

This is an mdbook. The book's source files live in this GitHub repo -- if you wish to contribute to this book, please create an issue or pull request there!

The GitHub repo of my Jekyll website/blog, which is one place where this book is published, is here.

Publishing the mdbook to the GitHub Page:

The book.toml file in the mdbook source repo specifies that the mdbook builds to ../ (via the mbdook build command). So when you set this up you need those two directories in the same parent directory.

Once set up, you can run a publish:

  1. In the mdbook source repo, run mdbook build
  2. In the Jekyll site repo, add and commit the Git changes and run git push origin master

How this book is set up

This is an mdbook. The book's source files live in this GitHub repo. The GitHub repo of my Jekyll website/blog, which is one place where this book is published, is here.

Publishing the mdbook to the GitHub Page:

The book.toml file in the mdbook source repo specifies that the mdbook builds to ../ (via the mbdook build command). So when you set this up you need those two directories in the same parent directory.

Once set up, you can run a publish:

  1. In the mdbook source repo, run mdbook build
  2. In the Jekyll site repo, add and commit the Git changes and run git push origin master

Contact the Author

You can find Sam on Twitter or Mastodon or contact him via more secure channels.

Installing a Fresh Distro on Oryx Pro

Once you've got the USB stick in the computer, reboot your system. You’ll need to tell the computer to boot from the live disk by holding F7 or F1 source.

If you're NOT going with Pop_OS, you'll likely need to install System76 drivers and the appropriate NVIDIA drivers. More info on this here.

Some System76/Pop!_OS Links

Support articles

Installing System76 and appropriate NVIDIA drivers for System76 machine

Pop Docs

Initial Setup

Some App Installation and Hard Drive Mounting Basics

Installing Snap

Think it's just sudo apt install snapd.

Know that, sometimes in order to update applications that you install via Snap need to be updated with a command like snap refresh or snap refresh <app_name>. Run snap refresh --help for more information.

Generic upgrade line

sudo apt-get update && sudo apt-get dist-upgrade is a good way to upgrade everything.

How to install from an AppImage if it's not going easily

This tutorial instructs to right-click the download appimage file, go to "Properties" > "Permissions" and then check "Allow executing file as program". Alternatively chmod u+x <AppImage File> to make it executable.

How to mount an external hard drive that's formatted as exFAT

Simply install these programs by running this line: sudo apt-get install exfat-fuse exfat-utils (via).

Desktop files

The Arch Wiki has an entry on desktop entries, which notes

Desktop entries for applications, or .desktop files, are generally a combination of meta information resources and a shortcut of an application. These files usually reside in /usr/share/applications/ or /usr/local/share/applications/ for applications installed system-wide, or ~/.local/share/applications/ for user-specific applications. User entries take precedence over system entries.

Desktop file example

At ~/.local/share/applications/standard-notes.desktop paste the following:

[Desktop Entry]

See the page on Standard Notes for more.

bashrc and Terminal

Here are some tips on setting up your bash environment and your terminal. Most of the config files live in this GitHub repo, for now. Below are some instruction on how to load them correctly and easily.


Here's a one-line bash command to copy down my Linux .bashrc from GitHub:

curl -o ~/.bashrc

Konsole color profile

If you're using KDE, the default terminal emulator, Konsole, is pretty good. To get my colors -- based on my Pink Moon Vim colorscheme -- and profile, run the following two lines:

curl --create-dirs -o ~/.local/share/konsole/Pink\ Moon.colorscheme\ Moon.colorscheme
curl --create-dirs -o ~/.local/share/konsole/pink-moon.profile

Alacritty terminal emulator config file

Alacritty is a cross-platform terminal emulator written in Rust, so it's really fast.

My Alacritty config file -- complete with colors -- is tested on MacOS, not Ubuntu, but if you want to try it: Place the following yaml file at ~/.config/alacritty/alacritty.yml: Alacritty config. To do this, try running:

curl --create-dirs -o ~/.config/alacritty/alacritty.yml


Before you do anything else, especially with Neovim or Vim, install git! sudo apt install git

Given the holistic setup in this document, you're going to want to use the ssh URL when cloning down repos from GitHub (as opposed to HTTPS).


I think I used the stable ppa and followed these instructions, though given this page, we might be able to just do sudo apt install neovim at this point?

Before proceeding, make sure git is installed.

A decent init.vim file is contained in my linux-config repo.

mkdir ~/.config/nvim
curl -o ~/.config/nvim/init.vim

Next, we can install our plugins by running nvim +PlugInstall +qa.

Deoplete / Neovim

For Deoplete to work well, first I'd recommend setting up pyenv.

To update Deoplete, you may need to run :UpdateRemotePlugins in Neovim. Neovim's :CheckHealth is your friend here.


Installing the Snap

sudo apt install snapd

I then installed KeePassXC with snap install keepassxc,

Installing from the app image

Here's the download page. See the Basics section for AppImage installation instructions.


I installed Syncthing via the instructions at the top of this page

I then setup Syncthing, including my KeePass database.

Useful bash functions

# Via:
function ss {
  if tmux has-session -t synct 2>/dev/null; then
    echo "Syncthing session already started at" >&2
    return 1
  echo "Starting up Syncthing at"
  tmux new-session -d -s synct "syncthing -no-browser"

function se {
  if ! tmux has-session -t synct 2>/dev/null; then
    echo "No Syncthing session to end." >&2
    return 1
  echo "Stopping Syncthing and killing the tmux session"
  tmux send-keys -t synct C-c

Setting up Standard Notes on Linux

First, let's download Standard Notes for Linux.

Where to put the AppImage file?

Here's one way that works: Create a directory at ~/standard-notes/ and move the AppImage file there. Also, go download a PNG of the Standard Notes logo and place it in this directory.

Creating the .desktop file

If you don't yet have a .desktop file for Standard Notes, we'll create one. At ~/.local/share/applications/standard-notes.desktop paste the following:

[Desktop Entry]

Now, after a computer restart, Standard Notes should come up when you search your applications.

More on desktop files in the Arch Wiki.


GNU Privacy Assistant

For a GPG GUI application, try sudo apt install gpa which installs a program called "GNU Privacy Assistant"

Using a PGP private key from a Smartcard on Ubuntu

  1. Add the public key to your system: Get the .asc file onto your system, then run gpg2 --import <file-name>.asc
  2. Plug the smartcard into your computer.
  3. Try running gpg2 --card-status.


  • If the above doesn't work try installing scdaemon and pcscd with sudo apt install scdaemon and then sudo apt install pcscd. You may also need to sudo apt install gpgsm
  • You may also need to kill and restart scdaemon with:
killall scdaemon
pgrep scdaemon

You can now encrypt and decrypt files with the pgp keys on your smartkey using the gpg2 command line tool. To decrypt a file run something like this: gpg --output test --decrypt '/home/schlinkert/keepass-databases/key-files/fly1.key.gpg'. Check that you can decrypt a Keepass database AND that you can alter settings.

Other Apps to Install

  1. Installed Wire desktop via these instructions
  2. Download and install Signal
  3. Install Ricochet from its website -- not sure the procude here. You can also look in your distro's GUI app store, though check version.
  4. Install Tor Browser (forget how exactly I did this-- maybe Tor Browser Launcher? From POP store?)
  5. To install OnionShare, I followed the "Ubuntu" instructions on their download page and added their PPA. (The version in the POP store was 0.9 -- too old for me.)
  6. Install Chromium via the POP app store if you like.
  7. Install Standard Notes app from their site

Standard Notes .desktop file

Put this in ~/.local/share/applications

[Desktop Entry]
# Exec=/home/$USER/standard-notes/standard-notes-2.3.8-x86_64.AppImage 

Ricochet .desktop file

Download a Ricochet icon as a png if necessary.

Then put this in ~/.local/share/applications

[Desktop Entry]

Chrome and Flash

The best way to watch things that might require Flash(?) like Hulu is to do it through the Chrome browser (not Chromium)

Download Chrome and then install it (I forget the steps).

You may need to also install some sort of flash plugin. In the past I've tried running: sudo apt-get install flashplugin-installer and then restarting Chrome.

I've Googled and found blog posts like this one with other things to try.

Development Environment

Installing Pyenv

I'm not sure if you have to uninstall any versions of Python before you do this, but I doubt it. You might want to checkout your bashrc to make sure there isn't any weird Python PATH stuff in there before we start.

  1. Install Pyenv, probably via the "Basic GitHub Checkout" method
  2. Add the necessary stuff to your .bashrc (not .bash_profile)
  3. Restart terminal
  4. Maybe install dependencies? (You may be good to go already.)
  5. pyenv install --list and pick new-ish-but-stable versions of python2 and python3 to install. For example: pyenv install 3.70 2.7.15
  6. You can set version 3 as the global, with 2 as fall-back: pyenv global 3.7.0 2.7.15. You could also set the system version as a fallback, with pyenv global 3.7.0 2.7.15 system.
  7. Check that pip is installed (I think it's included?). You should be able to upgrade pip3 with pip3 install --upgrade pip and pip2 with pip2 install --upgrade pip

Let's see how we did: If successful, python2 gets you Python 2, python3 or python gets you Python 3. Similar with pip2/pip3/pip.

To install autosub (which I think necessitates Python2) run pip2 install autosub

Deoplete / Neovim

Now that we've got a nice little Python and Pip environment set up, let's make sure Deoplete is using it.

If you use Neovim + Deoplete, you probably want to run pip3 install neovim to ensure Deoplete works smoothly (see Deoplete's requirements).

I also ran pip2 install neovim because Neovim's :CheckHealth told me too. At this point, you may need to update Deoplete by running :UpdateRemotePlugins in Neovim. (Neovim's :CheckHealth is your friend here.)

Ruby and rbenv

  1. Install rbenv (via "basic github checkout")
  2. Install ruby-build as an rbenv plugin.
  3. At this point you made need to run sudo apt-get install -y libssl-dev libreadline-dev zlib1g-dev before proceeding
  4. rbenv install -l lists available versions of Ruby. Pick one to install.
  5. Set that version to global.

You can update the Ruby versions available to rbenv by running rbenv_upgrade (found in bashrc).

function rbenv_upgrade {
  cd ~/.rbenv && git pull
  cd ~/.rbenv/plugins/ruby-build && git pull
  cd ~

Rust + Neovim

This assumes you have Neovim installed already.

  1. Install Rust. Make sure to add export PATH="$HOME/.cargo/bin:$PATH" to end of ~/.bashrc. Note: you can uninstall at anytime with rustup self uninstall.

  2. Install rustfmt and its Vim counterpart, rust.vim

  3. Install Rust Clippy

Getting Autocomplete in Neovim with Deoplete

  1. Install Deoplete
  • You may first be required to install some Python stuff. You may want to get your pyenv setup working first. However, in a pinch, these commands have worked for me in the past:

    • Install pip3 with sudo apt-get install python3-pip
    • and then pip3 install neovim
  1. Check that let g:deoplete#enable_at_startup = 1 is set in your Vim config file.

  2. Install Racer

  3. Make sure Vim Racer is installed. My vim-racer config is:

Plug 'racer-rust/vim-racer'
set hidden
let g:racer_cmd = "~/.cargo/bin/racer"
let g:racer_experimental_completer = 1
  1. Make sure you you've got the rust.vim Vim plugin installed: Plug 'rust-lang/rust.vim'

Language Server

  1. Install Rust Language Server
  2. Get LanguageClient-Neovim setup.

Altogether your Neovim init.vim is going to look something like this:

" Rust Language Server
Plug 'autozimu/LanguageClient-neovim', {
\ 'branch': 'next',
\ 'do': 'bash',
\ }

Plug 'junegunn/fzf'

" Auto-complete
if has('nvim')
  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'

" Language or filetype specific
Plug 'rust-lang/rust.vim'
Plug 'racer-rust/vim-racer'

" ...

" Language Server Config
let g:LanguageClient_serverCommands = {
\ 'rust': ['~/.cargo/bin/rustup', 'run', 'stable', 'rls'],
\ }

nnoremap <silent> K :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
" got an error with this on only attempt
nnoremap <silent> gr :call LanguageClient#textDocument_rename()<CR>

" Deoplete (general auto-complete)
let g:deoplete#enable_at_startup = 1

" Racer (Rust auto-complete)
let g:racer_cmd = "~/.cargo/bin/racer"
let g:racer_experimental_completer = 1

" ...

set hidden

Then, from the command line, run nvim +PlugInstall +UpdateRemotePlugins +qa to install all that right.

GitHub and ssh keys

Make sure Git is installed

  1. Set git username (email) and email locally

  2. Generate a new shh key pair on your machine, then upload the public key to Github. I followed these instructions, creating an ssh key locally, with a passphrase that I stored in my Keepass database.

  3. In the bashrc included in this repo is some code that handles your ssh-agent. I got it from this section of the Arch Linux wiki. Here's the bash code if you need:

if ! pgrep -u "$USER" ssh-agent > /dev/null; then
    ssh-agent > ~/.ssh-agent-thing
if [[ "$SSH_AGENT_PID" == "" ]]; then
    eval "$(<~/.ssh-agent-thing)"
  1. touch ~/.ssh/config and in that file write AddKeysToAgent yes, as per the Arch wiki entry.

Alternatively, you could try storing ssh key in KeePassXC database, but I haven't had luck with that in the past.

Given this setup, you're going to want to use the ssh URL ( when cloning down repos from GitHub (as opposed to HTTPS).

GitHub blog with Jekyll

  1. Be sure rbenv is set up and a modern version of Ruby is set to global.

  2. gem install jekyll bundler

  3. git clone

  4. cd into the repo

  5. bundle exec install

  • To publish changes: commit changes, then run bundle exec jekyll build, then git push origin master


Some System-Level Basics (Gnome)

  1. In settings > "Mouse and Track Pad", put "Mouse Speed" about in the dead center and turn off "Natural Scrolling"
  2. In Gnome Keyboard settings, change "Switch windows of an application" OR "Switch windows of an app directly" to "Super + Escape"
  • You may also want to remap commands like "View split on left" and "Move one monitor left", as well as the Workspace commands
  1. Download the Gnome Tweaks Tool via the Pop app store. In Tweaks:
  • Remap Caps Lock to Control in "Keyboard & Mouse" > "Additional Layout Options".
  • Suggested: Change "Mouse" "Acceleration Profile" to "Flat"
  1. Change your desktop background!

  2. Disable blinking cursor in gnome-terminal: In terminal: gsettings set org.gnome.desktop.interface cursor-blink false

Gnome-terminal profile

Head over to my linux-config repo to load my Gnome terminal profile.

If there's a problem, dconf dump /org/gnome/terminal/legacy/profiles:/ might be helpful, as it lists the profiles loaded on your system.

Changing Default Fonts

Weirdly the only place I could find this is in Gnome Tweak Tool (which I think I installed via the GUI Pop software store). Here are the defaults and what I changed them to:

  - Window title: Fira Sans SemiBold 10 --> Noto Sans CJK KR Bold 10
  - Interface: Fira Sans Book 10        --> Noto Sans CJK KR Regular 10
  - Document: Roboto Slab Regular 11    --> IBM Plex Sans Regular 11
  - Monospace: Fira Mono Regular 11     --> Deja Vu Sans Mono Book 11

You can download IBM Plex here.

KDE Setup and Troubleshooting

Basically, if you go with the Kubuntu "Minimal Install", configure KDE with your heart.

KDE Troubleshooting

If, after installing the proper NVIDIA drivers and restarting the machine, everything looks big, go to Fonts settings menu and "Force" the DPI to 96.


Redshift + Xorg + KDE

If you're running KDE and Xorg, you'll likely need to use Redshift to tint your screen at night. "Redshift Control" is a KDE widget that gives you a nice GUI to configure Redshift (found by searching the "Get new widgets" interface).

I also found (in this video) what might be the command line way to install both redshift and the plasma widget:

sudo apt install redshift plasma-applet-redshift-control

Although elsewhere I've seen an additional program recommended:

sudo apt-get install plasma-widget-redshift plasma-applet-redshift-control

Configuring Redshift in Plasma

First, I'd recommend moving the widget to the task bar. Then, to configure it, simply right-click the widget and click configure. Hit "Locate" to automatically locate your position. Then for temperature 6500 for Day and 3250 for Night seems to work well.


For gtk-based desktop environments like GNOME, you're probably going to want to run sudo apt-get install redshift redshift-gtk

Installing TLP for Battery Management

If you're using a laptop and want to conserve battery smarter, you can install a power manager called TLP.


Images and Video

For editing RAW photos, try Darktable of DigiKam(?). Here are some free film emulators for DarkTable.

There's also GIMP and Kdenlive (for video)!

Installing Ubuntu on my 2009 MacBook Pro

I had an old 17-inch MacBook Pro from 2009 (college) lying around and I figured it'd be a fun challenge to install Linux on it. I had never installed or even used Linux before (to my knowledge). I also, confusingly, hadn't found a clean, step-by-step guide for doing this, so I promised I'd write my process out as thoroughly but simply as I could once I got it done.

I now realize, I think, that the reason the process of installing even a popular Linux distribution on a common (if old) model computer isn't written out or easily findable is that the process is a bit different for everyone, depending on the distro, the version, and the hardware you're starting with. Note that I didn't want to partition my hard drive to allow myself to dual-boot either in OS X or Ubuntu-- I was going for a full replacement, and thus would and did lose all the files on applications I had on the old Mac.

But regardless, here is the process I took.

About This Mac

Model name: MacBook Pro
Model Identifier: MacBookPro3,1
Processor Name: Intel Core 2 Duo
Processor Speed: 2.4GHz
Number of Processors: 1
Total number of cores: 2
L2 Cache: 4 MB
Memory: 2GB
Boot ROM Version: MBP31.0070.B07

It's a 17 inch screen. I believe I bought it in the summer of 2009.

was running:
OS X 10.9.2 (13C64)

How I Got Ubuntu 16 Installed

Again, note, this worked for me and my machine but may not for you. For example I believe I had to do steps 4, 5, 8, 9, 10, and 11 only because I have a MBP with an Intel chip.

Also, WARNING, this procedure completely wiped my OS X and all the files and applications on that installation, as I intended. There are ways to dual-boot both, but I wasn't interested in that as Mavericks was running super slow on this computer. Furthermore I think all the data I had on my USB stick is lost due to it being formatted in a certain way at some point in the procedure.

UPDATE (February 2017): Before moving ahead, you may want to consider the following. A helpful commenter, Brian Moran, writes that, when installing Ubuntu on an older Mac with a NVIDIA graphics card, it may be better to "boot in 'Legacy BIOS mode', not in 'EFI' mode":

Apparently what is happening is that both the open source and Nvidia drivers are buggy when doing an "EFI Install" on Mac machines. If full graphics performance is desired, a "Legacy BIOS Install" is needed.

From the forum post that the commenter cites, which is concerned with a MacBook Air 3,2:

The core problem with the [generic] installation is this. The graphic driver that Ubuntu installs by default (Nouveau) has bugs with the MacBook Air 3 graphic processor, the nvidia GeForce 320M (G320M). You can do a default install, it will boot normally, but you'll soon see little glitches here and there and the computer will normally crash after a few minutes of use (especially when transparency or shadow effects are used, it seems). The problem exists with Raring and I expect it arises with Precise (though see ''alternative solutions" below).

To avoid that, you need to install the proprietary nvidia driver. But here is the catch: the driver requires the computer to boot in "Legacy BIOS mode", not in "EFI" mode (see here or here). If you install the nvidia drivers while Ubuntu is in EFI mode, you'll get a blank/black screen at the beginning of the boot. (If you got to that stage, see the ''recovery for nvidia drivers EFI crash'' below). On a PC you can force Ubuntu to install in BIOS Legacy mode by selecting that mode in the computer BIOS. But on a Mac you can't (easily) do that, and if you install from a USB key by default you will be in EFI mode.

So summing up, if you do a default installation of Ubuntu from a USB on a MacBook Air 3,1 or 3,2, you'll either have buggy graphics and random crashes, or you'll install the nvdida drivers and have a blank/black screen at startup.

For the record, I followed the procedure detailed below with my MackBook Pro 3,1 and while I now believe that my nvidia card is NOT being used, basic computing (web browser, document editing coding, simple games) are working just fine. Not being a gamer I don't know much about graphics cards, but for what it's worth I believe my MacBook Pro has a G84M [GeForce 8600M GT] card, which is not the same model listed in the forum post the commenter cites.

But if I were starting over I might instead consider the procedure outlined in the forum post the commenter links to in hopes of even better performance. End of February 2017 update.

Alright, with all that said here's what I think I would do if I were starting fresh, knowing what I know now:

What I Did to Install Ubuntu

  1. Get a USB drive with at least 2 GB of storage. Know that it's going to get wiped, so move important files off it first. Then use the MacOS Disk Utility to format the USB stick as DOS FAT32.
  2. I'd follow this guide to download Ubuntu 16.04 LTS and get it onto the USB stick, using UNetbootin.
  3. As described in the final step in that guide, when you restart, hold down the option key on your Mac. In the resulting menu, select the "EFI" device as the device to boot from.
  4. You'll be confronted with a text-only menu that's from a piece of software called GNU GRUB. Key down so your cursor is on "Install Ubuntu", but instead of pressing enter, press e to edit the commands before booting.
  5. This opens an options file in a basic text editor. Find the line that has ro quiet splash in it and make that bit of the line read ro nomodeset quiet splash. Then press either F10 or Ctrl-X to boot (read the text at the bottom of the screen to be sure of the key(s) to press).
  6. If presented with a choice in GRUB (a text menu) with an option to install Ubuntu, choose that option.
  7. You should be then presented with a nice GUI (not text only) Ubuntu installer, or maybe an icon that says Install Ubuntu. Double click the icon if you see it. Go through everything, decide whether or not to connect your Wifi to download updates, decide whether or not to encrypt your home folder, and then choose restart.
  8. We now need to boot Ubuntu in recovery mode. To do this, as the computer is starting up again after restart, right after you hear the Apple/Mac start-up sound, hold the SHIFT key. Repeat step #3 above if you're presented with the EFI option. Once you're at a text-only menu, press e and add nomodeset to the line of code discussed above. Then press the key(s) to boot. Ubuntu should boot up-- though the display may be screwy. In either case, we're not done yet.
  9. Now we need to make that nomodeset setting permanent. Open terminal (ctrl+option+t) and run sudo nano /etc/default/grub. (Reference)
  10. In that file, add nomodeset to GRUB_CMDLINE_LINUX_DEFAULT as seen below:
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"
  1. Save this text file by hitting Ctrl+O, then exit nano with Ctrl+X, then, back in Terminal, run: sudo update-grub
  2. Restart the computer (the menu for which is in the top-right corner of Ubuntu 16).

I think that would do it. I don't think I needed rEFInd. And apparently the warning on UNetbootin that I could run the device on Macs was not accurate.

For completeness sake, here is the actual process I went through over three days.

Attempt #1: Ubuntu 16.04

I found this guide which involved downloading and using the UNetbootin USB installer.

I believe I successfully downloaded the Ubuntu 16.04 ISO and UNetbootin. I then installed UNetbootin (by dragging it into Application) and then I used UNetbootin as described in the tutorial. However at step 7 when I restarted my Mac and held the option key I was presented with a menu to try or install Ubuntu. Every time I selected "install" it just went to a black screen. I waited minutes but no installation screen appeared. I then held down the power button and the computer rebooted in OS X, back to square one.

I will say that after using UNetbootin to load the USB stick the program warned the device could only boot the new OS on PCs, not on Macs. I chose to ignore that warning and try anyway, but as I reported above, it didn't work.

Upon further research I believe the Ubuntu 16.04 may not work on Intel-based MBPs made circa 2009. One page,, seemed to encourage those with MBPs this old should instead opt for Ubuntu 14.04.

I didn't want to run an old version of a distro I wasn't particualrly excited about if I could find a distro that I could run the lastest version of. Plus I couldn't quite figure out how to download an (official) copy of version 14.04.

Attempt #2: Mint 18 ("Sarah") Cinnamon 64-bit

I understand that the other distro well-reviewed for beginners is Mint. And I saw that Mint 18 was itself got good reviews.

So I headed over to their download page and chose "Cinnamon 64-bit" and downloaded it via a torrent.

The only tutorial that I found for installing Linux Mint via USB seemed strange and brief. Thus my current plan is to try to use UNetbootin again, following the Ubuntu guide but with Mint this time rather than Ubuntu 16.04.

However, as before, after using UNetbootin it told me the device could only boot the new OS on PCs, not on Macs.

When I restarted my Mac and held down the option key, I got a similar menu as when I tried Ubuntu, but eventually came to a dark black screen. I waited a few minutes, and then forced the computer to shut down by holding down the power button.

Attempt #3: Back to Ubuntu 16.04 by a different method

I followed the instructions presented here, which I was optimistic about it because it avoided using UNetbootin, along with the potentially helpful warning:

UNetbootin for Mac OS X can be used to automate the process of extracting the Ubuntu ISO file to USB, and making the USB drive bootable. The resulting USB drive, however, can be booted on PCs only.

Which mirrors the warning UNetbootin gave me.

However the method described in the link above failed in the same way the others did-- I restarted, held down the option key, chose the EFI boot, chose to install Ubuntu, and then was met with a black screen. For the first time I thought to check the light on my USB stick to see if it was at least thinking but it was off.

Attempt #4: Using rEFInd Boot Manager

From here I found an article about installing Debian (a more advanced distro of Linux).

That let me to believe rEFInd was something I needed to install first.

However this program (I admittedly didn't take the time to figure out what it actually does) did not seem to help. Afterward, and before my next attempt, I bypassed rEFInd by going to System Preferences > Start Up Disk, selecting my hard drive and hitting the restart button. Thus I do not think I actually needed to install rEFInd to successfully get Ubuntu installed, however I'm not 100% of this, since the rEFInd uninstall instructions for OS X recommend bypassing rEFInd rather than actually uninstalling it.

Attempt #5: Having bypassed rEFInd, I replace quiet splash with nomodeset

Big success!

Somewhere else I remember seeing someone recommend turning on an option called nomodeset in GNU GRUB, but for some reason didn't think I had that option in the menu that I kept getting. Turns out, as described here, when you get to the GRUB menu you hit the e key. Then you add nomodeset as a parameter in one of the lines of code in the text file that opens. Removing quiet splash seems to just present more text as output-- the nomodeset solved the problem.

After maybe 40 seconds I was presented with an Ubuntu desktop and a shortcut icon to an Ubuntu installer. I double-clicked the installer and followed the wizard.

I connected to my wifi network and told it to download updates as it installed to make things quicker. The only hard choice was whether to encrypt my home folder (which I believe you can't do later). I decided not to based on this answer as I was worried about the performance hit on decrypting on a machine with 2GB memory. Then I just waited for Ubuntu 16.04.1 LTS to install.

After installation it asked me to restart. I clicked yes. I then got an ugly error message that said something like "remove the installation device and hit enter". I still had the USB stick in, unsure when I was to remove it. I pulled it out and hit enter. The computer then restarted, making the familiar Mac start-up sound and presenting the familiar Mac gray, but then it switched to a purple Ubuntu-like color and stayed there for a minute.

Setting nomodeset permanently

When I came back from that restart it was stuck on a purple screen. I figured I needed to set nomodeset permanently on. I needed to get back to the GRUB screen, which I figured out from somewhere:

  1. Switch on your computer.
  2. Wait until the BIOS has finished loading, or has almost finished. (During this time you will probably see a logo of your computer manufacturer.)
  3. Quickly press and hold the Shift key, which will bring up the GNU GRUB menu. (If you see the Ubuntu logo, you've missed the point where you can enter the GRUB menu.)

Then, to set nomodeset to be on permanently, I followed this Ask Ubuntu answer that reads:

You should add this option to /etc/default/grub, firstly:

sudo nano /etc/default/grub

and then add nomodeset to GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset"

And then save by hitting Ctrl+O, then exit nano with Ctrl+X, then simply run:

sudo update-grub

I saved that file and ran sudo update-grub as instructed. I then restarted my computer once again and I think that's when things went smoothly for the first time.

(FYI a similar process to the one described above seems to be given here but with some other stuff as well, if you need more help at this stage.)

Initial Thoughts

Woohoo! It seems snappier that OS X 10.9, but it's not a speed demon like my 2012 MacBook Air with 8 GB of memory.

But the desktop and dock are familiar enough to me. It comes with Firefox, Libre Office, a basic text editor, and a link to in the dock that's on the left by default. I got terminal Vim and RVM running with a few Google-able tweaks from the OS X installation process. Remapping caps lock to control was one line in Terminal (setxkbmap -option caps:ctrl_modifer), however that did not persist when restarted. I followed this AskUbuntu answer and went to Startup Applications > Add > and entered setxkbmap -option caps:ctrl_modifer. It seems to persist on restart now.

I was able to install git by running sudo apt install git. Similarly I was able to install KeePassX by running sudo apt-get install keepassx (I'm not 100% in the difference between apt and apt-get here but that's what I saw on the internet help sites I found). I also installed a fresh version of vim but I forget what line I ran in terminal.

To run a general update and upgrade, I run sudo apt update && sudo apt upgrade, which seems to work.

We'll see how much I use this old computer going forward, and what for.

Update: Just found this website that aims to teach Linux for beginners, which I might checkout. There's also this series of YouTube videos: Ubuntu Beginners Guide that looks nice, is Ubuntu-specific, and is, as of this writing, only one month old.


Switching from Ubuntu to Lubuntu

To avoid the high memory usage of Ubuntu's Unity desktop environment, I installed Ubuntu's LXDE desktop environment (called Lubuntu). I had a gist that Unity was a bit of a memory hog compared to other desktop environments. I also spotted this Reddit post that compares some lightweight distros in terms of RAM consumption and Lubuntu did well.

To install Lubuntu, I ran sudo apt-get install lubuntu-desktop (I learned this from a helpful user in the Ubuntu channel). The size of the installation was about 340 mb.

After installing the Lubuntu desktop environment, you want to run the software updater (you can also update software in the Terminal by running sudo apt update && sudo apt upgrade). Then restart the computer (that seems to have been pretty important), and at the login screen choose Lubuntu (or LXDE... that's another option and I'm not sure what the difference is).

You can check how much RAM you have available by running free -m in the terminal. Thanks to this site, I knew to look for the value under "available" to get an accurate estimate of how many megabytes of my memory were "free". With my terminal and Firefox running on Lubuntu, I have about 1187 MB RAM of my 2 GB available, as opposed to Ubuntu, which generally only left about 700 or 800 MB available when I was running a couple of programs (not a very scientific test, I know).

Plus I can always switch back to regular Ubuntu via the login screen.

Lubuntu is pretty snappy! I did want to make a few simple changes right off the bat. Here's how I went about some of them.

How to disable tap to click persistently in Lubuntu

I wanted to disable my touchpad from clicking, which I did by doing this:

  1. Open ~/.config/lxsession/lubuntu/autostart or possibly ~/.config/lxsession/LXDE/autostart (not sure which)
  2. To disable tap touchpad to click, add synclient MaxTapTime=0

You can find other settings to set here, like enabling two-finger horizontal scroll (synclient HorizTwoFingerScroll=1).

Installing an application launcher for Lubuntu

On macOS I make frequent use of Alfred as an application launcher. Ubuntu's Unity desktop environment sort of had something like that, which you can initiate by pressing the command key on its own at any time. But I couldn't find something similar in LXDE-- the application menu (similar to the Start menu in Windows) was just not fast enough for me coming from macOS + Alfred).

So I found this askubuntu answer that recommends installing an application called Synapse by running sudo apt-get install synapse. By default the launcher is invoked by hitting ctrl + space, but I changed it to alt+Enter by launching Synapse and clicking on the not-super-obvious round button on the right side of the pop-up display and clicking "Preferences". Works great!

My attempt to make the Gnome terminal the default

The default Terminal in Lubuntu (think it's called LXTerminal) didn't support true color in Vim, so I looked for other options. I had gotten used to the terminal in regular Ubuntu (which I'm pretty sure is the Gnome Terminal), so I figured I could switch that in on Lubuntu. Oddly it's not in the main menu of applications though.

First, I figured out a way to set it as the "default" terminal:

  1. menu > Preferences > Default applications LXSession
  2. Launching applications > Terminal manager > More > write in "gnome-terminal" for "Manual setting"

This seems to have worked? Notably, Gnome Terminal launches when I enter the standard launch-terminal shortcut of option + control + t.

While here, I also changed default application for spreadsheets to LibreOffice Calc

To get an icon from Gnome Terminal to appear in the desktop menu, I loosely followed this forum answer and created a new file in the directory ~/.local/share/applicatons called gnome-terminal.desktop and entered the following text into that new file:

[Desktop Entry]
Name=GNOME Terminal
Keywords=console;command line;execute;

Upon saving that file, I got a new icon in menu > System Tools called "GNOME Terminal" that launches my now-beloved Gnome Terminal. Woohoo! (If Icon=gnome-terminal hadn't worked I would have used Icon=lxterminal)

See separate entry for more on using Vim in Lubuntu.

More Lubuntu configuration ideas

Just found this long forum post with more ideas of recommended features for Lubuntu. There's also the Community Help Page here.

Some lingering problems on Lubuntu

  • can't figure out how to set custom openbox keybindings
  • Want to disable scrolling in Gnome terminal

Improving Lubuntu

Swapping control and caps lock on Lubuntu 16.04

First I ran setxkbmap -option ctrl:swapcaps in gnome-terminal, and observed that the keys were switched on my Macbook keyboard.

Now, following an answer on the web whose URL I've lost, I added that line of text to ~/.config/lxsession/Lubuntu/autostart.

Note that the setxkbmap line the worked in Ubuntu 16.04, setxkbmap -option caps:ctrl_modifier, did not work immediately when run in terminal in Lubuntu.

How to Install Neovim on Lubuntu 16.04

I'm using Lubuntu 16.04 and we're assuming that we're going to be using gnome-terminal. I couldn't figure out how to get HEX colors in Vim when using Lubuntu's default Terminal application, LXTerminal.

Thus I took some steps to make Gnome terminal the default Terminal application, and added an icon for it in my menu. These steps are described in another section of this document.

Note: If you're looking for info on installing plain Vim, see the end of this post.


First, we're going to want to install git in order to use vim-plug later: sudo apt install git

Next, I went over to the Ubuntu section of the Neovim installation page

Assuming I needed this dependency, I probably ran: sudo apt-get install software-properties-common

I then chose the unstable version:

To add the PPA to my system, I ran

sudo add-apt-repository ppa:neovim-ppa/unstable
sudo apt-get update

I then installed Neovim from this PPA by running sudo apt-get install neovim. I think the nvim command worked after that.

Critical changes to Vim config file

First, since on Lubuntu I'm likely only going to use Neovim and not Vim, I renamed my vimrc to init.vim and put it in ~/.config/nvim/ (which I may have had to create myself).

I then changed my vim-plug call to download my plugins to ~/.config/nvim/plugged: call plug#begin('~/.config/nvim/plugged')

I could have chosen to set vim-plug to download plugins to another directory somewhere in ~/.local/, which may have kept the ~/.config directory closer to what I assume is its intended purpose of just being configuration files, and not actual software.

Also, I had to redo this mappings that open my vim config file:

" Quickly open a vertical split of my VIMRC and source my VIMRC
nnoremap <silent> <leader>ev :vs $MYVIMRC<CR>
nnoremap <silent> <leader>sv :so $MYVIMRC<CR>

Syntax Highlighting Colors

I also made sure that set termguicolors was definitely being run in my init.vim file-- on my Mac I ran it only conditionally based on the terminal Vim detected. For now, let's just run it, as gnome-terminal is capable of running hex color vim themes.

System Clipboard

Within Neovim I ran :CheckHealth which kindly informed me that to get system clipboard support, I'd need to install a program called XSel. So back on the terminal I ran sudo apt install xsel and then restarted my terminal.

Then in my init.vim I figured out through trial and error that I needed to use the + register to access the system clipboard, rather than * that I used on MacOS:

" use leader to interact with the system clipboard
nnoremap <Leader>p "+]p
nnoremap <Leader>P "+]P

nnoremap <Leader>y :y+<cr>
nnoremap <Leader>c ^"+c$
nnoremap <Leader>d ^"+d$

vnoremap <Leader>y "+y
vnoremap <Leader>c "+c
vnoremap <Leader>d "+d

Though strangely, custom mappings that use the systemclipboard register still work with the * rather than the +:

" place enter file on system clipboard
nnoremap <Leader>a :%y*<cr>

" In markdown files, Control + a surrounds highlighted text with square
" brackets, then dumps system clipboard contents into parenthesis
autocmd FileType markdown vnoremap <c-a> <Esc>`<i[<Esc>`>la](<Esc>"*]pa)<Esc>

Other Things To Consider

I have Lubuntu installed on an old MacBook, whose track pad sometimes gets triggered when I'm typing. Thus in this Vim configuration I chose to disable my mouse

" disable mouse
autocmd BufEnter * set mouse=

Appendix: Some Notes on Vim (not Neovim)

As of this writing, you can install Vim 7.4.X with something like sudo apt-get vim. To install, Vim 8 currently you need to use a PPA.

But with both versions of Vim I was having trouble getting access to the system clipboard, so I went with Neovim. Though you can have both installed, with their own configurations, pretty easily.

Installing rbenv on Lubuntu 16.04

We're attempting to install rbenv via the "Basic GitHub Checkout" method.

I think we're also going to want ruby-build plugin. I DON'T think I'm going to want rbenv-gemset?

Installing rbenv

As mentioned above, we're going to install rbenv via the "Basic GitHub Checkout" method. I reproduce them below, but you should consult the latest instructions for Ubuntu on that GitHub page.

Clone down rbenv:

git clone ~/.rbenv

Make it more efficient:

cd ~/.rbenv && src/configure && make -C src

Add rbenv to your PATH:

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc

And finally run this init script:

~/.rbenv/bin/rbenv init

Following instructions from the init script run, I added eval "$(rbenv init -)" to my ~/.bashrc, just below the export PATH="$HOME/.rbenv/bin:$PATH" line that we added with the echo command above.

Now restart your terminal and/or run source ~/.bashrc.

Check your rbenv installation by running type rbenv. It should say it's a function.

Installing the ruby-build plugin

Wanting to build the latest version of Ruby a nice and clean way, I installed ruby-build by running git clone ~/.rbenv/plugins/ruby-build

Installing a version of Ruby using rbenv (some problems)

Now we can install some versions of Ruby using rbenv.

rbenv install --list gives us all available versions to install.

I'm going with 2.3.3, so I ran rbenv install 2.3.3. It took a long time to install and then told my the build failed. It suggested running apt-get install -y libreadline-dev so I did that (prefaced with sudo) and that software seemed to install successfully.

On second attempt I ran rbenv install --verbose 2.3.3 so that I could better see what's going on (turns out, it's a lot!). Success this time!

Once that's all installed, I opened a new gnome-terminal window. I was greeted by this shitty message at the top of the terminal window:

The program 'rbenv' is currently not installed. You can install it by typing: sudo apt install rbenv

but I learned that this can be temporarily solved be running source ~/.profile. And that it will be solved permanently once you restart Ubuntu/Lubuntu (source: this GitHub issue).

Then I had to set Ruby v. 2.3.3 as my global version of Ruby, which I did with rbenv global 2.3.3. After that, ruby --version gave me the familiar: ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]

Installing gems with rbenv

I definitely want to install the "bundler" gem. To do this, I ran: gem install bundler, just like with RVM.

From there things seem to be just fine. Installed gems just work so far.

Configuring Openbox on Lubuntu

Openbox is a window manager that comes installed with Lubuntu/LXDE.

To configure it, open ~/.config/openbox/lubuntu-rc.xml in a text editor.

Change the relevant section to this:

<!-- Keybindings for window tiling -->
<keybind key="W-Left">    
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
<keybind key="W-Right">  
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
<keybind key="W-Up">        
  <action name="ToggleMaximizeFull"/>
<keybind key="W-Down">     
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">

<keybind key="W-j">        
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">

<keybind key="W-k">        
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
<keybind key="W-n">        
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">
<keybind key="W-m">        
  <action name="UnmaximizeFull"/>
  <action name="MoveResizeTo">

And here's the default section on moving to desktops

<!-- Keybindings for desktop switching -->
<keybind key="C-A-Left">
  <action name="GoToDesktop">
<keybind key="C-A-Right">
  <action name="GoToDesktop">
<keybind key="C-A-Up">
  <action name="GoToDesktop">
<keybind key="C-A-Down">
  <action name="GoToDesktop">
<keybind key="S-A-Left">
  <action name="SendToDesktop">
<keybind key="S-A-Right">
  <action name="SendToDesktop">
<keybind key="S-A-Up">
  <action name="SendToDesktop">
<keybind key="S-A-Down">
  <action name="SendToDesktop">

Security Apps and Tools

Installing GNU Privacy Assistant

sudo apt install gpa installs a GUI called "GNU Privacy Assistant"

Read more about it here

Installing KeePassXC Via Ubuntu's new Snap

Pretty sure it's just:

sudo snap install keepassxc


Installing Ricochet 1.1.4 on Lubuntu 16.04

When I first installed Ricochet IM on my machine running Lubuntu, I either ran sudo apt install ricochet-im, or downloaded it through Ubuntu's GUI "Software" application. Regardless of which I chose, I think both methods install Ricochet version 1.1.2, as opposed the to latest release: 1.1.4. Considering this is a secure instant messaging app and new versions may contain important security fixes, I wanted to be using the latest version available (which I'm actually thanked in, due to some extremely minor documentation fixes).

So I went over to, found the releases page and downloaded the latest release for Linux, which is currently 1.1.4. I'm running Linux on a 64-bit machine (an old Macbook Pro), so I went with ricochet-1.1.4-linux-x86_64.tar.bz2. I downloaded this compressed file to my Downloads/ directory.

Verifying the downloaded tar file

To verify the contents of the downloaded tar file, I also downloaded the .asc signature file associated with the release I downloaded from to the releases page. I then went to the website and downloaded John Brooks' public gpg key.

Then in terminal I navigated to my ~/Downloads directory (cd ~/Downloads) and ran gpg2 --import john-brooks.asc. gpg2 informed me that 1 key was successfully imported-- woohoo. To double check that this was actually John Brooks' public key that he signs Ricochet releases with, I ran gpg2 --fingerprint to list the fingerprints of the ekys on my key ring. I saw the fingerprint for the Brooks key was 9032 CAE4 CBFA 933A 5A21 45D5 FF97 C53F 183C 045D, which is exactly the same fingerprint listed in the Ricochet Github README.

Next I needed to actually verify the tar file, so I ran gpg2 --verify ricochet-1.1.4-linux-x86_64.tar.bz2.asc. gpg2 correctly assumed that the signed data was in ricochet-1.1.4-linux-x86_64.tar.bz2 and gave me the message:

gpg: Good signature from "John Brooks <>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 9032 CAE4 CBFA 933A 5A21  45D5 FF97 C53F 183C 045D

Again, the fingerprint listed on the last line of the output above matches the one listed on the Ricochet Github README.

My understanding is that this "Good signature" message means I got a good tar file from the website. The "WARNING" that it's not a trusted signature just means that I didn't manually mark John Brooks' public key as "ultimately trusted" before running the verify command.

For more about this and the process of verifying signatures generally, checkout this page in the Qubes OS documentation and/or KeePassXC's page on the subject.

Extraction... and Installing?

After I found a good signature, I double-clicked the .tar.bz2 file to uncompress/extract it (though I understand that I could have been a badass and also done this in the terminal).

I then got a new directory called ricochet that had subdirectories like config and QtQuick, a README file, a file called tor I was scared to click, and a file called ricochet that when I clicked I got asked what application I wanted to use to open it. I couldn't figure out how to run the actual Ricochet application-- the README didn't help me much.

So first I Googled (actually Duck Duck Go) something like "ubuntu how to install from tar file" and landed on this askubuntu answer, which talks about opening a file called INSTALL that I didn't have, and/or running ./configure, which was returning an error for me.

Eventually, I figured out that I could just run ./ricochet from my ricochet directory and the real application-- version 1.1.4-- opened right up. Cool. But it would be kind of shitty if I had to first open Terminal, then run a command to launch Ricochet. Ideally I'd have a Ricochet icon in my Lubuntu start menu.

Creating an icon in the Lubuntu start menu

After some more searching I found a subheading on an Ubuntu/Lubuntu help page called "How to make/add an application to the "start" menu." that described how to make a .desktop file.

The help page states: "Making a .desktop file in ~/.local/share/applications will show the item in the LXDE start menu."

First I moved my ricochet directory into ~/Desktop/my_programs, a directory I made for programs I've downloaded through the browser and am not sure where else to put (I know isn't ideal but I figure it's better than ~/Downloads-- hit me on Twitter if you know a better way). Next I confirmed that the new absolute command for launching Ricochet the application was ~/Desktop/my_programs/ricochet/ricochet, which indeed worked.

Next, as described in the help page, I created a Ricochet.desktop text file from scratch in ~/.local/share/applications using a desktop file for another program that was also in that directory as a loose template (the other program is Cryptocat, just another program I had previously downloaded that had its .desktop file in ~/.local/share/applications).

Here's the Ricochet.desktop file I typed out in its entirety:

[Desktop Entry]

And be sure to substitute where it says "$USER" with your username. If you're not sure what your username, navigate to the ricochet directory in your terminal and run pwd.

As you can see, the .desktop format also allows you to specify an icon image, so I went over to the Ricochet IM Github repo and downloaded a PNG logo and put it in my ricochet directory.

I think I had to restart the machine in order to see the icon appear in the start menu. After restart it was there in "Internet" next to Cryptocat and some other applications.

Things I haven't figure out

So running ricochet from anywhere other than my ricochet directory does not launch the application. I could likely solve this pretty easily with an ln command or a line in my bashrc, but I've never need to launch a non-text editor from the command line before.

I'm also not 100% how I'll go about upgrading to a new version of Ricochet, but the README says "To upgrade, extract the new version to the same location." I assume I'll be able to download a new tar file, extract it, and switch it out from old directory. I'll likely keep the config directory, as that has my username, contact list, and (I think) my private key (the README notes: "Once you run Ricochet, configuration will be stored in a 'config' directory inside this folder".).

I also might not even have to edit the .desktop file (assuming I put the executable and the PNG icon in the same place).

Is it supposed to be this difficult? I'm not even building from source

To be honest, I'm too new to Linux/Ubuntu/Lubuntu to know. It does seem strange that there isn't at least a copy of the Ricochet icon included in the tar that I downloaded. And I could also imagine there being a script that creates and places the Ricochet.desktop file for you. In fact there is a ricochet.desktop file in the source of the project, but I couldn't find it in the 1.1.4 tar.

Of course I could have missed some step in the installation that does exactly these things and maybe more. And I should say that this tar I downloaded is meant to serve the needs of many Linux distributions, whose configurations processes may be very different than the ones I took.

Of course this pre-built distribution does take care of a lot of things that could be big headaches, most notable the Tor configuration, which just works. As the README notes: "You do not need to manually run or configure tor. An unmodified tor binary is included with this package, and Ricochet will run it automatically, similiar [sic] to Tor Browser." which is obviously awesome.

At the end of the day I've got version 1.1.4 working and an icon for it in my start menu. I'm not sure how similar the process is on Ubuntu 16.04.

Plus I learned a bit about Linux and Lubuntu. And yes, I did submitted a fresh pull request to fix that pesky little typo in the README which has since been merged.

Installing Pip and Magic Wormhole on Lubuntu 16.04


Python 2 and Python 3 come with Ubuntu/Lubuntu. python calls v 2.7.12 and python3 calls 3.5.2.

Installing pip

I think you can install regular pip by running: sudo apt install python-pip and then upgrading it with pip install --upgrade pip. I'm not sure whether, after doing this, pip is tied to python 2 or 3. My guess is v 2, which is fine.

Installing Magic Wormhole

To install magic-wormhole, a CLI to "get things from one computer to another, safely", I needed to install some other stuff. They suggest installing all at once with apt-get install python-pip build-essential python-dev libffi-dev libssl-dev. I likely could have run that command without python-pip.

I was then able to install magic-wormhole with sudo pip install magic-wormhole.

Using a PGP private key from a Smartcard on Ubuntu

I think I need to :

  1. add the key's public half a. get the .asc file onto your system. b. run gpg2 --import <file-name>.asc
  2. Plug in the card
  3. try gpg2 --card-status If that doesn't work try installing scdaemon and pcscd with sudo apt install scdaemon and then sudo apt install pcscd. You may also need to sudo apt install gpgsm
  • you may also need to kill and restart scdaemon with:
killall scdaemon
pgrep scdaemon

You can now encrypt and decrypt files with the pgp keys on your martkey using the gpg2 command line tool.


To add GUI support on Xfce, while using Thunar file manager, it looks like I'm going to need to build some Thunar custom actions, which doesn't seem ideal. Xcfe doesn't use Nautilus by default, so I doubt installing seahorse-nautilus is going to do me any good.

Using Pidgin with a Google Account, and Setting Up OTR

Pidgin comes installed with Ubuntu 16.04. To add my existing Google Account, I followed the steps outlined in this Stack Overflow answer.

To summarize:

In Pidgin, add a new account. Set the Protocol to "Google Talk", username to your Google username, and the Domain to "".

For the password you'll need to create a dedicated app password. You can do that in your Google accounts Security > App Passwords section. When creating the new app password, set "app" to "other" and call it something like "linux pidgin"-- it doesn't matter what you call it. Optionally, if on a secure computer, tick the "Remember password" checkmark. (Warning: This will mean your new app password will be stored in plain text in ~/.purple/accounts.xml.) Leave "Resource" and "Local Alias" blank.

Installing and Enabling OTR

Once my Google account was successfully added, I installed the Pidgin-otr plugin by running sudo apt-get install pidgin-otr in terminal. To enable and setup OTR, I followed this EFF guide. That guide also describes how to install the otr plugin through the Ubuntu Software manager if you're more into GUIs (see the early steps of that EFF guide).

Further Pidgin Customizations

To display offline buddies, go to Buddies > Show > Offline Buddies. There are more preferences, like muting sounds, in Tools > Preferences.

Not sure how to disable the pop up notifications yet though.

Other DEs

Customizing Appearance of XFCE (Ubuntu)

Desktop Background

  1. Pick one (I found one I liked here).
  2. Download the image file to your Pictures folder.
  3. Go to Settings Manager > Desktop > Background. In bottom-right change Folder to Pictures and find your desired background.


I went with axiom, which I got here. To install it:

  1. I downloaded the tar file,
  2. In terminal I ran mkdir ~/.themes
  3. I then extracted two directories from the tar file called "axiom" and "axiomd", and then moved them both into the new ~/.themes directory.
  4. Go to Settings Manager > Appearance and choose either axiom or axiomd
  5. Then is Settings Manager > Window Manager > Style and select either axiom or axiomd


I went with "Papers" icons for now, which you can find download instructions for on the offical website. After running those updates, I went to Settings Manager > Appearance > Icons and selected Paper.

Login Window

Go to Settings Manager > LightDM GTK + Greeter Settings and select the theme and icon set you like. You can also change your user image or remove it all together. Unfortunately, for me, axiom was not available here, so I went with Adwaita for now.

Note: This video helped me quite a bit:


I'm going with Noto Sans for now (the actual choice says "Noto Sans CJK JP"). I selected this font in Settings Manager > Appearance > Fonts. I also selected basically every where else I encountered a choice of font in Settings.


Odds are you Panel 1 is on top of your screen, and panel 2 is the dock-like panel that I think starts at the bottom of your screen.

For customizing Panel 1, I followed some of the instructions in the first minute of this video. I set the mode to Vertical, which puts in on the left, increased transparency, and made it 48 pixels wide, and had it never hide. Then, in Items > Applications Menu I deselected "show button title" and changed the image. In Items > Window Buttons I deselected "Show button labels", selected "Show flat buttons", deselected "Show handle", and set Window grouping to always.

I'm not sure what I want out of panel 2 (the dock) yet, so I set it to be pretty small and have it hide intelligently.

Notes on i3

Good 3-video playlist that shows i3 window manager from the start:

Install i3 on Ubuntu

  1. Log in
  2. Open Terminal
  3. sudo apt-get install i3; enter passowrd
  4. log out
  5. in menu, choose i3 to be your desktop environment
  6. Press enter to generate a config file
  7. Select mod key (think we want the "windows" key)

Basic, Default Keybindings

  • open a new instance of terminal (hope it's GNOME...): mod + Enter

  • Close window: mod + shift + q

  • app launcher: mod + d

    • change it to synapse by adding this line to the i3 cofig: bindsym $mod+d exec synapse
  • new vertical window: just open a new window

  • new horizontal window: mod + v, then open a new window

    • one question is how I get out of this mode
  • move between windows in current workspace: mod + arrow keys (or mouse)

  • move or swap a window within the current workspace: mod + shift + arrow keys

  • log out with mod + shift + e

  • lock out: enter in terminal i3lock

  • refresh your i3 config: mod + shift + r


"There is no maximize key in i3. What you want to do is move it to a different workspace."

  • move current window to a different workspace: mod + shift + number

Resizing Windows

First, enter resize mode with mod + r. Red box appears. Escape to exit resize mode.

Now can use the arrow keys to resize the current window.

Stacking and Tab mode (as opposed to tiling mode)

  • enter stacking mode with mod + s
  • navigate the stack with mod + arrows
  • return to tiling mode with mod + e

mod + w enters "tab" mode

Customization Basics


  1. How do I open a file manager window?
  • just launch dmenu or synapse and open documents or file manager
  1. How do I set it so KeePassXC as a floating window by default (at least initially?)

Trying Other Desktop Environments with Ubuntu (Besides Unity)


To install

  1. sudo apt-get install xfce4 xfce4-goodies
  2. Restart
  3. Login as "xfce session"

What You Get Straight out of the Box

  • "Whisker menu" is the Start-menu-like menu in the top left. Same as Lubuntu
  • A nice, MacOS-like dock on the bottom with GNOME Terminal, File Manager, Web Browser (default), and a search


There's a nice Settings menu in Whisker menu > Settings > Settings Manager

  • In Window Manager > Keyboard, I set up a bucnh of window resizing keyboard shorts!
  • In Session and Startup > Application Autostart, I entered a custom command to remap caps lock to control. Name: remap caps Description: remap caps lock to control Command: /usr/bin/setxkbmap -option "ctrl:nocaps"
  • In Mouse and Touchpad > Devices > Touchpad, I enabled "Disable touchpag while typing" and I disabled "Tap touchpad to click"

Memory Usage

With Firefox, Terminal, and Settings open, I've got about 980 MB out of 2GB RAM "available". (This is compared to abut 1180 MB available when using Lubuntu-- it makes sense that Xubuntu slightly heavier than Lubuntu.)


  • Nice desktop
    • has a dock by default (edit settings by right-clicking between icons)
    • Window Switcher is nice.
    • Toolbar on top is nice out of the box.
  • Available on many distros! Only have to learn the tweaks and settings once!


  • Cursor is solid white (not smart) in Neovim 0.2, and then when I quit Neovim it's solid white (not smart) in the terminal as well. Not sure how to get at it... I tried creating ~/.config/xfce4/terminal/terminalrc and setting a hard-coded cursor color there but I couldn't get it to make any effect (even after a computer restart).
  • A helpful Mastodon user pointed me to his XFCE terminal config:


To install from Ubuntu

  1. sudo apt-get install kubuntu-desktop?
  2. When you get the chance to choose between "lightdm" and "sddm", I think you want "sddm".



seems more difficult:

What if this all goes to shit

Here's a very old "How to get back to pure Ubuntu post"?