Fixed: I Couldn't Open A Terminal Window!
I just had quite a nice scare: I was installing some packages on Pop!_OS 18.10 (Ubuntu), and I unknowingly caused my trackpad to stop working and I couldn’t even open a Terminal window to see what was happening.
The Symptoms
I had been installing some packages with apt
. At one point, when I tried to take the next step, I tried to open a new window in Byobu Terminal. I pressed F2
and nothing happened. I tried again, and nothing happened. I couldn’t open a new window. I tried Alt+F2
and Ctrl+F2
, but neither of these key combinations did anything. I closed my Byobu Terminal session and tried to open a new one, but launching Byobu did nothing. No window opened.
Oops.
Next, I tried launching the regular Terminal application. Again, no window. Nothing. I tried XTerm. Nothing. I couldn’t open a Terminal session at all! How the hell was I going to even get information to help me diagnose the problem?
I tried logging out, then logging in again. I couldn’t open any Terminal windows and, worse, I couldn’t use my trackpad! My trackpad didn’t move my cursor at all. This would make figuring out the problem very difficult.
I tried restarting the computer. No change: I couldn’t open a Terminal window and I couldn’t use my trackpad.
Getting Information
I couldn’t see any output from trying to start a Terminal session, so I had no idea how to even guess at the symptoms, let alone the cause. How could I start a shell and see the result of trying to start one? And how do I get around my windowing environment without a trackpad?
Fortunately, I had a USB mouse nearby, so I plugged that in and it just worked. This meant that I could at least browse the web on this computer to figure out what else to do. I searched the web and tried using Alt+F2
to run an arbitrary command (in Gnrome 3), so I ran gnome-terminal
. This didn’t open a Terminal session and it showed me no output, so I didn’t learn anything about the problem.
A Trick
In desperation, I launched GVim, then tried using the :!
command to run a shell. This finally gave me a clue:
error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
Aha! apt
fooled me.
The Trouble With autoremove
I had been trying to install some printer-related packages, and in the process of uninstalling them (they didn’t do what I needed), apt
told me that it could autoremove
these packages:
libncursesw5
libtinfo5
Since I didn’t know any better, I executed apt autoremove
, which removed these packages, and my problems started there.
Thank You, etckeeper
Fortunately, etckeeper
made it relatively easy both to recover and to document what went wrong. I could see a commit from when I removed the printer-related packages that I’d installed, and then a second commit from executing apt autoremove
. This helped me connect the error message above with the packages that I’d removed. This gave me the idea that I could simply reinstall those packages and return everything to normal.
Opening A Shell… Any Shell
I couldn’t open my normal shell (zsh
) to fix the problem, but could I open any shell? I opened the Preferences for the Terminal application, then cloned my Pop! profile in order to change the shell command that the terminal runs to /bin/bash
. I set the new profile—I called it “Recovery”—as the default profile for the Terminal application, then launched it. Yes! I got a bash
shell. Now I could try my idea for fixing the problem.
Even Better!
After reading https://askubuntu.com/a/809058/839487 I saw that I could have started gnome-terminal
using bash
instead of my shell by pressing Alt+F2
then running the command gnome-terminal -x bash
. I hope I can remember this next time!
Fixing The Problem
I fixed the problem (some of it—keep reading) by reinstalling the packages that apt autoremove
had removed.
$ sudo apt-get install libncursesw5 libtinfo5
[Evidence of installing various packages...]
$ sudo apt list --upgradable
[Nothing. Good.]
$ zsh
[The zsh prompt.]
I could open a shell again. Maybe everything had returned to normal. Before I did anything else, I documented what I learned where I might one day stumble upon it again: in the git
log for /etc
.
Documenting The Problem
I amended the relevant etckeeper
commits, adding detail about what happened, as well as making it easier for the eye to notice that something interesting had happened. First, I decorated the one-line commit messages.
$ cd /etc
$ sudo git log --graph --all --oneline
* c2efaa2 (HEAD) [FIX] committing changes in /etc after apt run
* 8866206 [MISTAKE] committing changes in /etc after apt run
| * 4c984ec (offsite-backup/master, master) committing changes in /etc after apt run
| * 984c8eb committing changes in /etc after apt run
|/
* 2945f32 committing changes in /etc after apt run
* 81410e8 saving uncommitted changes in /etc prior to apt run
The last two commits contained the mistake (apt autoremove
and the fix apt-get install...
). I added simple text tags to make it easier to spot them. I also added some detail to the log messages.
$ sudo git log --all
commit c2efaa27381fa9a3afcb5426c44a7577a6cc01de (HEAD)
Author: J. B. Rainsberger <me@jbrains.ca>
Date: Thu Jan 17 10:33:36 2019 -0400
[FIX] committing changes in /etc after apt run
Reinstalling these packages fixes the previous action
`apt autoremove`.
Package changes:
+libncursesw5 6.1+20180210-4ubuntu1 amd64
+libtinfo5 6.1+20180210-4ubuntu1 amd64
commit 8866206fa2b6ff42a10d0d05e83da2eefaf44424
Author: J. B. Rainsberger <me@jbrains.ca>
Date: Thu Jan 17 10:16:53 2019 -0400
[MISTAKE] committing changes in /etc after apt run
`apt autoremove` removed these packages, but after I did that,
I could no longer open my shell (zsh), even though I could open
bash. Trying to launch zsh resulting in an error, unable to
find libtinfo.so.5.
I don't know why this happened, but reinstalling these two
packages seemed to fix the problem.
Package changes:
-libncursesw5 6.1+20180210-4ubuntu1 amd64
-libtinfo5 6.1+20180210-4ubuntu1 amd64
I had documented my adventures for myself and could safely breathe, then begin describing my adventures for you, in case you should ever get yourself into a similar situation.
Verifying The Fix
I could start my shell again, but my trackpad still didn’t work, so I got all this information out of my head, then I tried to see whether my trackpad would work again, first by logging out, then by rebooting in case logging it didn’t suffice.
Curiously, when I logged out, my trackpad started to work again, but when I logged in, it stopped working. Moreover, each time I tried this, the cursor jumped to the same spot near the bottom-right corner of my display. I didn’t know what that meant yet, but it made me think that I had some configuration setting somewhere that needed to change. I hoped that rebooting would fix the problem, so I rebooted.
Sadly, that didn’t fix the entire problem. Good news: I can start my shell and Byobu. Bad news: my trackpad only works when I’m logged out. This points pretty clearly to a user-level configuration problem, which I can probably diagnose (and maybe fix) by looking at the changes to /etc
or to my dotfiles
when I reinstalled these packages. Fortunately, in the meantime, a USB mouse works, so I don’t have to fix this problem right now, even though I’ll want to fix it very soon.
Post Script: Fixing the Touchpad
I guess Linux calls it a “touchpad” and not a “trackpad”. Old habits die hard.
I don’t know how it happened, but somehow, in the middle of removing and reinstalling packages, the “on/off” toggle for the touchpad in Gnome switched to “off”. That’s all. I switched it back “on” through the Mouse & Touchpad settings, and the touchpad just started working again. Yay.