There's an excellent chance that your problem was caused by the upgrade from 14.04 to 16.04. An operating system is a complex beast, with thousands of components, and Ubuntu runs on a staggering variety of hardware configurations; it's impossible for the writers of the upgrade script to test the script against all the variations of hardware and software found in the field before releasing it. The upgrade script seems simple and convenient, but it causes lots of problems, and unfortunately many people don't seem to know how dangerous it can be. (Don't feel bad, I learned the hard way too.)
I'm sure that you'd prefer a targeted fix that neatly solves your problem, but if the root of the problem is a flawed OS installation, then you might be forced to use a blunter instrument: wiping the hard drive, and installing 16.04 from scratch (after backing up all your important files, of course).
Here's the outline of how to do it:
- In a terminal, do
aptitude search '~i!~M' > ~/top-level-packages-before.txt
. (You'll need the aptitude
package, if it isn't installed.) This creates a file containing a list of all the installed packages, not including dependencies. (Kudos to this answer.)
- If you don't have
/home
in its own partition, back up the entire /home
hierarchy. Also back up /etc/X11/xorg.conf
, if it exists, and /var/www
if you use your computer as a web server. Back up /usr/local/bin
, if you have local scripts in there.
- If you dual-boot another OS, then boot to an Ubuntu install DVD or USB stick, choose "Try Ubuntu", run GParted, and use it to delete the Ubuntu partitions (except the partition that mounts
/home
, if /home
has its own partition). If you're not dual-booting then skip this step, because the Ubuntu installer needs to see how the computer boots.
- Install Ubuntu. Use the installer to wipe out any partitions from the old Ubuntu installation that weren't wiped already, except the partition that mounts
/home
, if /home
has its own partition.
- Copy your important files from the backup to the new installation. Unfortunately lots of programs pollute your home folder
/home/<username>
with junk (type Ctrl+H in Nautilus to see the hidden files and folders; that's where most of the junk is), and copying old config files blindly can cause problems, so you should probably just copy what you need, rather than restoring every last file.
- Install
aptitude
if it isn't installed, and do aptitude search '~i!~M' > ~/top-level-packages-after.txt
. Restore ~/top-level-packages-before.txt
that you created in the first step, if you haven't already. Do diff ~/top-level-packages-before.txt ~/top-level-packages-after.txt
to compare the two files, or use diffuse
(kudos to this answer) to discover which packages were installed previously that aren't now. Consider installing those packages.
By the way, many people choose to have /home
mounted in its own partition, because it makes installing a new version of the OS from scratch easier. (The popularity of this approach with experienced users shows that many people have come to distrust the upgrade script.) If you're taking my advice and installing the new version of Ubuntu from scratch, you might choose to give /home
its own partition while you're installing Ubuntu, just to make the process easier next time. If for some reason you want to move /home
to its own partition before installing Ubuntu from scratch, then there is a procedure to do so, but it's a lot of work, and in my opinion it's easier to move /home
to its own partition as part of the process of installing the new version of Ubuntu from scratch.
The gist of this answer is borrowed from this Ubuntu forums thread, which has more information. Good luck.