Bloat-free Unity in Ubuntu 18.04

Ever since version 17.10, Ubuntu switched from the Unity desktop, which had been their official DE for several years, to GNOME 3. I personally do not like GNOME 3, as it feels “bloated” (animations always seem “heavy”, if you know what I mean), and I had also grown quite accustomed to Unity and its keyboard shortcuts, going as far as to say that, gasp, I actually quite like and prefer Unity. I like the system to stay out of the way when I am working, and my workflow benefits from having a familiar DE environment for me to work in. Therefore, I wish to continue using Unity as my DE for as long as possible.

In addition, I think it is fair to say (without disrespecting those with the actual clinical condition) that I am what some people would call “OCD”. Not only do I prefer running Linux on my machines so as to avoid Windows’ overhead, I also like having a fully-functional install that is as lean and bloat-free as possible. Sadly, the standard Unity install pulls a lot of packages that I don’t consider necessary, including apps I never use (Thunderbird?), apps that I would replace anyways (Firefox), and other packages I simply don’t want to have (such as the Facebook/Picasa/Flickr lenses in the Dash). Therefore, and after having grown accustomed to Arch’s way of only installing what is strictly necessary, I decided to try to install Unity while avoiding as much bloat as possible. Below you will find the steps I followed to achieve that. These are all the steps I needed for my laptop, a Lenovo Thinkpad X1 Carbon 6th gen. It might be that because of your hardware requirements, you might have to install some additional packages. But hopefully this can serve as a template that you can work from.

Procedure

First off, we begin with a minimal Ubuntu ISO. Although this image is made by Canonical, they don’t seem to advertise it much on the Ubuntu website… thankfully, it can be downloaded directly from the Ubuntu Help site. Here is the link.

After putting this image on a USB stick with the help of Balena Etcher, we can now boot the computer with it. Since this is a tiny image, it does not have any sort of Live mode, so our only option is to go through with the install. At one point in the install you will be asked if you want to install any additional packages, make sure you don’t choose any, or the whole point of this exercise would be lost :)

After rebooting into the freshly installed system, you should now be able to log into a command line. That excitement you feel must be the same excitement Leonardo Da Vinci felt upon seeing a fresh canvas waiting to be painted on! (ok, maybe not)

The next step is of course to update our repository information:

sudo apt update

Now, its time to install the base system. These are the packages I have found make up a full install without much bloat. Some additional packages will be pulled in as recommended packages, which we will uninstall at a later time. You could also not install these recommended ones with apt’s --no-install-recommends flag, but when I tried that I noticed some other things were missing, such as system sounds and nicer looking system icons, so I find it easier to do it this way.

sudo apt install alsa-base alsa-utils anacron at-spi2-core bc ca-certificates dmz-cursor-theme doc-base fonts-dejavu-core fonts-freefont-ttf foomatic-db-compressed-ppds genisoimage ghostscript-x gnome-menus gnome-session-canberra gstreamer1.0-alsa gstreamer1.0-packagekit gstreamer1.0-plugins-base-apps gstreamer1.0-pulseaudio gvfs-bin inputattach language-selector-gnome libatk-adaptor libnotify-bin libsasl2-modules lightdm nautilus notify-osd openprinting-ppds printer-driver-pnm2ppa pulseaudio rfkill software-properties-gtk ubuntu-artwork ubuntu-drivers-common ubuntu-release-upgrader-gtk ubuntu-settings ubuntu-sounds unzip update-manager update-notifier wireless-tools wpasupplicant xdg-user-dirs xdg-user-dirs-gtk xkb-data xorg zenity zip acpi-support activity-log-manager apport-gtk avahi-autoipd avahi-daemon baobab bluez bluez-cups branding-ubuntu cups cups-bsd cups-client cups-filters eog evince file-roller fonts-liberation fonts-noto-cjk fwupd gedit gnome-bluetooth gnome-calculator gnome-disk-utility gnome-font-viewer gnome-keyring gnome-logs gnome-power-manager gnome-screensaver gnome-screenshot gnome-system-log gnome-system-monitor gnupg-agent gsettings-ubuntu-schemas gvfs-fuse hplip ibus ibus-gtk ibus-gtk3 ibus-table im-config kerneloops-daemon laptop-detect libnss-mdns libpam-gnome-keyring libproxy1-plugin-gsettings libproxy1-plugin-networkmanager libqt4-sql-sqlite libwmf0.2-7-gtk mousetweaks nautilus-sendto nautilus-share network-manager-gnome network-manager-pptp-gnome overlay-scrollbar-gtk2 packagekit pcmciautils plymouth-theme-ubuntu-logo policykit-desktop-privileges printer-driver-brlaser printer-driver-c2esp printer-driver-foo2zjs printer-driver-min12xxw printer-driver-ptouch printer-driver-pxljr printer-driver-sag-gdi printer-driver-splix pulseaudio-module-bluetooth qt-at-spi seahorse snapd sni-qt system-config-printer transmission-gtk ttf-ancient-fonts-symbola ttf-ubuntu-font-family xcursor-themes xdg-utils zeitgeist-core zeitgeist-datahub unity-control-center unity-greeter unity-settings-daemon gtk3-nocsd session-migration hud session-shortcuts unity-lens-applications unity-lens-files bamfdaemon compiz compiz-core compiz-core-abiversion-20180221 compiz-plugins-default dconf-cli gsettings-ubuntu-schemas libappstream-glib8 libatk-bridge2.0-0 libatk1.0-0 libbamf3-2 libcairo2 libcompizconfig0 libdbusmenu-glib4 libdee-1.0-4 libgdk-pixbuf2.0-0 libglib2.0-0 libglib2.0-bin libgnome-desktop-3-17 libgtk-3-0 libindicator3-7 libjson-glib-1.0-0 libnotify4 libnux-4.0-0 libnux-abiversion-20140307.0 libpam0g libpango-1.0-0 libpangocairo-1.0-0 libsigc++-2.0-0v5 libstdc++6 libunity-core-6.0-9 libunity-misc4 libunity-protocol-private0 libx11-6 libxext6 libxfixes3 libxi6 libxrender1 libzeitgeist-2.0-0 nux-tools python3 python3-gi session-migration unity-asset-pool unity-scope-home wget software-properties-common apt-transport-https curl virtualenv build-essential bluetooth blueman bluez-hcidump bluez-tools

Afterwards, install the actuall unity and unity-session packages, but using the --no-install-recommends flag so they don’t pull in more bloat:

sudo apt install unity unity-session --no-install-recommends

Now we can uninstall some of the packages that got pulled in as recommendations. These are the packages I find unnecessary, review the list to make sure there aren’t things here you actually need!

sudo apt purge \
gnome-calendar \
whoopsie \
yelp \
unity-lens-music \
unity-lens-photos \
unity-lens-video \
unity-scope-video-remote \
gnome-terminal \
totem

Regarding the last two packages, I remove them because I prefer Tilix and SMPlayer for my terminal and video player respectively. These get installed later.

The next step is optional, these are laptop-specific packages that I need for my Thinkpad X1:

sudo apt install xserver-xorg-input-synaptics tlp tlp-rdw acpi-call-dkms tp-smapi-dkms acpi-call-dkms

Finally, a terminal, video player, and some codecs:

sudo apt install tilix vim unity-tweak-tool smplayer libdvdnav4 libdvdread4 gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly libdvd-pkg ubuntu-restricted-extras

sudo dpkg-reconfigure libdvd-pkg

Great! The system setup is now complete. To top it off, lets clean that cache and reboot into the fresh system:

sudo apt autoremove
sudo apt clean
sudo reboot

If everything went as expected, you should be able to boot into the Unity desktop now. Congratulations!

At this point, you should have a fairly barebones but fully functional Ubuntu install. The steps from this point on are optional and how I further customize my machine.

There is no browser on the system, and I personally like Chrome:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb

There are some other packages I use on a regular basis which I would like to install, some of them need new repos added to the system:

# Balena Etcher
echo "deb https://deb.etcher.io stable etcher" | sudo tee /etc/apt/sources.list.d/balena-etcher.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 379CE192D401AB61

# Spotify
echo "deb http://repository.spotify.com stable non-free" | sudo tee /etc/apt/sources.list.d/spotify.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 931FF8E79F0876134EDDBDCCA87FF9DF48BF1C90

# Remmina Remote Desktop client
sudo add-apt-repository ppa:remmina-ppa-team/remmina-next

# Visual Studio Code
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"

# Numix Icon pack
sudo add-apt-repository ppa:numix/ppa

# GRUB Customizer
sudo add-apt-repository ppa:danielrichter2007/grub-customizer

And now to install the last few packages:

sudo apt install git network-manager-openconnect network-manager-openconnect-gnome numix-icon-theme-circle arc-theme remmina remmina-plugin-rdp remmina-plugin-secret pwsh code grub-customizer balena-etcher-electron gimp gparted grsync calibre spotify-client 

That should be the last of the packages. After a quick

sudo apt autoremove
sudo apt clean
it is now time to spend countless hours customizing every little aspect of the desktop to my liking. This however, will not be covered in this tutorial…

Here are a couple screenshots of the finished product:

Desktop Desktop

Terminal and file browser Terminal and file browser

Dash Dash

Are there some packages in my list you find are not necessary? Some other tricks for bloat removal you like? Let me know in the comments below!

comments powered by Disqus