Why I use Linux

I have used Linux at home for quite a few years, and a couple of years ago I changed my work machine from Windows to Ubuntu Linux. It’s made life at work better for me.

Better for me

This move has made me much more productive, saving valuable time and money. Here is why:

Security updates happen automatically, without hitches, and rarely requiring reboots.

Since I changed, security updates are applied almost as soon as they are made available with no interaction from me. I have never seen a security upgrade that broke my system and prevented me working, whereas before I saw this several times.

My computer works faster.

My computer feels much faster to work with. In recent tests for our project, we found that the time spent waiting for a compile on my Linux machine was half that spent waiting on an identical system using Windows.

I work faster.

Because my system is more customisable than before, I can work the way that feels more comfortable to me. Support for keyboard shortcuts is more comprehensive in Linux, and I can work using the keyboard for most things, which helps prevent recurrence of RSI, from which I have suffered in the past.

I can automate repetitive tasks.

It’s much easier to write small scripts on Linux for things that I do every day. This means I spend more time thinking about the work I have to do, instead of all the button-clicking required to do it.

I can have more programs open.

My computer now works comfortably simultaneously running 3 or 4 heavy corporate applications, at least 2 copies of Eclipse, Firefox with many tabs open, several Chrome windows, 3 text editor windows, a 1GB virtual machine and many other programs, without slowing down or crashing. When I used Windows I needed fewer programs open, but because Linux manages memory better and many of the programs are less memory-hungry, I can do more things at the same time.

I can use “virtual desktops”.

It’s hard to explain why until you’ve tried it, but virtual desktops are an incredibly addictive feature. I avoid neck strain by using a single monitor directly in front of me*, but I am able to have lots of separate work spaces and can switch very quickly between them. I use one desktop for email and instant messaging, another for the Internet, and several more for programming in different environments. Switching between them happens as fast as I can press the relevant keyboard shortcut. This is a killer feature of modern Linux desktops in my opinion.

[*Multiple-monitor setups are well-supported too, of course.]

Modern tools work better.

Modern software – especially programming software – is frequently developed on Linux, and has its “home” there, meaning it is easier to install and update than on other platforms. Examples include: Python, Node.js, Perl, Vim, Emacs, Bash and Ruby, all of which are much easier to use and install on Linux than on Windows.

Better for my company

Because I use Linux, my company saves time and money.

  • Administering machines is easier. I get Ubuntu and corporate security updates automatically through the built-in security update mechanisms. The corporate updates are maintained by volunteers at my work in their spare time.
  • It’s cheaper. There is no license fee to use Ubuntu, and no added-value version to buy. Support can be paid for from several companies, including the company behind Ubuntu, Canonical.
  • I am more productive. As explained above, I am able to do more work in the same time because I use Linux.

Disabling screensaver on LXDE

Caffeine wasn’t working for me. I got an error like this:

dbus.exceptions.DBusException: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.ScreenSaver was not provided by any .service files

Bug 1280449 contained the solution for me. Thank you Paulius Vitkus:

sudo apt-add-repository ppa:behda/ppa
sudo apt-get remove caffeine
sudo apt-get update && sudo apt-get install caffeine

Showing urgent (flashing) windows on all desktop in LXDE’s taskbar (window list) in Lubuntu

As it stands, lxpanel’s taskbar plugin (part of the LXDE desktop you get with Lubuntu) does not show urgent (flashing) windows if they are on a different virtual desktop from the one you are looking at.

This seems wrong to me (I logged Bug 682), and the fix is a little one-liner:

--- lxpanel.orig/src/plugins/taskbar.c  2013-08-27 23:57:55.000000000 +0100
+++ lxpanel/src/plugins/taskbar.c       2014-09-26 00:48:25.026855589 +0100
@@ -202,10 +202,10 @@
     tk->flash_timeout = g_timeout_add(interval, (GSourceFunc) flash_window_timeout, tk);
 }
 
-/* Determine if a task is visible considering only its desktop placement. */
+/* Determine if a task is visible considering only its desktop placement and urgency. */
 static gboolean task_is_visible_on_current_desktop(TaskbarPlugin * tb, Task * tk)
 {
-    return ((tk->desktop == ALL_WORKSPACES) || (tk->desktop == tb->current_desktop) || (tb->show_all_desks));
+    return ((tk->desktop == ALL_WORKSPACES) || (tk->desktop == tb->current_desktop) || (tb->show_all_desks) || tk->urgency);
 }
 
 /* Recompute the visible task for a class when the class membership changes.

To install this patch into Lubuntu, do something like this:

sudo apt-get install build-essential fakeroot dpkg-dev
sudo apt-get build-dep lxpanel
mkdir lxpanel
cd lxpanel
apt-get source lxpanel
cd lxpanel-*
wget https://sourceforge.net/p/lxde/bugs/682/attachment/show-urgent-windows-on-all-desktops.patch
patch -p1 < show-urgent-windows-on-all-desktops.patch
dpkg-buildpackage -rfakeroot -b
cd ..
sudo dpkg -i lxpanel_*.deb
killall lxpanel
lxpanel --profile Lubuntu

Launch an urgent window using Python and Xlib with the UrgencyHint flag

I am trying to fix a bug in lxpanel’s taskbar plugin, and needed to launch an urgent window. Here’s how I did it in a little python.

#!/usr/bin/python

# urgent.py -- launch an urgent window (Copyright messages are at the bottom)

# To use:
# sudo apt-get install python-xlib
# ./urgent.py

import sys
import Xlib
from Xlib import X, display, Xutil

d = display.Display()
s = d.screen()
w = s.root.create_window(
    50, 50, 300, 200, 2,
    s.root_depth,
    X.InputOutput,
    X.CopyFromParent,
    background_pixel = s.white_pixel,
)

w.set_wm_name( 'Urgent!' )
w.set_wm_hints( flags = Xutil.UrgencyHint )

w.map()

try:
    while 1:
        e = d.next_event()
except Xlib.error.ConnectionClosedError:
    pass


# This code is based on:
# examples/xrandr.py -- demonstrate the RandR extension
# from http://python-xlib.sourceforge.net/
#
#    Copyright (C) 2014 Andy Balaam
#    Copyright (C) 2009 David H. Bronke
#
#    This program is free software; you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation; either version 2 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

Desktop sharing not working in Lubuntu 14.04

On my recently-upgraded to 14.04 Lubuntu machine, desktop sharing didn’t work.

Here’s how I made it work:

Once (to allow some Windows clients to connect without encryption):

gsettings set org.gnome.Vino require-encryption false

Then every time I want to share my desktop:

/usr/lib/vino/vino-server

and leave that running while I’m sharing.