Introductory Post

The machine

The laptop is a 14” Lenovo ThinkPad Edge, which I got in 2010. It has a i3 processor, 4 GB of RAM, and a 320 GB HDD (which is probably the weakest link in the current configuration). It’s definitely more powerful (and power-hungry) than a Raspberry Pi.

Day 1: Installation

I skipped all the cool distros and just stuck with boring, reliable Ubuntu 20.04 (LTS). I didn’t see much advantage to using even a lightweight Ubuntu variant, since I’ll be typically interacting through the terminal. The initial installation and upgrades went without a hitch. I installed vim, tmux, and openssh-server. This distro has ufw running by default, so after starting sshd I opened up port 22 to be able to ssh in:

sudo systemctl restart sshd.service
sudo ufw allow ssh

Next I configured the machine to continue running with its lid closed, making sure the following values were set in the file /etc/systemd/logind.conf:


The last thing I did on Day 1 was configure my router’s DHCP server to always assign the same IP address to this machine, based on its MAC address. I could configure it statically, since DHCP only uses a portion of the subnet, but I’ve gotten into the habit of setting up networking this way — it’s one less “gotcha” when you take a machine somewhere else (which probably won’t happen very often with this one).

Day 2: Ripping CDs

I realize now that this is the only working computer in the house with an optical drive. I have a few CDs that I haven’t ripped yet, so I decided to set up Exact Audio Copy (EAC), a Windows program that is reported to work well under Wine. It feels silly to run Wine for a program that itself uses Cygwin, but EAC rips are generally considered the best, and I don’t have access to Windows.

I followed these instructions to install Wine:

wget -nc
sudo mv winehq.key /usr/share/keyrings/winehq-archive.key
wget -nc
sudo mv winehq-focal.sources /etc/apt/sources.list.d/
sudo apt update
sudo apt install --install-recommends winehq-stable

This pulled in the i386 versions of many packages. I ran winecfg (as a regular user) but didn’t change any of the settings. I was invited to install additional packages (mono and gecko) by Wine, and I did. This creates a wine environment in the user’s home directory. I’d probably give more thought to where I wanted that to live if I was going to use it frequently, but that’s not my plan.

Next I downloaded the EAC installer

The installer takes you through setup. It will ask you to insert an audio CD so that it can test the drive, so be sure to have one handy.

Ripping and FLAC compression are both working. I won’t go into details for EAC configuration, but by default it deposits ripped files into a directory that’s a symlink to ~/Music, which is convenient.

Since EAC is a GUI application, I’d like to someday set it up to automatically launch and rip any CDs that are inserted without additional interaction, but that’s a low priority. For now, I’m happy to be able to listen to CDs without being in my car.

Day 3: Disabling the GUI

General FYI: these updates are listed on an ordinal scale. I’ve been going a few day between doing anything noteworthy, just using the machine for day-to-day stuff.

At this point, I’ve logged in enough times with my password that I have it committed to memory, so I added my SSH key to ~/.ssh/authorized_keys. I suppose a lot of folks would do this right away, and there are good reasons for doing so, but I try to memorize my passwords first (I use diceware passphrases, and yes, I actually roll dice).

I’m annoyed at how much RAM gdm is using given that I never actually launch a desktop (gnome-shell alone is using 4% of my memory, according to top). This command disables the desktop manager on startup:

sudo systemctl set-default

If I wanted to switch back, I would replace back to (worth noting if I give this laptop to somebody else). man 7 systemd.special does a fine job of explaining what’s going on; for instance, here I see that I would change the symlink of display-manager.service to something other than gdm.service if I want to quit using Gnome in favor of something more lightweight (which I might do). With the display manager disabled, the machine is much snappier (now the HDD is definitely the weakest link).

Day 4: Scanner

We own a “multi-function printer/scanner” (a Brother MFC-L2700DW, specifically). Decades after being promised a paper-free life, it still sees a good bit of use both as both a printer and a scanner (but never — not even once — as a fax machine). The good news is that laser toner lasts forever (and toner cartridges can be refilled), and office paper is compostable.

The machine features a “scan” button right on the unit, but it doesn’t work unless there’s a computer on the network configured to receive scans. I’m going to set up my old Thinkpad as the destination for these scans.

Scanner Driver

Here’s a direct link to Brother’s Linux drivers bundled as debs.

Since I don’t care about printing from this computer (for now), I only downloaded the “scanner driver” and “scan-key-tool” (selecting the 64-bit of each).

Install the scanner driver and make sure it can see your scanner (and find out your scanner’s IP if you don’t know it already):

$ sudo dpkg -i --force-all brscan4-0.4.11-1.amd64.deb 
$ brsaneconfig4 -q
  MFC-L2700DW  []  Brother_MFC-L2700DW_series 

Now “add” your scanner (replace office_printer with whatever you’d like, and use your scanner’s actual IP address):

$ sudo brsaneconfig4 -a name=office_printer model=MFC-2700DW ip=
$ brsaneconfig4 -q
* *MFC-2700DW  []  office_printer

Note: I don’t know what will happen if your scanner gets a different IP address via DHCP; it’s unclear if it will need to be reconfigured. I already set up DHCP address reservation for this printer because, otherwise, the Windows machines accumulate a huge list of identical printer entries with different IP addresses.

Scan key tool

Next install and configure the “scan key tool” (or is it “scan skey tool”?):

$ sudo dpkg -i --force-all brscan-skey-0.3.1-2.amd64.deb
$ brscan-skey 
$ brscan-skey -l

 office_printer    : brother4:net1;dev0  :         Active

The brscan-skey command immediately goes into the background and runs as the user who launched it. We need to open up a couple ports, too.

$ sudo ufw allow 54921/tcp  
Rules updated
Rules updated (v6)
$ sudo ufw allow 54925/udp
Rules updated
Rules updated (v6)

On the printer, press the “Scan” button. Use the down button to select “Scan to PC” and hit “OK”. In my experience, it doesn’t matter what type of document you select, you’ll get a tiff no matter whether you select “OCR”, “Image”, or “File” (I’ve never tried “E-mail”). Select something, and then press “Start” and your document will be scanned (either via the feeder if there’s paper in it, or the bed otherwise). Files are sent to a (potentially new) folder named brscan within the home directory of the user who launched brscan-skey.

Eventually, I should set up a proper “service” so that this is always launched on startup, create a “brscan” user with restricted permissions, and set up file sharing so that it’s easier to get the scans. But this is a fine start: at least the scan button actually works now.