Making Ubuntu 12.04 Not Suck

Posted on July 20, 2013
Tags: software

Up until very recently, I had an odd setup at home. I had a 2002-era, Pentium 4-based Dell Optiplex GX 240 running Ubuntu 8.04 connected to my 21" CRT monitor. This basically served as my X server, and I sshed into my other desktop machine to run any programs. It’s a dual-core, 64-bit Acer Aspire, which was headlessly running Ubuntu 12.04.

Unfortunately, on return from my recent vacation, during which my machines were powered down for longer than they have been in a long while, my Optiplex was dead. Turning it on resulted in nothing but a blinking yellow power light. Online forums indicated this means a problem with the power supply and/or motherboard. In a machine that old, it’s not worth fixing, especially since it’s a non-standard form factor that doesn’t take standard parts. Goodbye, Optiplex, you have served me well!

The solution seemed simple. Just connect the monitor, keyboard, and mouse to the Acer! But then 12.04 reared its ugly head. I was not amused with the default Unity desktop. Besides just being different and unfamiliar, it has actual usability issues, such as taking more than one click to switch to a different virtual desktop.

This was not too hard to fix. Installing “Gnome Fallback” gave me (almost) my familiar GNOME desktop back again. It still looked all wrong, though. Switching the theme from “Ambiance” to “Radiance” at least lightened it up a bit.

But the biggest issue is the <expletive deleted> disappearing scrollbars. Just because Apple does it does not mean it’s a good idea, folks! Why would anyone want to not see their scrollbars? Ugh! It looks like there’s no way to fix this in stock Ubuntu, but I downloaded a program called Ubuntu Tweak which let me fix it. (But, why must I download Ubuntu Tweak as a .deb, rather than just being able to “apt-get install” it like any other self-respecting software?) Under Tweaks > Miscellaneous, I set “Overlay scrollbars” to OFF. I also set “Cursor blink” to OFF, since I believe blinking cursors are one of the evils of the modern world. (I’ve had to fix the blinking cursor in every version of Ubuntu, although the way to fix it has changed with each version.)

Great, now the scrollbars look like scrollbars should, with a trough and a thumb. The only problem is that the trough and thumb are both gray. Almost exactly the same shade of gray. Making it rather difficult to tell where I am in a document, which was the whole point of bringing back the scrollbars in the first place.

So, off to search the Internet. I found this page where a bunch of users agreed that gray-on-gray scrollbars are user-hostile. Their solution was to edit the theme files manually. And, since some programs use gtk-2 and some use gtk-3, there are two different theme files that have to be edited. This seems unnecessarily user-hostile, but it worked! So, my gtk-2 apps now have scrollbars with a gray trough and a red thumb, and my gtk-3 apps have scrollbars with a blue trough and a gray thumb.

The next thing I need: focus follows mouse. So, this page suggests using gnome-tweak-tool.

sudo apt-get install gnome-tweak-tool

This installs a bunch of interesting-sounding libraries, like “libcaribou” and “telepathylogger.” (The latter sounds like an essential part of any extrasensory security plan.) Okay, done! Let’s run it.

Like all Gtk+ applications, gnome-tweak-tool spews a ton of scary-sounding (but apparently completely ignorable) messages to the terminal:

WARNING : Shell not running
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gtweak/tweaks/tweak_shell.py", line 58, in __init__
    self._shell = GnomeShellFactory().get_shell()
  File "/usr/lib/python2.7/dist-packages/gtweak/utils.py", line 38, in getinstance
    instances[cls] = cls()
  File "/usr/lib/python2.7/dist-packages/gtweak/gshellwrapper.py", line 143, in __init__
    proxy = _ShellProxy()
  File "/usr/lib/python2.7/dist-packages/gtweak/gshellwrapper.py", line 44, in __init__
    result, output = self.proxy.Eval('(s)', js)
  File "/usr/lib/python2.7/dist-packages/gi/overrides/Gio.py", line 148, in __call__
    kwargs.get('flags', 0), kwargs.get('timeout', -1), None)
  File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function
    return info.invoke(*args, **kwargs)
GError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.Shell was not provided by any .service files
WARNING : Could not list shell extensions
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gtweak/tweaks/tweak_shell.py", line 63, in __init__
    extensions = self._shell.list_extensions()
AttributeError: ShellThemeTweak instance has no attribute '_shell'
WARNING : Error detecting shell
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gtweak/tweaks/tweak_shell_extensions.py", line 149, in __init__
    shell = GnomeShellFactory().get_shell()
  File "/usr/lib/python2.7/dist-packages/gtweak/utils.py", line 38, in getinstance
    instances[cls] = cls()
  File "/usr/lib/python2.7/dist-packages/gtweak/gshellwrapper.py", line 143, in __init__
    proxy = _ShellProxy()
  File "/usr/lib/python2.7/dist-packages/gtweak/gshellwrapper.py", line 44, in __init__
    result, output = self.proxy.Eval('(s)', js)
  File "/usr/lib/python2.7/dist-packages/gi/overrides/Gio.py", line 148, in __call__
    kwargs.get('flags', 0), kwargs.get('timeout', -1), None)
  File "/usr/lib/python2.7/dist-packages/gi/types.py", line 43, in function
    return info.invoke(*args, **kwargs)
GError: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.Shell was not provided by any .service files

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-CRITICAL **: gtk_widget_get_preferred_height_for_width: assertion `width >= 0' failed

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

(gnome-tweak-tool:10131): Gtk-WARNING **: gtk_widget_size_allocate(): attempt to allocate widget with width -1 and height 25

Under “Windows”, I set “Window focus mode” to “Mouse.” But ugh! Now, it raises the window that has the focus! Part of the beauty of focus-follows-mouse is that you can type into a partially-obscured window. You guys are really making this difficult, aren’t you?

So, now I try the other method mentioned on the page I found: using gconf-editor. Holy crap! A Gtk+ application that doesn’t spew a single error message to the terminal! What’s with that?

But yes, finally, I can uncheck “auto_raise” under apps > metacity > general!

The one remaining problem: the only indication of focus appears to be that the “x” close button is red. Seems to follow the default scrollbar theme’s lead of “let’s make important information as visually nonobvious as possible.” I want the titlebar of the focused window to be in a radically different color!

Back to gnome-tweak-tool, since even though it generally seems to suck compared to gconf-editor, it has the advantage of giving you a drop-down list of window manager themes, while gconf-editor seems to expect you to know window manager theme names off the top of your head, and type them into a text box. I ended up choosing the theme “Human,” perhaps so named because it was meant to be usable by humans, while the other themes do not seem to be. (All the other themes I tried either don’t differentiate which window has the focus, or else they are incredibly ugly.)

Yay, now I can see which window has the focus without my glasses on. John Hancock would be proud!

A couple of other things I discovered: