Installing Dropbox in Gentoo running KDE

kfilebox
I had never used Dropbox before and had no intention of doing so, but today a work colleague sent me some large files via Dropbox so I was forced to sign up. I tried to install Dropbox on my main laptop running Gentoo Linux and KDE but, for a well-known application, I had a surprising amount of trouble, hence this blog post.

To begin with, I found the following Dropbox-related packages:

# eix dropbox
* gnome-extra/nautilus-dropbox
Available versions: (~)0.6.9 (~)0.7.0 0.7.1 (~)1.4.0 {debug}
Homepage: http://www.dropbox.com/
Description: Store, Sync and Share Files Online
.
* net-misc/dropbox
Available versions: 1.2.48-r1^ms (~)1.2.51-r2^ms (~)1.4.3-r1^ms (~)1.4.7-r1^ms (~)1.4.7-r2^ms (~)1.4.17^ms (~)1.4.23^ms (~)1.6.16^ms {X +librsync-bundled}
Homepage: http://dropbox.com/
Description: Dropbox daemon (pretends to be GUI-less)
.
* net-misc/dropbox-cli
Available versions: 1 1-r1 {PYTHON_TARGETS="python2_6 python2_7"}
Homepage: http://www.dropbox.com/
Description: Cli interface for dropbox daemon (python)
.
* xfce-extra/thunar-dropbox [1]
Available versions: [m](~)0.2.0
Homepage: http://www.softwarebakery.com/maato/thunar-dropbox.html
Description: Plugin for Thunar that adds context-menu items for Dropbox
.
[1] "sabayon" /var/lib/layman/sabayon
.
Found 4 matches.

But I don’t have GNOME or Xfce installed on my main laptop, so the first and last packages were of no interest. A quick search on the Web turned up Kfilebox, which seemed to be exactly what I needed. I was pleased to find that the package is in the main Portage tree:

# eix kfilebox
* kde-misc/kfilebox
Available versions: (4) (~)0.4.8 (~)0.4.9
{LINGUAS="ar br cs de el es fr gl it lt nl pl pt ru si tr zh zh_CN"}
Homepage: http://kdropbox.deuteros.es/
Description: KDE dropbox client

So I installed kfilebox, dropbox and dropbox-cli, thinking I would need them all. Then, before doing anything else, I surfed to the Dropbox Web site and signed up for an account.

I launched Konsole and entered the command kfilebox. A window popped-up telling me that the Dropbox Daemon was being downloaded, then another window popped up offering me two options/buttons: ‘Run gtk based installer’ and ‘Or simply link account’. I clicked on the latter, thinking that was all I needed to do as I had already signed up for an account via the Dropbox Web site. But a Dropbox icon did not appear in the Panel, nor did Dolphin show a Dropbox folder icon in my home directory, and the KDE Notifications widget kept popping up notification after notification from Kfilebox to “Please visit url to link to this machine”. The trouble was that clicking on the apparent link in the notifications did nothing.

The directories .dropbox and .dropbox-dist existed in my home directory, and the contents of /home/fitzcarraldo/.kde4/share/config/kfileboxrc were as follows:

[General]
AutoStart=true
Browser=rekonq
DropboxDir=/home/fitzcarraldo/.dropbox-dist/
FileManager=dolphin
GtkUiDisabled=true
IconSet=default
ShowNotifications=true
StartDaemon=true

As the rekonq Web browser is not installed on this laptop, I edited the file and changed Browser=rekonq to Browser=firefox then rebooted, but it made no difference.

So I uninstalled everything:

# emerge -C kfilebox dropbox dropbox-cli
# rm -rf /home/fitzcarraldo/.dropbox
# rm -rf /home/fitzcarraldo/.dropbox-dist
# rm /home/fitzcarraldo/.kde4/share/config/kfileboxrc

then rebooted and reinstalled only Kfilebox:

# emerge kfilebox

I then launched Konsole and entered the command kfilebox. The pop-up window appeared notifying me that the Dropbox Daemon was being downloaded, followed by the pop-up window offering me the choice of running the gtk-based installer or simply linking the account. This time I chose the option to run the gtk-based installer and just followed the intuitive instructions in the various pop-up windows that followed, one of which offered to create a new Dropbox account or to link to an existing Dropbox account. As I wanted to do the latter I entered my e-mail address and Dropbox password, a Dropbox icon then appeared on the Panel and a Dropbox folder icon is now visible in Dolphin.

I checked the contents of ~/.kde4/share/config/kfileboxrc and they were the same as listed above, so I edited the file to replace rekonq with firefox, although I’m not sure yet what (if anything) that does, as Dropbox is new to me and I’m still learning. Anyway, the important thing is that I could now click on the ‘View folder’ button in an e-mail sent to me by a colleague and the files uploaded by my colleague were automatically downloaded into the ~/Dropbox directory.

Switching the display quickly between a laptop monitor and an external monitor or projector in Linux

laptop_with_external_monitor_and_keyboardI connect my laptop to an external keyboard and an external monitor or projector in various offices and at home, and each of the monitors has a different resolution. Fn-F3 on my laptop keyboard allows me to toggle between monitors, but I want more control (including the ability to specify the resolution of the external display). Now, I find the GPU manufacturer’s application and the Desktop Environment’s GUI for switching monitors and changing screen resolution rather cumbersome, so I wanted an icon on the Desktop that I could double-click to switch monitors without having to enter the root user’s password and fiddle around too much. So I decided to create some simple Bash scripts and associated Desktop Config files with nice-looking icons on the desktop, which I can launch easily and quickly by double-clicking. Obviously the resolutions are limited to the range of resolutions supported by the GPU and external monitor.

The suite of Desktop Config files I created have self-explanatory names:

$ cd ~/Desktop
$ ls -1 Switch*
Switch_OFF_laptop_monitor_if_external_monitor_is_connected
Switch_OFF_laptop_monitor_if_external_monitor_is_connected_auto
Switch_ON_laptop_monitor_and_external_monitor
Switch_ON_laptop_monitor_and_switch_off_external_monitor
$ ls -1 Toggle*
Toggle_display

The difference between Switch_OFF_laptop_monitor_if_external_monitor_is_connected and Switch_OFF_laptop_monitor_if_external_monitor_is_connected_auto is that the former prompts for the resolution of the external monitor whereas the latter tries to find the resolution automatically. I have both because I have found that, for some external display devices (e.g. projectors), it is handy to have the ability to specify the resolution manually.

Switch off the laptop monitor if an external monitor is connected (find resolution automatically)

The Desktop Config file I double-click the most is ~/Desktop/Switch_OFF_laptop_monitor_if_external_monitor_is_connected_auto, and it contains the following text:

[Desktop Entry]
Comment[en_GB]=switch off laptop monitor if external monitor is connected auto
Comment=switch off laptop monitor if external monitor is connected auto
Exec=sh /home/fitzcarraldo/switch_off_laptop_monitor_if_external_monitor_is_connected_auto.sh
GenericName[en_GB]=Switch off laptop monitor if external monitor is connected auto
GenericName=Switch off laptop monitor if external monitor is connected auto
Icon=/home/fitzcarraldo/Pictures/Icons/display.png
MimeType=
Name[en_GB]=Switch_OFF_laptop_monitor_if_external_monitor_is_connected_auto
Name=Switch_OFF_laptop_monitor_if_external_monitor_is_connected_auto
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

The Bash script it launches, ~/switch_off_laptop_monitor_if_external_monitor_is_connected_auto.sh, contains the following code:

#!/bin/bash
if xrandr -q | grep "CRT1 connected"; then
  xrandr --output LVDS --off
  xrandr --output CRT1 --off
  xrandr --output CRT1 --auto
else
  xrandr --output CRT1 --off
  xrandr --output LVDS --off
  xrandr --output LVDS --mode 1920x1080
# 1920x1080 is the native resolution of my laptop monitor
fi

Don’t forget to make them executable:

$ chmod +x /home/fitzcarraldo/Desktop/Switch_OFF_laptop_monitor_if_external_monitor_is_connected_auto
$ chmod +x /home/fitzcarraldo/switch_off_laptop_monitor_if_external_monitor_is_connected_auto.sh

If you’re wondering how I knew I had to specify ‘CRT1′ and ‘LVDS’ in the Bash script, I used the xrandr command to find out what names the GPU gives the monitors:

$ xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 1920 x 1920
LVDS connected (normal left inverted right x axis y axis)
1920x1080 60.0 +
1680x1050 60.0
1400x1050 60.0
1600x900 60.0
1280x1024 60.0
1440x900 60.0
1280x960 60.0
1280x768 60.0
1280x720 60.0
1024x768 60.0
1024x600 60.0
800x600 60.0
800x480 60.0
640x480 60.0
DFP1 disconnected (normal left inverted right x axis y axis)
CRT1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 476mm x 268mm
1920x1080 60.0*+
1280x1024 75.0 60.0
1280x960 60.0
1280x800 59.8
1152x864 75.0
1280x720 60.0
1024x768 75.0 70.1 60.0
800x600 72.2 75.0 60.3 56.2
640x480 75.0 72.8 67.0 59.9

Switch off the laptop monitor if an external monitor is connected (enter resolution)

The Desktop Config file I double-click is ~/Desktop/Switch_OFF_laptop_monitor_if_external_monitor_is_connected, and it contains the following text:

[Desktop Entry]
Comment[en_GB]=switch off laptop monitor if external monitor is connected
Comment=switch off laptop monitor if external monitor is connected
Exec=sh /home/fitzcarraldo/System_Administration/switch_off_laptop_monitor_if_external_monitor_is_connected.sh
GenericName[en_GB]=Switch off laptop monitor if external monitor is connected
GenericName=Switch off laptop monitor if external monitor is connected
Icon=/home/fitzcarraldo/Pictures/Icons/display.png
MimeType=
Name[en_GB]=Switch_OFF_laptop_monitor_if_external_monitor_is_connected
Name=Switch_OFF_laptop_monitor_if_external_monitor_is_connected
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

The Bash script it launches, ~/switch_off_laptop_monitor_if_external_monitor_is_connected.sh, contains the following code:

#!/bin/bash
if xrandr -q | grep "CRT1 connected"; then
echo -n "Enter resolution width of external monitor (hint 1920 Doha, 1440 home): "
read EXTERNAL_WIDTH
echo -n "Enter resoluton height of external monitor (hint 1080 Doha, 900 home): "
read EXTERNAL_HEIGHT
  xrandr --output LVDS --off
  xrandr --output CRT1 --off
  xrandr --output CRT1 --mode $EXTERNAL_WIDTH"x"$EXTERNAL_HEIGHT
else
  xrandr --output CRT1 --off
  xrandr --output LVDS --off
  xrandr --output LVDS --mode 1920x1080
# 1920x1080 is the native resolution of my laptop monitor
fi

Don’t forget to make them executable:

$ chmod +x /home/fitzcarraldo/Desktop/Switch_OFF_laptop_monitor_if_external_monitor_is_connected
$ chmod +x /home/fitzcarraldo/switch_off_laptop_monitor_if_external_monitor_is_connected.sh

Switch on the laptop monitor and external monitor simultaneously

I don’t need to use this one much, only when I am using an external monitor but suddenly want to use the laptop’s built-in Webcam and so have to open fully the laptop’s lid. The file ~/Desktop/Switch_ON_laptop_monitor_and_external_monitor contains the following text:

[Desktop Entry]
Comment[en_GB]=switch_ON_laptop_monitor_and_external_monitor
Comment=switch_ON_laptop_monitor_and_external_monitor
Exec=sh /home/fitzcarraldo/switch_on_laptop_monitor_and_external_monitor.sh
GenericName[en_GB]=Switch_ON_laptop_monitor_and_external_monitor
GenericName=Switch_ON_laptop_monitor_and_external_monitor
Icon=/home/fitzcarraldo/Pictures/Icons/display.png
MimeType=
Name[en_GB]=Switch_ON_laptop_monitor_and_external_monitor
Name=Switch_ON_laptop_monitor_and_external_monitor
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

and the Bash script it calls, ~/switch_on_laptop_monitor_and_external_monitor.sh, contains the following code:

#!/bin/bash
if xrandr -q | grep "CRT1 connected"; then
  echo "Note that the resolution specified must be the same for both monitors, and must be achievable on both monitors."
  echo -n "Enter resolution width of external monitor (hint 1920 office, 1440 home): "
  read EXTERNAL_WIDTH
  echo -n "Enter resoluton height of external monitor (hint 1080 office, 900 home): "
  read EXTERNAL_HEIGHT
  #xrandr --output LVDS --off
  xrandr --output LVDS --mode $EXTERNAL_WIDTH"x"$EXTERNAL_HEIGHT
  xrandr --output CRT1 --off
  xrandr --output CRT1 --mode $EXTERNAL_WIDTH"x"$EXTERNAL_HEIGHT
else
  xrandr --output CRT1 --off
  xrandr --output LVDS --off
  xrandr --output LVDS --mode 1920x1080
# 1920x1080 is the native resolution of my laptop monitor
fi

Don’t forget to make them executable:

$ chmod +x /home/fitzcarraldo/Desktop/Switch_ON_laptop_monitor_and_external_monitor
$ chmod +x /home/fitzcarraldo/switch_on_laptop_monitor_and_external_monitor.sh

Switch on the laptop monitor and switch off an external monitor

I don’t need to use this one much either, given that the display mode reverts to the laptop monitor after I reboot or shutdown/power-up the laptop. The file ~/Desktop/Switch_ON_laptop_monitor_and_external_monitor contains the following text:

[Desktop Entry]
Comment[en_GB]=switch on laptop monitor and switch off external monitor
Comment=switch on laptop monitor and switch off external monitor
Exec=sh /home/fitzcarraldo/switch_on_laptop_monitor_and_switch_off_external_monitor.sh
GenericName[en_GB]=Switch on laptop monitor and switch off external monitor
GenericName=Switch on laptop monitor and switch off external monitor
Icon=computer-laptop
MimeType=
Name[en_GB]=Switch_ON_laptop_monitor_and_switch_off_external_monitor
Name=Switch_ON_laptop_monitor_and_switch_off_external_monitor
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=

The Bash script it launches, ~/switch_on_laptop_monitor_and_switch_off_external_monitor.sh, contains the following code:

#!/bin/bash
xrandr --output CRT1 --off
xrandr --output LVDS --auto
xrandr --output LVDS --mode 1920x1080
# 1920x1080 is the native resolution of my laptop monitor

I did also create a fifth Desktop Config file and associated Bash script, to toggle between the three modes (laptop monitor only > both monitors > external monitor only) rather than having to double-click three different icons. But, to be honest, it’s quicker and easier to have the three icons and double-click on the one I want rather than toggling through three display modes. Anyway, in case you are interested, the Desktop Config file ~/Desktop/Toggle_Display contains the follow text:

[Desktop Entry]
Comment[en_GB]=Toggle between laptop monitor, external monitor and both
Comment=Toggle between laptop monitor, external monitor and both
Exec=sh /home/fitzcarraldo/toggle_display.sh
GenericName[en_GB]=Toggle between laptop monitor, external monitor and both
GenericName=Toggle between laptop monitor, external monitor and both
Icon=video-display
MimeType=
Name[en_GB]=Toggle_display
Name=Toggle_display
Path=
StartupNotify=false
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=

and the Bash script it launches, ~/switch_on_laptop_monitor_and_external_monitor.sh, contains the following code:

#!/bin/sh

# Using the xrandr command I found that the two video outputs from my laptop are named LVDS
# (the internal display) and CRT1 (the external display driven by the laptop's VGA socket).
# My external monitor at home has a resolution of 1440x900.

CONNECTED=`xrandr | grep -i ' connected' | grep LVDS | awk '{print $1}'`
CONNECTED="${CONNECTED} `xrandr | grep -i ' connected' | grep CRT | awk '{print $1}'`"

ENABLED=`awk '{print;exit}' ~/displays_enabled 2>/dev/null`

if [ "$CONNECTED" = "LVDS" -o "$CONNECTED" = "LVDS " -o "$CONNECTED" = " LVDS" ]; then
        # Only the internal display is connected, so don't do anything.
        echo "LVDS" > ~/displays_enabled
        ENABLED="LVDS"
        xrandr --output CRT1 --off
        xrandr --output LVDS --off
        xrandr --output LVDS --auto
        exit 0
elif [ "$CONNECTED" = "LVDS CRT1" ]; then
        # Both the internal and external displays are connected, so let's toggle
        # LVDS > LVDS,CRT1 > CRT1

        EXTERNALRES=`xrandr | awk 'c&&c--;/ connected/{c=1}' | awk '{print $1}' | grep 1440x900`
        if [ "$ENABLED" = "LVDS" ]; then
        # Switching on both displays.
                xrandr --output LVDS --off
                if [ "$EXTERNALRES" = "1440x900" ]; then
                         xrandr --output LVDS --mode 1440x900
                         xrandr --output CRT1 --off
                         xrandr --output CRT1 --auto
                else
                         xrandr --output LVDS --auto
                         xrandr --output CRT1 --off
                         xrandr --output CRT1 --auto
                fi
                ENABLED="LVDS CRT1"
                echo "LVDS CRT1" > ~/displays_enabled
        elif [ "$ENABLED" = "LVDS CRT1" ]; then
        # Switching on only external display.
                xrandr --output LVDS --off
                xrandr --output CRT1 --off
                xrandr --output CRT1 --auto
                ENABLED="CRT1"
                echo "CRT1" > ~/displays_enabled
        else
        # Switching on only internal display.
                xrandr --output CRT1 --off
                xrandr --output LVDS --off
                xrandr --output LVDS --auto
                ENABLED="LVDS"
                echo "LVDS" > ~/displays_enabled
        fi
fi

As I use KDE, I also used System Settings > Shortcuts and Gestures | Custom Shortcuts to create a keyboard shortcut which I named ‘Toggle display’, with Meta+P as Trigger and sh ~/toggle_display.sh as Action, but I tend to use the mouse rather than the keyboard in any case.

By the way, you might think some of the xrandr commands in the above Bash scripts are redundant. You would be correct in thinking that, but in practice I found that the displays did not switch if I didn’t include the additional commands shown (due to a bug in xrandr, perhaps?). Even then, when I switch to an external monitor, occasionally the screen resolution is slightly too big or too small, so I placed the icons at the top left of the desktop so that they are always accessible and I can just double-click on the same icon again if necessary. As I’m using KDE, I placed a Folder View Plasmoid for ~/Desktop/ at the top left of the desktop, as you can see in the screenshot.

Desktop showing icons for switching between monitors

Footnote

I’ve been using the above method of switching between displays for a couple of years now with an AMD ATI GPU. It works nicely and suits my needs perfectly. AMD has supported xrandr since 2008 (see Ref. 1), whereas NVIDIA only began to support xrandr last year (see Ref. 2) so I’m not sure how well these scripts would work with NVIDIA GPUs.

Ref. 1: AMD Catalyst 8.9 Gets WINE Fix, RandR 1.2 Support, September 18, 2008
Ref. 2: NVIDIA’s 302 Linux Driver Finally Has RandR 1.2/1.3, May 2, 2012

How to prevent a USB mouse auto-suspending in Linux when a laptop’s power supply is disconnected

I found that my USB mouse (and external USB keyboard) went to sleep when the mains power supply was disconnected from my laptop. This was annoying because I had to click a mouse button and wait a couple of seconds in order to wake up the mouse. You can see from the console output below that several USB devices were being auto-suspended when I unplugged the laptop PSU:

# # PSU is currently connected.
# for d in /sys/bus/usb/devices/[0-9]* ; do if [[ -e $d/product ]] ; then echo -e "`basename $d`\t`cat $d/power/control`\t`cat $d/speed`\t`cat $d/product`" ; fi ; done
1-1.2 on 1.5 USB Laser Mouse
1-1.3 on 12 BCM2046 Bluetooth Device
2-1.2 on 12 Fingerprint Sensor
2-1.3 on 480 USB 2.0 Camera
2-1.6 on 1.5 USB Keyboard
# # Now I will disconnect the PSU...
# # PSU is currently disconnected.
# for d in /sys/bus/usb/devices/[0-9]* ; do if [[ -e $d/product ]] ; then echo -e "`basename $d`\t`cat $d/power/control`\t`cat $d/speed`\t`cat $d/product`" ; fi ; done
1-1.2 auto 1.5 USB Laser Mouse
1-1.3 auto 12 BCM2046 Bluetooth Device
2-1.2 auto 12 Fingerprint Sensor
2-1.3 auto 480 USB 2.0 Camera
2-1.6 auto 1.5 USB Keyboard
#

I found out the Vendor ID (046d) and Product ID (c052) of my Logitech NX50 USB portable/travel mouse by unplugging then reconnecting the USB mouse and using the dmesg command:

[13628.909728] usb 1-1.2: USB disconnect, device number 5
[13634.454132] usb 1-1.2: new low-speed USB device number 6 using ehci_hcd
[13634.535107] usb 1-1.2: New USB device found, idVendor=046d, idProduct=c052
[13634.535111] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[13634.535113] usb 1-1.2: Product: USB Laser Mouse
[13634.535115] usb 1-1.2: Manufacturer: Logitech
[13634.540168] input: Logitech USB Laser Mouse as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input17
[13634.540582] hid-generic 0003:046D:C052.0005: input,hidraw0: USB HID v1.10 Mouse [Logitech USB Laser Mouse] on usb-0000:00:1a.0-1.2/input0

First I tried creating a local Udev rule:

# cat /etc/udev/rules.d/91-local.rules
ACTION=="add", SUBSYSTEM=="usb", ATTR{product}=="USB Laser Mouse", ATTR{power/control}="on"

That didn’t stop the mouse from auto-suspending (and neither did “Logitech USB Laser Mouse” instead of “USB Laser Mouse”), so I tried creating a Udev rule specifying the Vendor ID and Product ID of the mouse:

# cat /etc/udev/rules.d/91-local.rules
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="046d", ATTR{idProduct}=="c052", TEST=="power/control", ATTR{power/control}="on"

That didn’t stop the mouse from auto-suspending either.

Then I remembered that laptop-mode-tools is installed on my laptop:

# eix laptop-mode-tools
[I] app-laptop/laptop-mode-tools
Available versions: 1.60-r1 (~)1.62-r1 {(+)acpi apm bluetooth scsi}
Installed versions: 1.62-r1(18:10:15 11/01/13)(acpi bluetooth -apm -scsi)
Homepage: http://www.samwel.tk/laptop_mode/
Description: Linux kernel laptop_mode user-space utilities

So then I tried adding the mouse model to the blacklist in /etc/laptop-mode/conf.d/usb-autosuspend.conf by making AUTOSUSPEND_USBID_BLACKLIST="046d:c052" as shown below:

#
# Configuration file for Laptop Mode Tools module usb-autosuspend.
#
# For more information, consult the laptop-mode.conf(8) manual page.
#


###############################################################################
# USB autosuspend settings
# ------------------------
#
# If you enable this setting, laptop mode tools will automatically enable the
# USB autosuspend feature for all devices.
#
# NOTE: Some USB devices claim they support autosuspend, but implement it in a
# broken way. This can mean keyboards losing keypresses, or optical mice turning
# their LED completely off. If you have a device that misbehaves, add its USB ID
# to the blacklist below and complain to your hardware vendor.
################################################################################

# Enable debug mode for this module
# Set to 1 if you want to debug this module
DEBUG=0

# Enable USB autosuspend feature?
# Set to 0 to disable
CONTROL_USB_AUTOSUSPEND="auto"

# Set this to use opt-in/whitelist instead of opt-out/blacklist for deciding
# which USB devices should be autosuspended.
# AUTOSUSPEND_USE_WHITELIST=0 means AUTOSUSPEND_*_BLACKLIST will be used.
# AUTOSUSPEND_USE_WHITELIST=1 means AUTOSUSPEND_*_WHITELIST will be used.
AUTOSUSPEND_USE_WHITELIST=0

# The list of USB IDs that should not use autosuspend. Use lsusb to find out the
# IDs of your USB devices.
# Example: AUTOSUSPEND_USBID_BLACKLIST="046d:c025 0123:abcd"
AUTOSUSPEND_USBID_BLACKLIST="046d:c052"

# The list of USB driver types that should not use autosuspend.  The driver
# type is given by "DRIVER=..." in a USB device's uevent file.
# Example: AUTOSUSPEND_USBID_BLACKLIST="usbhid usb-storage"
AUTOSUSPEND_USBTYPE_BLACKLIST=""

# The list of USB IDs that should use autosuspend. Use lsusb to find out the
# IDs of your USB devices.
# Example: AUTOSUSPEND_USBID_WHITELIST="046d:c025 0123:abcd"
AUTOSUSPEND_USBID_WHITELIST=""

# The list of USB driver types that should use autosuspend.  The driver
# type is given by "DRIVER=..." in a USB device's uevent file.
# Example: AUTOSUSPEND_USBTYPE_WHITELIST="usbhid usb-storage"
AUTOSUSPEND_USBTYPE_WHITELIST=""

# Trigger auto-suspension of the USB deivce under conditional circumstances
BATT_SUSPEND_USB=1
LM_AC_SUSPEND_USB=0
NOLM_AC_SUSPEND_USB=0

# USB Auto-Suspend timeout in seconds
# Number of seconds after which the USB devices should suspend
AUTOSUSPEND_TIMEOUT=2

And now the mouse no longer suspends when I unplug the PSU:

# # PSU is currently connected.
# for d in /sys/bus/usb/devices/[0-9]* ; do if [[ -e $d/product ]] ; then echo -e "`basename $d`\t`cat $d/power/control`\t`cat $d/speed`\t`cat $d/product`" ; fi ; done
1-1.2 on 1.5 USB Laser Mouse
1-1.3 on 12 BCM2046 Bluetooth Device
2-1.2 on 12 Fingerprint Sensor
2-1.3 on 480 USB 2.0 Camera
2-1.6 on 1.5 USB Keyboard
# # Now I will disconnect the PSU...
# # PSU is currently disconnected.
# for d in /sys/bus/usb/devices/[0-9]* ; do if [[ -e $d/product ]] ; then echo -e "`basename $d`\t`cat $d/power/control`\t`cat $d/speed`\t`cat $d/product`" ; fi ; done
1-1.2 on 1.5 USB Laser Mouse
1-1.3 auto 12 BCM2046 Bluetooth Device
2-1.2 auto 12 Fingerprint Sensor
2-1.3 auto 480 USB 2.0 Camera
2-1.6 auto 1.5 USB Keyboard
# # Now I will reconnect the PSU...
# # PSU is currently connected.
# for d in /sys/bus/usb/devices/[0-9]* ; do if [[ -e $d/product ]] ; then echo -e "`basename $d`\t`cat $d/power/control`\t`cat $d/speed`\t`cat $d/product`" ; fi ; done
1-1.2 on 1.5 USB Laser Mouse
1-1.3 on 12 BCM2046 Bluetooth Device
2-1.2 on 12 Fingerprint Sensor
2-1.3 on 480 USB 2.0 Camera
2-1.6 on 1.5 USB Keyboard
#

So configuring laptop-mode-tools solved the problem with the mouse. Mind you, I will probably simply make CONTROL_USB_AUTOSUSPEND="no" in /etc/laptop-mode/conf.d/usb-autosuspend.conf, as I don’t want the internal USB devices in my laptop (Bluetooth adapter, fingerprint sensor and Webcam) to auto-suspend either.

An easy way to edit the Xfce Application Menu

I recently installed Sabayon Linux with Xfce 4.10 on a couple of laptops. Being a long-time KDE user, I was surprised to find that Xfce does not provide a ‘native’ easy way to edit the Xfce Application Menu. The Xfce Wiki page (Customize the Xfce menu) lists a protracted and complicated procedure for making changes to the Xfce menu files. Fortunately the article also points out that a LXDE tool works for Xfce too:

A GNU-licensed graphical menu editor for LXDE, LXMenuEditor, also works for XFCE, as of XFCE 4.8.0 and LXMenuEditor 20110523.

So I installed LXMenuEditor:

# equo install lxmed

To run LXMenuEditor from the command line you just need to enter the command lxmed. If you do that from your user account you can only use LXMenuEditor to view the menu entries. To be able to edit, add and delete menu entries you must launch lxmed as root user, which of course you can do from the command line too. But I wanted to add LXMenuEditor to the Xfce Application Menu and also make it prompt for the root user’s password when launched from the menu. So I did the following:

1. Open a Terminal window, login as root user and launch LXMenuEditor:

$ su
Password:
# lxmed

2. Click on the ‘System Tools’ entry in the Categories pane. The Menu Items pane will display the current menu entries in the System Tools category.

3. Click on the ‘New Item’ button and a window will pop up.

4. In the Name box enter “Application Menu Editor” (without the quotes).

5. In the Command box enter “gksu lxmed” (without the quotes).

6. In the Comment box enter “Edit entries in the Xfce Application Menu” (without the quotes).

7. Make sure the Visible tick box is ticked.

8. Click the OK button.

(x11-libs/gksu should already be installed, but install it if it is not.)

That’s it. If you click on ‘Applications Menu’ on the Panel there will now be a menu entry System > Applications Menu Editor and, if you click on that, you will be prompted to enter the root user’s password. Once you have done that, LXMenuEditor will be launched with root user previleges and you can view and edit the Xfce applications menu.

Installing and using ZBar in Linux to scan bar codes with your Webcam

ZBar is an application that can scan and decode several bar code symbologies (including QR Code) from sources such as a Webcam or an image file. I had been wanting to install it for some time and was finally spurred on to do it by a request for help to get it working in the Sabayon Linux forums. Here are the steps I used.

1. I installed the package media-gfx/zbar-0.10-r1.
Note for Gentoo users: I merged the package with the imagemagick and v4l USE flags set, so that both zbarimg and zbarcam would be installed. If you only want to use ZBar with a Webcam then turn off the imagemagick flag and zbarimg will not be installed.
Note for Sabayon Linux users: The Entropy package was built with both the above-mentioned USE flags set, so zbarimg and zbarcam will be installed.

2. Then I checked the status of the installed package by using the Portage eix command:

$ eix -I zbar
[I] media-gfx/zbar
Available versions: (~)0.10-r1 {{X gtk imagemagick jpeg python qt4 static-libs +threads v4l xv}}
Installed versions: 0.10-r1(03:56:14 05/10/12)(X gtk imagemagick jpeg qt4 threads v4l xv -python -static-libs)
Homepage: http://zbar.sourceforge.net/
Description: Library and tools for reading barcodes from images or video

Sabayon Linux users could instead use the following command:

$ equo search --verbose zbar

3. Then I checked which video device my laptop’s inbuilt Webcam is:

$ ls /dev/video*
/dev/video0

4. As it is /dev/video0, I launched zbarcam as follows:

$ zbarcam --raw /dev/video0
WARNING: no compatible input to output format
...trying again with output disabled
ERROR: zbar processor in zbar_processor_init():
unsupported request: no compatible image format

Clearly zbarcam was not recognising the Webcam.

5. As I had installed the package with the Video4Linux USE flag set, I then launched zbarcam with the following prefix:

$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so zbarcam --raw /dev/video0

The ZBar GUI window popped up and I could see myself in the window. So far, so good.

6. I held a QR Code 2D bar code in front of the Webcam, then held a 1D Interleaved 2 of 5 bar code in front of the Webcam. The following was displayed:

$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so zbarcam --raw /dev/video0
http://roho.it/mryt
0161223563

Both the QR Code and the I2of5 bar code were read correctly. If the --raw parameter is omitted then zbarcam displays the symbology of the bar code too:

$ LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so zbarcam /dev/video0
QR-Code:http://roho.it/mryt
I2/5:0161223563

7. Then I tried using ZBar to read a bar code which I had previously saved as a .jpg file:

$ zbarimg --raw ~/zebra04.jpg
01234565
scanned 1 barcode symbols from 1 images in 0.04 seconds

$ zbarimg ~/zebra04.jpg
EAN-8:01234565
scanned 1 barcode symbols from 1 images in 0.04 seconds

To find out the other parameters available, use the commands:

$ man zbarcam
$ zbarcam --help
$ man zbarimg
$ zbarimg --help

ZBar is a nice tool. 8-)

How to install the linux-firmware package in Gentoo

The microcode image (a.k.a. firmware) file for a driver can be installed from the distribution’s package manager. For example, in Gentoo the microcode package for the Intel Wireless WiFi 5100AGN, 5300AGN and 5350AGN controllers is named sys-firmware/iwl5000-ucode. However, microcode files are also available in a single package named sys-kernel/linux-firmware and can be installed using that package instead. However, to me at least, it was not obvious how to do this and the elog output when you merge the linux-firmware package is not particularly helpful:

* If you are only interested in particular firmware files, edit the saved
* configfile and remove those that you do not want.
>>> sys-kernel/linux-firmware-20120816 merged.

In other words, I used to enter the following command to install the microcode for the Intel 5300AGN WiFi controller:

emerge sys-firmware/iwl5000-ucode

and that command installed only the microcode files needed for that WiFi controller, but the following command also installed many other microcode files for hardware that my laptop does not have:

emerge sys-kernel/linux-firmware

You can see below what the above command installs in /lib/firmware/ (/lib64/firmware/ if you have a 64-bit installation) in the case of the package linux-firmware-20120816.

# ls /lib/firmware/
3com bnx2 emi26 iwlwifi-4965-2.ucode LICENCE.broadcom_bcm43xx matrox qlogic s2250_loader.fw usbdux
acenic bnx2x emi62 iwlwifi-5000-1.ucode LICENCE.chelsio_firmware mrvl r128 sb16 usbduxfast_firmware.bin
ACX100_USB.bin bnx2x-e1-4.8.53.0.fw ene-ub6250 iwlwifi-5000-2.ucode LICENCE.ene_firmware mts_cdma.fw radeon slicoss usbdux_firmware.bin
adaptec bnx2x-e1-5.2.13.0.fw ess iwlwifi-5000-5.ucode LICENCE.i2400m mts_edge.fw RADIO0d.BIN STLC2500_R4_00_03.ptc usbduxsigma_firmware.bin
advansys bnx2x-e1-5.2.7.0.fw f2255usb.bin iwlwifi-5150-2.ucode LICENCE.iwlwifi_firmware mts_gsm.fw RADIO11.BIN STLC2500_R4_00_06.ssf v4l-cx231xx-avcore-01.fw
af9005.fw bnx2x-e1h-4.8.53.0.fw GPL-3 iwlwifi-6000-4.ucode LICENCE.Marvell mts_mt9234mu.fw RADIO15.BIN STLC2500_R4_02_02_WLAN.ssf v4l-cx23418-apu.fw
agere_ap_fw.bin bnx2x-e1h-5.2.13.0.fw htc_7010.fw iwlwifi-6000g2a-5.ucode LICENCE.mwl8335 mts_mt9234zba.fw README STLC2500_R4_02_04.ptc v4l-cx23418-cpu.fw
agere_sta_fw.bin bnx2x-e1h-5.2.7.0.fw htc_9271.fw iwlwifi-6000g2a-6.ucode LICENCE.myri10ge_firmware mwl8k rt2561.bin sun v4l-cx23418-dig.fw
ar3k brcm i2400m-fw-usb-1.4.sbcf iwlwifi-6000g2b-5.ucode LICENCE.OLPC myri10ge_ethp_z8e.dat rt2561s.bin sxg v4l-cx23885-avcore-01.fw
ar7010_1_1.fw cis i2400m-fw-usb-1.5.sbcf iwlwifi-6000g2b-6.ucode LICENCE.phanfw myri10ge_eth_z8e.dat rt2661.bin TDA7706_OM_v2.5.1_boot.txt v4l-cx23885-enc.fw
ar7010.fw configure i6050-fw-usb-1.5.sbcf iwlwifi-6050-4.ucode LICENCE.qla2xxx myri10ge_rss_ethp_z8e.dat rt2860.bin TDA7706_OM_v3.0.2_boot.txt v4l-cx25840.fw
ar9170-1.fw cpia2 intelliport2.bin iwlwifi-6050-5.ucode LICENCE.ralink-firmware.txt myri10ge_rss_eth_z8e.dat rt2870.bin tehuti vicam
ar9170-2.fw cxgb3 isci kaweth LICENCE.rtlwifi_firmware.txt myricom rt3070.bin ti_3410.fw vntwusb.fw
ar9271.fw cxgb4 iwlwifi-1000-3.ucode keyspan LICENCE.tda7706-firmware.txt ositech rt3071.bin ti_5052.fw vxge
ath3k-1.fw dabusb iwlwifi-1000-5.ucode keyspan_pda LICENCE.ti-connectivity phanfw.bin rt3090.bin TIACX111.BIN WHENCE
ath6k dsp56k iwlwifi-100-5.ucode korg LICENCE.ueagle-atm4-firmware ql2100_fw.bin rt3290.bin ti-connectivity whiteheat.fw
atmsar11.fw dvb-fe-xc5000-1.6.114.fw iwlwifi-105-6.ucode lbtf_usb.bin LICENCE.via_vt6656 ql2200_fw.bin rt73.bin tigon whiteheat_loader.fw
av7110 dvb-usb-dib0700-1.20.fw iwlwifi-135-6.ucode lgs8g75.fw LICENCE.xc5000 ql2300_fw.bin RTL8192E tlg2300_firmware.bin WLANGEN.BIN
BCM2033-FW.bin dvb-usb-terratec-h5-drxk.fw iwlwifi-2000-6.ucode libertas LICENSE.dib0700 ql2322_fw.bin rtl_nic tr_smctr.bin yam
BCM2033-MD.hex e100 iwlwifi-2030-6.ucode LICENCE.agere LICENSE.radeon ql2400_fw.bin rtlwifi ttusb-budget yamaha
BCM-LEGAL.txt edgeport iwlwifi-3945-2.ucode LICENCE.atheros_firmware Makefile ql2500_fw.bin s2250.fw ueagle-atm zd1211

But I only need the files iwlwifi-5000-*.ucode, not all those other microcode files, so here is what I do:

# emerge linux-firmware
# cp /etc/portage/savedconfig/sys-kernel/linux-firmware-20120816 /home/fitzcarraldo/linux-firmware-20120816.bak
# awk '{ printf "#"; print }' /home/fitzcarraldo/linux-firmware-20120816.bak > /etc/portage/savedconfig/sys-kernel/linux-firmware-20120816
# nano /etc/portage/savedconfig/sys-kernel/linux-firmware-20120816 # Remove the comment symbol from the files I want to install.
# cp /etc/portage/savedconfig/sys-kernel/linux-firmware-20120816 /home/fitzcarraldo/linux-firmware-20120816 # I like to keep a backup of the edited file too.
# USE="savedconfig" emerge linux-firmware

Of course you can add the savedconfig USE flag in /etc/portage/package.use instead, so that you do not have to type USE=”savedconfig” every time:

# echo "sys-kernel/linux-firmware savedconfig" >> /etc/portage/package.use

For example, I edited /etc/portage/savedconfig/sys-kernel/linux-firmware-20120816 so that the lines are commented out for firmware my laptop does not need. I could have deleted the unwanted lines instead, but I preferred to comment out unwanted lines in case I made a mistake. The file now looks like this:

# Remove files that shall not be installed from this list.
#3com/typhoon.bin
#3com/3C359.bin
#acenic/tg1.bin
#acenic/tg2.bin
#adaptec/starfire_rx.bin
#adaptec/starfire_tx.bin
#advansys/3550.bin
#advansys/38C1600.bin
#advansys/38C0800.bin
#advansys/mcode.bin
#agere_ap_fw.bin
#agere_sta_fw.bin
#ar3k/ramps_0x01020201_26.dfu
#ar3k/ramps_0x01020200_40.dfu
#ar3k/AthrBT_0x11020000.dfu
#ar3k/1020201/RamPatch.txt
#ar3k/1020201/PS_ASIC.pst
#ar3k/1020200/RamPatch.txt
#ar3k/1020200/ar3kbdaddr.pst
#ar3k/1020200/PS_ASIC.pst
#ar3k/ramps_0x11020000_40.dfu
#ar3k/AthrBT_0x01020201.dfu
#ar3k/30101/RamPatch.txt
#ar3k/30101/ar3kbdaddr.pst
#ar3k/30101/PS_ASIC.pst
#ar3k/30000/RamPatch.txt
#ar3k/30000/ar3kbdaddr.pst
#ar3k/30000/PS_ASIC.pst
#ar3k/30101coex/PS_ASIC_aclHighPri.pst
#ar3k/30101coex/PS_ASIC_aclLowPri.pst
#ar3k/30101coex/RamPatch.txt
#ar3k/30101coex/ar3kbdaddr.pst
#ar3k/30101coex/PS_ASIC.pst
#ar3k/ramps_0x01020001_26.dfu
#ar3k/AthrBT_0x31010000.dfu
#ar3k/AthrBT_0x01020001.dfu
#ar3k/ramps_0x01020201_40.dfu
#ar3k/ramps_0x01020200_26.dfu
#ar3k/AthrBT_0x01020200.dfu
#ar3k/ramps_0x31010000_40.dfu
#ar7010_1_1.fw
#ar7010.fw
#ar9170-1.fw
#ar9170-2.fw
#ar9271.fw
#ath3k-1.fw
#ath6k/AR6002/athwlan.bin.z77
#ath6k/AR6002/eeprom.bin
#ath6k/AR6002/data.patch.hw2_0.bin
#ath6k/AR6002/eeprom.data
#ath6k/AR6004/hw1.2/bdata.bin
#ath6k/AR6004/hw1.2/fw-2.bin
#ath6k/AR6003.1/hw2.1.1/athwlan.bin
#ath6k/AR6003.1/hw2.1.1/bdata.SD31.bin
#ath6k/AR6003.1/hw2.1.1/data.patch.bin
#ath6k/AR6003.1/hw2.1.1/bdata.WB31.bin
#ath6k/AR6003.1/hw2.1.1/endpointping.bin
#ath6k/AR6003.1/hw2.1.1/otp.bin
#ath6k/AR6003.1/hw2.1.1/bdata.SD32.bin
#ath6k/AR6003/hw1.0/athwlan.bin.z77
#ath6k/AR6003/hw1.0/otp.bin.z77
#ath6k/AR6003/hw1.0/bdata.SD31.bin
#ath6k/AR6003/hw1.0/data.patch.bin
#ath6k/AR6003/hw1.0/bdata.WB31.bin
#ath6k/AR6003/hw1.0/bdata.SD32.bin
#ath6k/AR6003/hw2.0/athwlan.bin.z77
#ath6k/AR6003/hw2.0/otp.bin.z77
#ath6k/AR6003/hw2.0/bdata.SD31.bin
#ath6k/AR6003/hw2.0/data.patch.bin
#ath6k/AR6003/hw2.0/bdata.WB31.bin
#ath6k/AR6003/hw2.0/bdata.SD32.bin
#ath6k/AR6003/hw2.1.1/athwlan.bin
#ath6k/AR6003/hw2.1.1/bdata.SD31.bin
#ath6k/AR6003/hw2.1.1/fw-3.bin
#ath6k/AR6003/hw2.1.1/data.patch.bin
#ath6k/AR6003/hw2.1.1/bdata.WB31.bin
#ath6k/AR6003/hw2.1.1/endpointping.bin
#ath6k/AR6003/hw2.1.1/otp.bin
#ath6k/AR6003/hw2.1.1/fw-2.bin
#ath6k/AR6003/hw2.1.1/bdata.SD32.bin
#atmsar11.fw
#av7110/Boot.S
#av7110/bootcode.bin
#av7110/Makefile
#bnx2/bnx2-rv2p-06-6.0.15.fw
#bnx2/bnx2-rv2p-09-6.0.17.fw
#bnx2/bnx2-rv2p-06-4.6.16.fw
#bnx2/bnx2-rv2p-09-5.0.0.j3.fw
#bnx2/bnx2-rv2p-06-5.0.0.j3.fw
#bnx2/bnx2-mips-09-5.0.0.j15.fw
#bnx2/bnx2-rv2p-09-4.6.15.fw
#bnx2/bnx2-rv2p-09ax-6.0.17.fw
#bnx2/bnx2-mips-06-5.0.0.j3.fw
#bnx2/bnx2-mips-06-6.2.3.fw
#bnx2/bnx2-mips-09-5.0.0.j9.fw
#bnx2/bnx2-rv2p-09-5.0.0.j10.fw
#bnx2/bnx2-mips-09-6.2.1b.fw
#bnx2/bnx2-rv2p-09ax-5.0.0.j3.fw
#bnx2/bnx2-mips-06-6.0.15.fw
#bnx2/bnx2-mips-09-6.2.1.fw
#bnx2/bnx2-mips-09-5.0.0.j3.fw
#bnx2/bnx2-rv2p-09ax-5.0.0.j10.fw
#bnx2/bnx2-mips-06-5.0.0.j6.fw
#bnx2/bnx2-mips-06-4.6.16.fw
#bnx2/bnx2-mips-06-6.2.1.fw
#bnx2/bnx2-mips-09-6.2.1a.fw
#bnx2/bnx2-mips-09-4.6.17.fw
#bnx2/bnx2-mips-09-6.0.17.fw
#bnx2x/bnx2x-e1h-6.2.5.0.fw
#bnx2x/bnx2x-e1-7.2.16.0.fw
#bnx2x/bnx2x-e1h-6.2.9.0.fw
#bnx2x/bnx2x-e2-6.2.5.0.fw
#bnx2x/bnx2x-e2-6.0.34.0.fw
#bnx2x/bnx2x-e2-6.2.9.0.fw
#bnx2x/bnx2x-e1-7.0.23.0.fw
#bnx2x/bnx2x-e1-6.2.9.0.fw
#bnx2x/bnx2x-e1-7.2.51.0.fw
#bnx2x/bnx2x-e1h-7.0.23.0.fw
#bnx2x/bnx2x-e1h-6.0.34.0.fw
#bnx2x/bnx2x-e2-7.0.29.0.fw
#bnx2x/bnx2x-e1h-7.2.51.0.fw
#bnx2x/bnx2x-e1h-7.0.29.0.fw
#bnx2x/bnx2x-e1h-7.2.16.0.fw
#bnx2x/bnx2x-e1-6.2.5.0.fw
#bnx2x/bnx2x-e2-7.0.20.0.fw
#bnx2x/bnx2x-e1-6.0.34.0.fw
#bnx2x/bnx2x-e1-7.0.29.0.fw
#bnx2x/bnx2x-e2-7.2.51.0.fw
#bnx2x/bnx2x-e2-7.0.23.0.fw
#bnx2x/bnx2x-e2-7.2.16.0.fw
#bnx2x/bnx2x-e1h-7.0.20.0.fw
#bnx2x/bnx2x-e1-7.0.20.0.fw
#bnx2x-e1-4.8.53.0.fw
#bnx2x-e1-5.2.13.0.fw
#bnx2x-e1-5.2.7.0.fw
#bnx2x-e1h-4.8.53.0.fw
#bnx2x-e1h-5.2.13.0.fw
#bnx2x-e1h-5.2.7.0.fw
#brcm/bcm43xx-0.fw
#brcm/brcmfmac4329.bin
#brcm/brcmfmac43236b.bin
#brcm/brcmfmac4330.bin
#brcm/brcmfmac4334.bin
#brcm/bcm4329-fullmac-4.bin
#brcm/bcm43xx_hdr-0.fw
#cis/MT5634ZLX.cis
#cis/SW_555_SER.cis
#cis/COMpad2.cis
#cis/SW_7xx_SER.cis
#cis/NE2K.cis
#cis/src/MT5634ZLX.cis
#cis/src/COMpad2.cis
#cis/src/NE2K.cis
#cis/src/DP83903.cis
#cis/src/RS-COM-2P.cis
#cis/src/LA-PCM.cis
#cis/src/COMpad4.cis
#cis/src/PE-200.cis
#cis/src/tamarack.cis
#cis/src/3CCFEM556.cis
#cis/src/PCMLM28.cis
#cis/src/3CXEM556.cis
#cis/src/PE520.cis
#cis/DP83903.cis
#cis/RS-COM-2P.cis
#cis/LA-PCM.cis
#cis/SW_8xx_SER.cis
#cis/COMpad4.cis
#cis/PE-200.cis
#cis/tamarack.cis
#cis/3CCFEM556.cis
#cis/Makefile
#cis/PCMLM28.cis
#cis/3CXEM556.cis
#cis/PE520.cis
configure
#cpia2/stv0672_vp4.bin
#cxgb3/t3b_psram-1.1.0.bin
#cxgb3/ael2005_twx_edc.bin
#cxgb3/t3fw-7.4.0.bin
#cxgb3/t3fw-7.1.0.bin
#cxgb3/t3c_psram-1.1.0.bin
#cxgb3/t3fw-7.12.0.bin
#cxgb3/t3fw-7.10.0.bin
#cxgb3/ael2020_twx_edc.bin
#cxgb3/t3fw-7.0.0.bin
#cxgb3/ael2005_opt_edc.bin
#cxgb4/t4fw.bin
#cxgb4/t4fw-1.4.23.0.bin
#dabusb/bitstream.bin
#dabusb/firmware.fw
#dsp56k/bootstrap.bin
#dsp56k/concat-bootstrap.pl
#dsp56k/bootstrap.asm
#dsp56k/Makefile
#dvb-fe-xc5000-1.6.114.fw
#dvb-usb-dib0700-1.20.fw
#dvb-usb-terratec-h5-drxk.fw
#e100/d101m_ucode.bin
#e100/d102e_ucode.bin
#e100/d101s_ucode.bin
#edgeport/boot.fw
#edgeport/down.fw
#edgeport/down2.fw
#edgeport/down3.bin
#edgeport/boot2.fw
#emi26/bitstream.fw
#emi26/loader.fw
#emi26/firmware.fw
#emi62/bitstream.fw
#emi62/loader.fw
#emi62/spdif.fw
#emi62/midi.fw
#ene-ub6250/msp_rdwr.bin
#ene-ub6250/sd_init1.bin
#ene-ub6250/sd_init2.bin
#ene-ub6250/ms_init.bin
#ene-ub6250/ms_rdwr.bin
#ene-ub6250/sd_rdwr.bin
#ess/maestro3_assp_minisrc.fw
#ess/maestro3_assp_kernel.fw
#f2255usb.bin
GPL-3
#htc_7010.fw
#htc_9271.fw
#i2400m-fw-usb-1.4.sbcf
#i2400m-fw-usb-1.5.sbcf
#i6050-fw-usb-1.5.sbcf
#intelliport2.bin
#isci/create_fw.c
#isci/README
#isci/probe_roms.h
#isci/isci_firmware.bin
#isci/create_fw.h
#isci/Makefile
#iwlwifi-1000-3.ucode
#iwlwifi-1000-5.ucode
#iwlwifi-100-5.ucode
#iwlwifi-105-6.ucode
#iwlwifi-135-6.ucode
#iwlwifi-2000-6.ucode
#iwlwifi-2030-6.ucode
#iwlwifi-3945-2.ucode
#iwlwifi-4965-2.ucode
iwlwifi-5000-1.ucode
iwlwifi-5000-2.ucode
iwlwifi-5000-5.ucode
#iwlwifi-5150-2.ucode
#iwlwifi-6000-4.ucode
#iwlwifi-6000g2a-5.ucode
#iwlwifi-6000g2a-6.ucode
#iwlwifi-6000g2b-5.ucode
#iwlwifi-6000g2b-6.ucode
#iwlwifi-6050-4.ucode
#iwlwifi-6050-5.ucode
#kaweth/trigger_code_fix.bin
#kaweth/new_code.bin
#kaweth/new_code_fix.bin
#kaweth/trigger_code.bin
#keyspan/usa19qi.fw
#keyspan/usa28xb.fw
#keyspan/usa28x.fw
#keyspan/usa49wlc.fw
#keyspan/usa49w.fw
#keyspan/usa19w.fw
#keyspan/usa28xa.fw
#keyspan/usa28.fw
#keyspan/usa19qw.fw
#keyspan/mpr.fw
#keyspan/usa18x.fw
#keyspan/usa19.fw
#keyspan_pda/keyspan_pda.S
#keyspan_pda/xircom_pgs.S
#keyspan_pda/keyspan_pda.fw
#keyspan_pda/xircom_pgs.fw
#keyspan_pda/Makefile
#korg/k1212.dsp
#lbtf_usb.bin
#lgs8g75.fw
#libertas/gspi8682.bin
#libertas/sd8682_helper.bin
#libertas/gspi8688_helper.bin
#libertas/gspi8686_v9.bin
#libertas/cf8385_helper.bin
#libertas/usb8682.bin
#libertas/cf8381_helper.bin
#libertas/usb8388_v9.bin
#libertas/sd8686_v8.bin
#libertas/sd8385_helper.bin
#libertas/sd8686_v9.bin
#libertas/sd8686_v9_helper.bin
#libertas/cf8381.bin
#libertas/gspi8686_v9_helper.bin
#libertas/usb8388_v5.bin
#libertas/gspi8682_helper.bin
#libertas/lbtf_sdio.bin
#libertas/gspi8688.bin
#libertas/sd8385.bin
#libertas/sd8682.bin
#libertas/usb8388_olpc.bin
#libertas/sd8688.bin
#libertas/sd8688_helper.bin
#libertas/sd8686_v8_helper.bin
#libertas/cf8385.bin
#LICENCE.agere
#LICENCE.atheros_firmware
#LICENCE.broadcom_bcm43xx
#LICENCE.chelsio_firmware
#LICENCE.ene_firmware
#LICENCE.i2400m
LICENCE.iwlwifi_firmware
#LICENCE.Marvell
#LICENCE.mwl8335
#LICENCE.myri10ge_firmware
#LICENCE.OLPC
#LICENCE.phanfw
#LICENCE.qla2xxx
#LICENCE.ralink-firmware.txt
#LICENCE.rtlwifi_firmware.txt
#LICENCE.tda7706-firmware.txt
#LICENCE.ti-connectivity
#LICENCE.ueagle-atm4-firmware
#LICENCE.via_vt6656
#LICENCE.xc5000
#LICENSE.dib0700
LICENSE.radeon
Makefile
#matrox/g400_warp.fw
#matrox/g200_warp.fw
#mrvl/sd8787_uapsta.bin
#mts_cdma.fw
#mts_edge.fw
#mts_gsm.fw
#mts_mt9234mu.fw
#mts_mt9234zba.fw
#mwl8k/fmimage_8366.fw
#mwl8k/helper_8366.fw
#mwl8k/fmimage_8366_ap-2.fw
#mwl8k/fmimage_8366_ap-1.fw
#mwl8k/fmimage_8687.fw
#mwl8k/helper_8687.fw
#myri10ge_ethp_z8e.dat
#myri10ge_eth_z8e.dat
#myri10ge_rss_ethp_z8e.dat
#myri10ge_rss_eth_z8e.dat
#myricom/lanai.bin
#ositech/Xilinx7OD.bin
#phanfw.bin
#ql2100_fw.bin
#ql2200_fw.bin
#ql2300_fw.bin
#ql2322_fw.bin
#ql2400_fw.bin
#ql2500_fw.bin
#qlogic/12160.bin
#qlogic/isp1000.bin
#qlogic/sd7220.fw
#qlogic/1280.bin
#qlogic/1040.bin
#r128/r128_cce.bin
#radeon/R600_pfp.bin
#radeon/RV770_pfp.bin
#radeon/RS780_me.bin
#radeon/CEDAR_me.bin
#radeon/TURKS_me.bin
#radeon/R600_me.bin
#radeon/RS600_cp.bin
#radeon/SUMO_me.bin
#radeon/CAYMAN_pfp.bin
#radeon/CYPRESS_me.bin
#radeon/CAICOS_pfp.bin
#radeon/R520_cp.bin
#radeon/VERDE_ce.bin
#radeon/RV630_me.bin
#radeon/R700_rlc.bin
#radeon/RV610_pfp.bin
#radeon/JUNIPER_me.bin
#radeon/RV710_pfp.bin
#radeon/RS690_cp.bin
#radeon/CYPRESS_pfp.bin
#radeon/SUMO2_me.bin
#radeon/VERDE_mc.bin
#radeon/BARTS_mc.bin
#radeon/CAICOS_mc.bin
#radeon/ARUBA_pfp.bin
#radeon/RV635_pfp.bin
#radeon/R420_cp.bin
#radeon/R600_rlc.bin
#radeon/RV630_pfp.bin
#radeon/RV635_me.bin
#radeon/PITCAIRN_ce.bin
#radeon/RV730_pfp.bin
radeon/REDWOOD_me.bin
#radeon/PALM_me.bin
#radeon/BTC_rlc.bin
#radeon/BARTS_pfp.bin
#radeon/SUMO_rlc.bin
radeon/REDWOOD_rlc.bin
#radeon/JUNIPER_rlc.bin
#radeon/R100_cp.bin
#radeon/VERDE_pfp.bin
#radeon/RV610_me.bin
#radeon/TAHITI_mc.bin
#radeon/CAYMAN_mc.bin
#radeon/RS780_pfp.bin
#radeon/VERDE_rlc.bin
radeon/REDWOOD_pfp.bin
#radeon/TAHITI_pfp.bin
#radeon/RV670_me.bin
#radeon/RV770_me.bin
#radeon/RV730_me.bin
#radeon/PITCAIRN_mc.bin
#radeon/CEDAR_pfp.bin
#radeon/CAICOS_me.bin
#radeon/BARTS_me.bin
#radeon/CYPRESS_rlc.bin
#radeon/TAHITI_ce.bin
#radeon/CAYMAN_rlc.bin
#radeon/CAYMAN_me.bin
#radeon/ARUBA_rlc.bin
#radeon/PALM_pfp.bin
#radeon/ARUBA_me.bin
#radeon/RV710_me.bin
#radeon/RV620_pfp.bin
#radeon/VERDE_me.bin
#radeon/TAHITI_rlc.bin
#radeon/RV670_pfp.bin
#radeon/TURKS_mc.bin
#radeon/TURKS_pfp.bin
#radeon/TAHITI_me.bin
#radeon/PITCAIRN_me.bin
#radeon/RV620_me.bin
#radeon/PITCAIRN_pfp.bin
#radeon/JUNIPER_pfp.bin
#radeon/SUMO_pfp.bin
#radeon/R300_cp.bin
#radeon/PITCAIRN_rlc.bin
#radeon/R200_cp.bin
#radeon/CEDAR_rlc.bin
#radeon/SUMO2_pfp.bin
README
#rt2561.bin
#rt2561s.bin
#rt2661.bin
#rt2860.bin
#rt2870.bin
#rt3070.bin
#rt3071.bin
#rt3090.bin
#rt3290.bin
#rt73.bin
#RTL8192E/data.img
#RTL8192E/main.img
#RTL8192E/boot.img
#rtl_nic/rtl8105e-1.fw
#rtl_nic/rtl8168e-2.fw
#rtl_nic/rtl8168f-2.fw
#rtl_nic/rtl8168e-1.fw
#rtl_nic/rtl8411-1.fw
#rtl_nic/rtl8168d-2.fw
#rtl_nic/rtl8168g-1.fw
#rtl_nic/rtl8168f-1.fw
#rtl_nic/rtl8168e-3.fw
#rtl_nic/rtl8168d-1.fw
#rtl_nic/rtl8106e-1.fw
#rtl_nic/rtl8402-1.fw
#rtlwifi/rtl8192cufw.bin
#rtlwifi/rtl8192sefw.bin
#rtlwifi/rtl8192cfw.bin
#rtlwifi/rtl8192defw.bin
#rtlwifi/rtl8712u.bin
#rtlwifi/rtl8192cfwU_B.bin
#rtlwifi/rtl8192cfwU.bin
#s2250.fw
#s2250_loader.fw
#sb16/ima_adpcm_capture.csp
#sb16/alaw_main.csp
#sb16/ima_adpcm_init.csp
#sb16/ima_adpcm_playback.csp
#sb16/mulaw_main.csp
#slicoss/oasisdbgdownload.sys
#slicoss/gbrcvucode.sys
#slicoss/oasisdownload.sys
#slicoss/oasisrcvucode.sys
#slicoss/gbdownload.sys
#sun/cassini.bin
#sxg/saharadbgdownloadB.sys
#sxg/saharadownloadB.sys
#TDA7706_OM_v2.5.1_boot.txt
#TDA7706_OM_v3.0.2_boot.txt
#tehuti/bdx.bin
#ti_3410.fw
#ti_5052.fw
#ti-connectivity/wl128x-fw-ap.bin
#ti-connectivity/wl1271-fw-ap.bin
#ti-connectivity/wl128x-fw-4-mr.bin
#ti-connectivity/wl128x-fw-4-sr.bin
#ti-connectivity/wl127x-fw-5-sr.bin
#ti-connectivity/wl128x-nvs.bin
#ti-connectivity/wl127x-fw-3.bin
#ti-connectivity/wl1271-nvs.bin
#ti-connectivity/wl127x-fw-5-plt.bin
#ti-connectivity/wl1271-fw-2.bin
#ti-connectivity/wl1271-fw.bin
#ti-connectivity/wl128x-fw-5-sr.bin
#ti-connectivity/wl128x-fw.bin
#ti-connectivity/wl127x-fw-plt-3.bin
#ti-connectivity/wl127x-nvs.bin
#ti-connectivity/wl12xx-nvs.bin
#ti-connectivity/wl128x-fw-4-plt.bin
#ti-connectivity/wl128x-fw-5-plt.bin
#ti-connectivity/wl127x-fw-4-plt.bin
#ti-connectivity/wl127x-fw-5-mr.bin
#ti-connectivity/wl128x-fw-3.bin
#ti-connectivity/TIInit_7.2.31.bts
#ti-connectivity/wl128x-fw-5-mr.bin
#ti-connectivity/wl127x-fw-4-mr.bin
#ti-connectivity/wl128x-fw-plt-3.bin
#ti-connectivity/wl18xx-fw.bin
#ti-connectivity/wl127x-fw-4-sr.bin
#tigon/tg3_tso5.bin
#tigon/tg3.bin
#tigon/tg3_tso.bin
#tlg2300_firmware.bin
#tr_smctr.bin
#ttusb-budget/dspbootcode.bin
#ueagle-atm/eagleIII.fw
#ueagle-atm/CMVep.bin
#ueagle-atm/DSPei.bin
#ueagle-atm/CMVepFR04.bin
#ueagle-atm/eagleI.fw
#ueagle-atm/930-fpga.bin
#ueagle-atm/CMV4p.bin.v2
#ueagle-atm/CMV9p.bin
#ueagle-atm/CMVepES03.bin
#ueagle-atm/CMVepIT.bin
#ueagle-atm/eagleII.fw
#ueagle-atm/CMVepFR.bin
#ueagle-atm/eagleIV.fw
#ueagle-atm/CMVepWO.bin
#ueagle-atm/CMVepFR10.bin
#ueagle-atm/CMVepES.bin
#ueagle-atm/CMVeiWO.bin
#ueagle-atm/CMVei.bin
#ueagle-atm/adi930.fw
#ueagle-atm/CMV9i.bin
#ueagle-atm/DSPep.bin
#ueagle-atm/DSP4p.bin
#ueagle-atm/DSP9i.bin
#ueagle-atm/DSP9p.bin
#usbdux/fx2-include.asm
#usbdux/Makefile_dux
#usbdux/usbduxsigma_firmware.asm
#usbdux/README.dux
#usbdux/usbduxfast_firmware.asm
#usbdux/usbdux_firmware.asm
#usbduxfast_firmware.bin
#usbdux_firmware.bin
#usbduxsigma_firmware.bin
#v4l-cx231xx-avcore-01.fw
#v4l-cx23418-apu.fw
#v4l-cx23418-cpu.fw
#v4l-cx23418-dig.fw
#v4l-cx23885-avcore-01.fw
#v4l-cx23885-enc.fw
#v4l-cx25840.fw
#vicam/firmware.fw
#vntwusb.fw
#vxge/X3fw.ncf
#vxge/X3fw-pxe.ncf
WHENCE
#whiteheat.fw
#whiteheat_loader.fw
#yam/9600.bin
#yam/1200.bin
#yamaha/yss225_registers.bin
#yamaha/ds1_ctrl.fw
#yamaha/ds1_dsp.fw
#yamaha/ds1e_ctrl.fw

and the resulting files in /lib64/firmware/ after re-merging linux-firmware are now:

# ls /lib/firmware/
ACX100_USB.bin BCM2033-FW.bin BCM-LEGAL.txt GPL-3 iwlwifi-5000-2.ucode LICENCE.iwlwifi_firmware Makefile RADIO0d.BIN RADIO15.BIN STLC2500_R4_00_03.ptc STLC2500_R4_02_02_WLAN.ssf TIACX111.BIN WLANGEN.BIN
af9005.fw BCM2033-MD.hex configure iwlwifi-5000-1.ucode iwlwifi-5000-5.ucode LICENSE.radeon radeon RADIO11.BIN README STLC2500_R4_00_06.ssf STLC2500_R4_02_04.ptc WHENCE zd1211
# ls /lib/firmware/radeon
REDWOOD_me.bin REDWOOD_pfp.bin REDWOOD_rlc.bin

Compare that with the contents of /lib/firmware/ I listed earlier. Much tidier, isn’t it? I’ve saved quite a bit of wasted disk space.

I hope this post is helpful to others, as I searched unsucessfully for instructions on how to install the linux-firmware package so that only the necessary firmware files are installed. Don’t worry though: you could simply go ahead and install linux-firmware without editing the file in /etc/portage/savedconfig/sys-kernel/ if you don’t mind having unecessary files in /lib/firmware/ in addition to the firmware files you need.

A guided tour of my KDE 4.8.4 desktop (Part 2)

In A guided tour of my KDE 4.8.4 desktop (Part 1) I gave a brief overview of the KDE desktop on my main laptop. This time I’m going to cover some applications, KDE and non-KDE, that I use. Just to prove that I don’t look at KDE through rose-tinted spectacles, I’ll also mention a few problems too.

I don’t use a desktop PC. This laptop is my main PC and I use it for all my professional and personal tasks. I travel frequently and have to connect to public and private networks (wired, wireless and broadband modems) and to many different network printers, so a reliable desktop environment and reliable network management software are essential. KDE satisfies the first requirement. The desktop environment-independent NetworkManager and its KDE front-end, the Plasma widget NetworkManagement, satisfy the second requirement. I also use my laptop for the usual leisure activities such as watching DVDs, video files and TV programmes; listening to music files, Audio CDs and Internet radio; messaging/telephony (PC-to-PC and PC-to-landline/mobile internationally); browsing the Web, blogging and so on.

So this is very much a mission-critical machine for me. The fact that I’m using KDE successfully for all these tasks is a testament to the power of KDE (and Linux, of course). I should also point out that, for a mission-critical machine, I’m living a little dangerously as I use the testing branch (a.k.a. unstable branch), rather than the stable branch, of Gentoo Linux. I’ve been using the unstable branch for several years on this laptop and its predecessor, with only a few hiccups, although I do have to keep an eye on the Gentoo forums in case someone reports a problem.

Office suites

Microsoft Word and LibreOffice Calc

Snapshot 1 - Microsoft Word and LibreOffice Calc

I use both LibreOffice and Microsoft Office 2007, the latter under WINE (see WINE tips: Giving each Windows application its own environment). Office 2007 guarantees me 100 per cent compatibility at work but I also find it easier and more reliable than LibreOffice with the large, complex documents and spreadsheets I create. That said, I also have many Word 97 documents and Excel 97 spreadsheets that I still need to access, and LibreOffice opens some of them that Office 2007 cannot. I prefer to use Writer rather than Word for simple tasks such as typing a letter, as I dislike the Ribbon Interface. And I’m happy to use Calc rather than Excel in the majority of cases.

Once I got Office 2007 running under WINE I did not have to boot into Windows any more, although recently that changed for one very specific task on one work project: checking out (downloading) a Microsoft Word file from a Microsoft SharePoint repository, editing it locally and checking it back in (uploading it). Using Firefox in Linux I can upload a Word file to the SharePoint repository initially, but I have to boot into Windows and use Internet Explorer and Word to check-out, edit and check-in the revised document. I’ve used third-party document management and collaboration software in the past that does not require the use of Internet Explorer and Word. I can see how Microsoft lock you into their product line, and I don’t like that.

For schematic diagrams and flowcharts I usually use an old version of Visio (5 Professional) I bought in 1999, again under WINE. I find Visio easier and faster to use than Dia, a GNOME application I also use sometimes for simple diagrams.

E-mail client

I use Thunderbird to access several POP3 e-mail accounts and, via the excellent DavMail, a couple of Microsoft Exchange OWA (Outlook Web Access) accounts at different companies. DavMail is a life-saver. Having to access those two accounts via a Web browser was a hassle and inefficient. A single e-mail client which can be used to access and manage all my e-mail accounts is a godsend. I still have work e-mails from more than ten years ago, and Thunderbird enables me to find information in them with ease. For professional use by ‘power users’, WebMail cannot hold a candle to a good e-mail client such as Thunderbird. I use a number of Thunderbird extensions which I find essential: Lightning (calendar); Provider for Google Calendar (bidirectional access to Google Calendar); Timezone definitions for Mozilla Calendar; Change quote and reply format (why isn’t this functionality built-in to Thunderbird?); ConfigDate (ditto); Enigmail (encyption/decryption of e-mails); ImportExportTools (conversion tools for different e-mail formats); Dictionaries for several languages.

One of the reasons I chose Thunderbird was because it is available for both Linux and Windows. As I can dual boot this laptop, I put Thunderbird’s data files on the Windows NTFS partition (Windows cannot access Linux file systems), and Thunderbird in either OS accesses the same data files. I virtually never boot into Windows, but it is good to know that I can access my e-mail accounts from either operating system using the same application.

Scanning

I occasionally use SANE scanner interface software and its GUI front-end XSane for scanning images and documents to create image files. But I am much more likely to use the GUI front-end gscan2pdf, as I often need to create PDF files for work. gscan2pdf is another application I find indispensable.

Web browsing

Browsers and Google Earth

Snapshot 2 - Browsers and Google Earth

I use Firefox and the KDE browser/file manager/universal viewer Konqueror. I configured Konqueror to use the WebKit rendering engine instead of KHTML (Install the package kwebkitpart then launch Konqueror, select Settings > ‘Configure Konqueror…’ and select ‘WebKit’ as the ‘Default web browser engine’ on the General tab). There have been a few times when Firefox has not been able to display a Web page properly or at all, and Konqueror came to the rescue. The KIO Slaves I mentioned in Part 1 also add to Konqueror’s versatility.

I use the Oxygen KDE Firefox extension (see Snapshot 2), a theme for Firefox that makes it look like a native KDE application. Very nice indeed.

Google Earth needs no introduction. It runs well in KDE on my laptop, and I find it useful both in my work and for personal use.

I have the KDE blogging client Blogilo installed and it was easy to configure it to synchronise with my blog. In fact I started preparing this article in Blogilo but had to abandon it as Blogilo would not save reliably my incomplete work to my hard disk. After losing changes several times I gave up and turned to my tried and tested KWrite to draft the article offline first. Shame, really, as Blogilo looks really handy for preparing blog posts offline and then uploading them. Hopefully the next release will work for me.

For Web site creation and editing I use KompoZer. It’s not as sophisticated as Dreamweaver, but is easy to use and does a good job for my purposes.

Messaging and telephony

I use Skype for Linux for PC-to-PC and PC-to-phone communication domestically and internationally. There is simply no alternative if I want to communicate with my Windows-using friends, family and work colleagues: they are not going to switch to anything else. Actually, I find Skype for Linux perfectly usable (unlike Skype for Android on my Motorola Xoom tablet, which has a fiddly and rather annoying user interface). In some countries the state-owned telecom provider blocks Skype for commercial reasons, but I have been able to circumvent this using Tor (see How to install and use Tor for anonymous browsing or to access country-restricted content from another country). Furthermore, some office networks I use also block Skype, to enforce the use of another product or to stop personal communication, but Tor has helped me out there too.

Graphics

I use the GIMP quite a lot, mostly for photo editing/retouching for work purposes but sometimes to edit/retouch personal photos. I have only used the vector graphics application Inkscape a few times at work and at home. I enjoyed using it to produce the graphics for a laptop ‘Powered by’ sticker.

Gwenview

Snapshot 3 - Gwenview

Apart from the excellent KDE image viewer Gwenview, which gets better with every release of KDE, I use GQView. GQview has been around for many years and its UI looks rather dated, but it has some powerful features which I find useful at work (and at home). GQview makes it easy for me to assign keywords to image files and to search on keywords; to examine EXIF data; to print thumbnail proof sheets; to view multiple image files and page through directories of image files, and so on. This application has often been of help to me at work.

Okular and Adobe Reader

Snapshot 4 - Okular and Adobe Reader

KDE’s Okular document viewer and Adobe Reader are in frequent use on my laptop. I use them both but resort to Adobe Reader for the huge PDF files I sometimes have to view at work, as they load quicker in Adobe Reader. Also, Okular has had a rather irritating habit of printing Landscape pages in Portrait, and vice versa. This problem seems to come and go with different releases of Okular.

CAD

I hardly ever need to use CAD applications, but occasionally I do need to view some old AutoCAD files. For this I use an old version (2009-en-1.06-1) of VariCAD Viewer which opens those old files although it can’t open newer AutoCAD files. I tried unsuccessfully to install newer versions of VariCAD Viewer in the past, but have not tried again recently.

E-books

I only recently began reading e-books. The EPUBReader Firefox extension is an excellent and easy-to-use e-book reader, library manager and shop window for both free and commercical e-books in ePub format. The display of book pages when using the extension as a reader is better than many of the dedicated e-book applications I have seen.

Calibre is an excellent dedicated e-book reader and format converter that I discovered by accident when reading a review of the Amazon Kindle. If you are looking for an application that can handle all the various e-book formats, convert between them, manage your e-book library, upload and download e-books, and act as a reader, look no further. Even the application’s Web site oozes class.

Multimedia

SMPlayer multimedia player, and YouTube in Firefox

Snapshot 5 - SMPlayer multimedia player, and YouTube in Firefox

I have far too many multimedia players installed, but I like to alternate between them. In any case it’s useful to have several players installed because sometimes one of them is able to play a certain file that another cannot.

SMPlayer, VLC and Xine play DVDs, CDs, music files, video files, Internet radio, and digital TV (DVB). I like all three.

Miro is a music and video player, torrent downloader, Internet TV and podcast viewer, and more. Another very polished application I enjoy using.

Dragon Player is a KDE player for CDs, DVDs, audio and video files. It plays DVDs, audio and video files well on my laptop, but cannot play Audio CDs for some reason. It is not as versatile or as polished as the multimedia players mentioned above, so I rarely use it.

Clementine music player

Snapshot 6 - Clementine music player

The music players I have installed are Audacious, Clementine and Amarok. These three applications focus on playing and managing collections of music files, Audio CDs and streaming Internet radio.

In the days of KDE 3 I used exclusively Amarok 1.4, which was darn near a perfect music player. But new releases of Amarok were buggy in early releases of KDE 4, and today Amarok still does not work as well for me as the KDE 3 version did. Some of the album covers disappear randomly from the album cover manager, and it is irritating to have to restore covers. Clementine, on the other hand, has no trouble managing album covers and I find it is more polished than Amarok and nicer to use all round. I cannot get Amarok to play Audio CDs with the KDE GStreamer Phonon backend, only with the KDE VLC Phonon backend. Even then the optical drive in my laptop spins very fast and produces a loud noise, making listening to Audio CDs painful. Audacious, on the other hand, plays Audio CDs quietly and perfectly on my laptop. Although Clementine is superb in other respects, for some reason it cannot play Audio CDs on my laptop, whichever KDE Phonon backend is selected. All three players can stream Internet radio without problem, although the long pre-configured list of radio stations in Clementine is simply excellent. If Clementine could play Audio CDs on my laptop, it would be my favourite music player.

MIDI players and Karaoke

I have four different MIDI players installed. PyKaraoke (see HOWTO: PyKaraoke) and KDE’s own KMid can both play MIDI files with and without embedded karaoke lyrics. TiMidity++ is a MIDI file player, as well as an ALSA sequencer which can be used by the other MIDI player applications here. Drumstick has three applications: a MIDI player, a drumkit sequencer and a virtual piano keyboard. I enter the following command once before launching any of them:

modprobe snd_seq && timidity -iA -Os

Actually, I have put the above command in a Desktop Configuration File with a nice icon in my Desktop directory, so I just double-click on it. I could have instead loaded the snd_seq module automatically at startup by specifying it in the file /etc/conf.d/modules.

Audio CDs

KsCD is a simple KDE application with a sole purpose: to play Audio CDs. For me it fails miserably in this task, and has done in several releases of KDE. The last time I remember it working for sure was in KDE 4.3.3, and here we are today with KDE 4.8.4. The KDE Bug Tracking System has quite a few bug reports regarding KsCD. I don’t know if the application itself has a bug, or if the KDE Phonon backends are buggy, or if KDE has a bug, or if there is a problem with udev, or a combination. Anyway, whatever the reason, in my case KsCD is useless. Come to that, for Audio CDs Amarok is next to useless. Luckily for me, Audacious, SMPlayer, VLC and Xine can play Audio CDs perfectly on my laptop.

YouTube

I should mention the excellent command line tool youtube-dl (‘YouTube download’) which is great for downloading videos from YouTube. You can specify the resolution, extract the audio, and various other tricks. Well worth adding to your set of mutlimedia tools. Or, if you prefer a GUI, Minitube is a cracking application for watching and streaming YouTube videos without using a Web browser, and also enables you to download them.

Backing up CDs/DVDs or ripping audio and video

K3b is a superb KDE application. It’s a one-stop shop for making back-ups of CDs and DVDs, creating data CDs and DVDs, and ripping CDs and DVDs. I use K3b to rip my Audio CDs to mp3 files.

Another well-known KDE application is the excellent K9Copy DVD ripper. Unfortunately the developer stopped working on it in July 2011. I hope someone else picks it up, as K9Copy has an intuitive GUI and I have used it on a number of occasions to rip my DVDs to my hard disk so that I could watch them when travelling.

dvd::rip does just what the name suggests, and I’ve used this excellent application too. The GUI is intuitive and the online documentation is very good.

Winki the Ripper is a good application for ripping DVDs to MKV files (it can also rip to AVI files). I have used it but noticed recently that the Web site is up for sale, so I hope the application is still being developed.

WINE

WINE menu in Lancelot Launcher

Snapshot 7 - WINE menu in Lancelot Launcher

I have mentioned Office 2007 already, but I have a few other Windows applications installed under WINE, such as IE7 (so that I can see how a Web site looks in a Windows browser), IrfanView, Lotus ScreenCam Player (so that it is still possible to view some videos of a specialist application running in Windows 95 many years ago), Notepad, Pinball and a few applications and utilities I need that are not available in Linux. WINE is not perfect, but it is wonderful software that also makes it possible to run some older Windows applications that are probably not able to run in Windows Vista and 7.

Utilities

Some utilities

Snapshot 8 - Some utilities

I used to use the brilliant command line utility ImageMagick to scale image files, but have not had to resort to the command line since the GUI front-end Converseen was released (see Converseen, a GUI batch image converter and resizer using Qt4 and ImageMagick).

I encrypt and decrypt some of my sensitive files using GnuPG GUI front-ends KGpg and Kleopatra. Kleopatra is slightly easier to use than KGpg, but they’re much of a muchness. The Enigmail extension I use in Thunderbird also uses GnuPG.

KAlarm is a handy KDE utility to produce sounds or pop-up reminder messages, or issue commands, at specific times or time intervals. The GUI is easy to use and KAlarm can be used in many cases as an alternative to setting up a cronjob. It was simple to configure it as a talking clock (see Setting up a talking clock easily in Linux).

AutoKey is a macro utility I use frequently. It can be used in a number of ways, but I use it to insert text in documents and e-mails. For example, I have configured AutoKey to insert the output of the Linux date command where my cursor is in an open document or e-mail if I press Ctrl-Alt-D: Sun Jul 22 14:41:25 BST 2012. For another example, I have configured AutoKey to enter my full postal address when I type “adr” and press the Space key (but puts it back to “adr” if I press the Backspace key). It is a very handy utility and can be configured to execute simple or complex scripts.

Easystroke is the mouse equivalent of AutoKey. For example, I have configured Easystroke to type “———- Original Message ———-” when I press the mouse scroll wheel and move the mouse pointer diagonally from left to right on the screen. As another example, I have configured it to launch an instance of DavMail to access a specific company’s OWA Exchange Server when I trace the first letter of the company’s name on the screen with the mouse cursor. It’s a clever utility!

BasKet Note Pads is a KDE application for recording and reading notes. The notes can be simple text or complex with embedded pictures, hyperlinks and so on. I switched to BasKet from Tomboy as the latter is a GNOME application and requires some GNOME-specific packages that I didn’t want cluttering up my hard disk. However, I can’t say I like BasKet: I miss the simplicity and easy-to-use UI of Tomboy which was a pleasure to use. I think I may have to try another KDE application (KJots) instead of BasKet, as it may fit my needs better.

KRename is a batch file renamer for KDE that has come in handy both at work and at home.

Filelight is a KDE utility that shows you graphically how much of each partition is occupied and how much is free. I like it because it makes it easy for me to see at a glance how much disk space I have left.

JDiskReport is another utility for showing you disk occupancy graphically. You can select pie carts, segment charts or bar charts. It is freeware but not open-source, but is nevertheless a nice utility to have in your set of tools.

Antivirus software

BitDefender Antivirus for Unices

Snapshot 9 - BitDefender Antivirus for Unices

As I run some Windows applications under WINE, and as I dual boot with Windows 7, I use both BitDefender Antivirus Scanner for Unices and ClamTk, the GUI front-end to ClamAV. That way I can scan my Windows directories from Linux. My work colleagues sometimes pass work files to me on USB pen drives, and I use these two anti virus utilities to scan the pen drives just to be a bit safer. Yes, it has flagged the occasional malware in Windows files.

Games

Games

Snapshot 10 - Games

I hardly ever play games, but still installed the entire KDE Games suite (you never know, after all!). Of the KDE games, I play KPatience, KCheckers, KBlocks (a Tetris clone), KBreakOut (takes me back to playing BreakOut written in Applesoft BASIC on an Apple II+!) and KMahjongg, a solitaire game using beautifully rendered Mahjong tiles.

I have also installed a few non-KDE arcade games such as Missile Command and Pacman Arena (nicely done in 3D). I loved Pac-Mania on my Acorn Archimedes in the early 1990s, so I also use SDLMame and its GUI front-end GMameUI to play Pac-Mania and a few other old favourites such as Frogger.

As far as chess is concerned, I installed the 3D DreamChess, as well as the older but perfectly decent XBoard and eboard.

Scrabble and Boggle are popular games in my family, so I installed XScrabble and GBoggle, the latter being one of only a handful of the packages mentioned in this article that I had to install outside the Portage package manager because there is no ebuild (another being the commercial game Machinarium, which is available for Linux, beautiful and I recommend highly).

I occasionally play TORCS, which is not bad for a car racing game.

There are a lot more Linux games to discover, if you’re that way inclined.

Summary

I’ve just scratched the surface, but hopefully have given you a taste of how I use KDE (and Linux). Of course my needs and uses are different from everyone else’s, but I hope this and the previous article have shown you the breadth of KDE and Linux applications, and that they are completely viable on the desktop. If you have not tried KDE yet, I hope this has tempted you. And, if you’re new to Linux, I hope this has tempted you to try Linux too.

A guided tour of my KDE 4.8.4 desktop (Part 1)

I have used GNOME, LXDE, Xfce and others, but KDE is my favourite desktop environment and I’ve used every release since 3.5.2. Although there are a few things that still need improving, by and large I find KDE to be an excellent desktop environment with every feature and facility I need, and highly configurable. It is the only desktop environment I choose to use professionally (I virtually never have to touch Windows at work, although I can dual boot Windows 7 on my laptop just in case I come across an application that only runs in Windows), and it is the main Linux desktop environment I use at home, although from time to time at home I use Xfce on another laptop, Android 3.2 on my Motorola Xoom tablet and Windows Vista on the family PC. I can honestly say that Windows Vista and Windows 7 feel clunky and old fashioned to me after using KDE, not to mention less easy on the eye.

All but one of my work colleagues use Windows or Mac OS X, and they notice the KDE desktop on my laptop and ask questions about it. So I thought I’d provide a guided tour of the KDE desktop on my laptop, as it might be of interest to newcomers to Linux or to Linux users contemplating trying KDE. There is too much to show in one or even two articles, but I thought I’d at least cover some of the main features in a couple of articles. So here is the first installment…

KDM greeter screen

The KDM Greeter screen (log-in screen) is the first KDE screen to appear, and it follows the framebuffer console decoration (‘bootsplash’) displayed after I select Linux from the GRUB 2 bootloader menu. I chose a simple KDM log-in screen called gentoo-linux-kde that I downloaded from the openDesktop.org Web site.

KDM Greeter screen

Snapshot 1 - KDM Greeter screen

Incidentally, if you’re wondering how I made a snapshot of the KDM log-in screen, I used a tip by Todd Partridge and added the following command to the file /usr/share/config/kdm/Xsetup and restarted my machine:

sleep 10 && import -window root /tmp/kdm.png &

KDE Splash Screen

The KSplash screen is displayed briefly after log-in. I chose the Air and Ariya Splash Screen, one of the splash screens that comes with KDE 4.8.4 and is selected via System Settings > Workspace Appearance.

KDE Splash Screen

Snapshot 2 - KDE Splash Screen

If you’re wondering how I made that screenshot, System Settings > Workspace Appearance has a ‘Test Theme’ button. I just clicked on that and pressed the Prt Sc key on my keyboard to capture it with the KSnapshot utility, which I had previously linked to the Prt Sc key by using System Settings > Shortcuts and Gestures.

My desktop

The five icons on KSplash pop up one by one and the KDE desktop itself then appears. I’m using the Air desktop theme with Oxygen windows decorations, Oxygen icon set, Oxygen Black cursor theme, Oxygen widget style and DejaVu Sans 8 fonts.

KDE desktop

Snapshot 3 - KDE desktop

I tend to change the wallpaper quite often, but the rest has been the same for I can’t remember how long. This wallpaper is a poster image of beautiful Chinese actress Ziyi Zhang (who doesn’t really have blue eyes) in Memoirs of a Geisha.

In KDE the number of Panels (‘task bars’, in Windows parlance) and their dimensions and position are up to the user, but I prefer to have only one Panel, and I prefer it to be situated at the bottom of the desktop. I suppose I’m traditional that way.

Everything you see on my desktop is a KDE Plasmoid (also known as a ‘Plasma widget’), and there are many KDE widgets to chose from, both bundled with KDE and available for download from the Web. Some excellent widgets have been developed by individuals who have nothing to do with the KDE development team. The positioning of widgets, be it on the desktop itself or on the Panel, is entirely up to the user. In fact, there is nothing stopping you from having mutliple instances of the same widget. For example you could have two instances of the Comic Strip widget, each showing a different comic strip.

The only widgets I want on the desktop itself are, clockwise from top left:

Folder View

I use the Folder View widget to view the icons in my ~/Desktop directory. This is perhaps one of the most confusing concepts for Windows users to grasp, and also confused a lot of KDE 3 users (me included). On a traditional desktop the user can place icons for applications, directories (folders), files and shortcuts. In KDE 4, if you wish, the icons in the ~/Desktop directory can be shown in a Folder View widget on the desktop instead of on the desktop itself. Initially I preferred the traditional way, but I finally came to like using a Folder View widget to show the contents of my ~/Desktop directory on my desktop. The width and height of a Folder View widget are user-configurable, so I can keep it out of the way of the wallpaper image yet still easily access my most commonly used applications, scripts, directories and files. The widget automatically adds scroll bars when you resize it.

Folder View widget

Snapshot 4 - Folder View widget

Folder View widget showing tooltip

Snapshot 5 - Folder View widget showing tooltip

By the way, you can see above that I have Microsoft Office 2007 installed on my machine. It runs under WINE (see my earlier article WINE tips: Giving each Windows application its own environment for how I installed Office 2007). I use LibreOffice too, but have found that Office 2007 does some things better. Those three Office 2007 icons in my ~/Desktop directory launch Bash scripts that set up the WINEPREFIX and WINEARCH environment variables and issue the WINE command to launch the relevant Office 2007 application.

Folder View also allows the user to preview the contents of directories and sub-directories, so you can drill down very quickly into nested directories without clicking.

Folder View widget viewing directory contents

Snapshot 6 - Folder View widget viewing directory contents

Note that you can have as many Folder View widgets as you want on your desktop, and they can be used to view any directory, not just the ~/Desktop directory.

Hardware Temperature

This widget displays the current reading of the two ACPI temperature sensors in my laptop, both as trend graphs and on dashboard-type dials.

Network Monitor

This widget displays trend graphs of throughput in KiB/s for network interfaces specified by the user. I choose to display both wired (eth0) and wireless (wlan0) network graphs.

yaWP

yaWP is an excellent weather widget with a lot of options. It is easily configurable for multiple locations, which is handy for my frequent travels.

My Panel

The widgets I added to the left end of my Panel are Lancelot Launcher, Takeoff Launcher, Pager (the four rectangles; more about that later) and Dictionary. The widgets I added to the right end of my Panel are: System Tray, Digital Clock and Wastebin. With the exception of Wastebin, all the icons shown on the right side of the Panel are inside the System Tray widget. Additionally, I placed the Icon-Only Task Manager widget in the middle of the Panel, to display an icon for each running application (file manager, browser, and so on), be it maximised or minimised.

An application launcher is a common feature of any Desktop Environment, and a number of launchers are available for KDE. The standard launcher is Kickoff, which originated in openSUSE. Naturally it is also a widget and, as with any widget, can be placed anywhere on the Panel or on the desktop itself (or both, if you feel like it!). Although I find the Kickoff launcher good, I prefer another launcher: Lancelot. I placed the Lancelot widget on the left side of the Panel, and configured it to use the Genxigen KDE menu icon. A click on the icon reveals Lancelot’s intuitive menu:

Lancelot Launcher

Snapshot 7 - Lancelot Launcher

The three System Actions buttons along the bottom of the Lancelot launcher pane are configurable. I have configured them to be Lock Session, Leave and Switch User. Clicking on Leave displays a menu with buttons Log Out, Reboot, Shut Down, Suspend to Disk and Suspend to RAM. A nice feature is that you can configure KDE to display a sub-menu for Reboot that allows you to specify which of the entries in your GRUB 2 bootloader menu you wish to boot (see GRUB2/BURG Integration in KDE).

I used to have more widgets and icons on my Panel, to enable me to quickly launch the applications I use most frequently (Firefox, Konqueror, Thunderbird, Dolphin, KCharSelect, KWrite, KCalc and so on). However, the icons took up space on the Panel and reduced the space available to the Icon-Only Task Manager for displaying the icons of running applications. So I added a second launcher widget on my Panel: Takeoff Launcher, the icon next to the Lancelot widget’s icon. I downloaded a crisp SVG Gentoo icon to use as that launcher’s icon on the Panel. Takeoff Launcher is a full-blown launcher, but I only use its Favourites pane, to launch my most frequently used applications.

Takeoff Launcher

Snapshot 8 - Takeoff Launcher

Lancelot also has a Favourites pane, but Takeoff is easy to configure to have a large pane with big, widely-spaced icons, and it is therefore good for quickly launching my most-used applications. So the only application I have left on the Panel is the KDE dictionary widget:

Dictionary widget on my Panel

Snapshot 9 - Dictionary widget on my Panel

System Tray

System Tray on my Panel

Snapshot 10 - System Tray on my Panel

The System Tray widget is the ‘notification area’ and holds a number of applets and widgets. The KDE icons for Clipboard, Volume, Device Notifer, Network Management, Printer Applet, Notifications, KOrganizer Reminder daemon, Desktop Search File Indexing and Battery Monitor (some of which are themselves widgets) are monochrome. I don’t think it is a coincidence that they were made monochrome after Microsoft changed to monochrome icons in the notification area of Windows 7. I wish I could change those KDE icons, as I prefer coloured notification icons in a System Tray: I find coloured icons quicker to recognise and I also prefer coloured icons from an aesthetic point of view. The coloured icons you can see in my System Tray are, from left to right, Compiz Fusion Icon, Easystroke, AutoKey, BasKet Note Pads, KAlarm and Keyboard Layout (clicking on the flag allows me to switch to other keyboard layouts, each with its own flag). One of these days I’ll get rid of the Compiz Fusion Icon, as I rarely use Compiz anymore because KWin Desktop Effects are now a match for Compiz in most areas.

EDIT (July 16, 2012): I have just discovered that there is a way to change the System Tray icons: see How to Use Custom Tray Icons in KDE.

Notifications applet pop-up messages can be disabled, but I prefer to leave them enabled as they come in handy when I’m sending photos from my phone to my laptop via Bluetooth. Here is what a pop-up from the Notifications applet looks like when Yakuake is launched at start up:

Notifications applet

Snapshot 11 - Notifications widget

By the way, Yakuake is another cool KDE application. Pressing F12 toggles a slide-down/up terminal window:

Yakuake

Snapshot 12 - Yakuake slide-down window

System Settings

The main GUI configuration menu for KDE is System Settings, which I can launch from either launcher. This is used to configure account details, workspace and application appearance, file associations, shortcuts, hardware settings, applications to run at startup, and just about anything else you can think of. I never bother to use System Settings to configure printers, though, as I prefer to use the CUPS Management interface http://localhost:631/ in a browser window.

System Settings main window

Snapshot 13 - System Settings main window

The items in the System Settings menu depend on which KControl modules are installed. For example, I installed the UFW KControl Module (the package kcm-ufw) so there is an entry in System Settings for UFW.

Firewall - System Settings

Snapshot 14 - Firewall - System Settings

One of the other configuration menus in System Settings is Desktop Effects, to configure the 3D and compositing effects that the KWin window manager provides. For screenshots of some of the effects see my earlier article Pimping my Desktop: have KWin Desktop Effects improved in KDE 4.6.2?

UFW KControl Module

Snapshot 15 - Desktop Effects - System Settings

Some people derisively call these effects ‘eye candy’ or ‘wobbly windows’ (the latter being one of the available effects) but I find some of them useful. The Desktop Cube (Ctrl-F11) and windows transparency (Alt + mouse scroll wheel) are two that I often use at work. Being able to place open windows on different faces of the cube, and flip quickly between them either with a mouse click, mouse wheel scroll or keyboard shortcut is handy. And sometimes I need to refer to text in a window underneath the one I’m typing in, and being able to make the latter transparent or semi-transparent quickly just to check something is also handy. Wobbly windows themselves are pure eye candy, but cool nonetheless. I’m so used to wobbly windows that I miss the effect if using another machine without it.

KWin Desktop Cube

Snapshot 16 - KWin Desktop Cube

I have configured the Pager widget to display the four virtual desktops (cube faces) as a row of four rectangles on the Panel, and I can click on any of the four rectangles to rotate the cube to the relevant virtual desktop (cube face). I have also configured the Pager’s keyboard shortcuts so that Ctrl-Alt- and Ctrl-Alt- rotate the cube left and right, respectively (see Switching from Compiz to the KDE Native Composite Engine).

Selecting Plasmoids (widgets)

Adding widgets to a Panel or to the desktop is easy. There is a small Tool Box icon in the top right of the desktop. Because of its shape, this icon is often called ‘the cashew’.

Tool Box ('the cashew')

Snapshot 17 - Tool Box ('the cashew')

You just click on it, select ‘Unlock Widgets’ then ‘Add Widgets’ (right-clicking on the desktop allows you to select ‘Add Widgets’ too), and a scrollable menu bar with widgets appears above the Panel:

Widgets menu

Snapshot 18 - Widgets menu

You can then select the widget you want and drag it to a place on the Panel or on the desktop itself. A ‘Get New Widgets…’ button allows you to search for, select and download other widgets from the Web or to install a new widget from a local file you downloaded earlier.

While ‘Unlock Widgets’ is selected there is also a cashew icon (‘Panel Tool Box’) at the right end of the Panel. If you click on that a menu pops up to allow you to configure the Panel itself (position, length, height, auto-hide, spacers and so on).

Activities

Activities are another unique KDE feature, and probably the least understood and least used of all KDE features. If you select Activities in the cashew menu (see Snapshot 17) or in the Widgets menu (see Snapshot 18), a new menu pops up:

Activities config menu

Snapshot 19 - Activities menu

Apart from my existing ‘Desktop’ activity (my normal environment with its four virtual desktops), I have three template activities titled ‘Search and Launch’, ‘Photos Activity’ and ‘Desktop Icons’. I could delete any or all of those or customise them as I wish (I could also click on the ‘Create Activity’ button to create further activities). For example, if I click on the ‘Photos Activity’ icon, I see the following desktop, which I could go on to customise by adding widgets and wallpaper that are unique to this activity.

an Activity

Snapshot 20 - an Activity

To see a screencast of Activities in action, check out ChaniBlog post Activities in Action. To read more about KDE Activities, see The Mystery of KDE Activities.

To be honest, I’m not particularly interested in using Activities, as I find the traditional virtual desktops in KDE adequate for my purposes. But I can see that Activities might have their uses. You can read some comments on the current state of Activities design, and suggestions to improve it, in the article Nine Ways to Make KDE Activities More Useful.

Docks

Mac OS X has made the dock concept popular, and there are a number of dock widgets specifically for KDE, such as Daisy. Cairo Dock is not specifically designed for KDE but works well in KDE. As you can see from the snapshot below, I installed it. To be honest, though, I never use it, as Lancelot Launcher, Takeoff Launcher, Folder View and the Panel do everything I want and more.

Cairo Dock

Snapshot 21 - Cairo Dock

Desktop Search

‘Desktop Search’ is one of the entries in System Settings. If I double-click on that entry I can then enable or disable Nepomuk Semantic Desktop (tagging and rating of files), Nepomuk File Indexer (searching of files by content instead of just by name) and E-mail Indexing (full text search in e-mails and their attachments).

If I click on the ‘Desktop Search File Indexing’ icon in the System Tray (the icon to the left of the Keyboard Layouts icon in Snapshot 11) then the following window pops-up, telling me the status of file indexing:

Nepomuk

Snapshot 22 - Nepomuk

To give you an example of how I use Desktop Search, I was looking for a MIDI file of The Monkees’ ‘I’m A Believer’ that I saved a long time ago. I can press Alt-F2 to launch KRunner, and enter a search string:

Searching via KRunner

Snapshot 23 - Searching via KRunner

or I can click on the Lancelot Launcher icon and enter the search string there:

Searching via Lancelot

Snapshot 24 - Searching via Lancelot

Either way, clicking on the file they find launches KMid, the KDE MIDI file player:

Searching via Lancelot

Snapshot 25 - KMid

By the way, both KRunner and Lancelot will accept commands as well as file names.

File Managers

Dolphin file manager

Snapshot 26 - Dolphin file manager

Dolphin is the default file manager in KDE. It has a raft of features and is very easy to use. Features have been added to Dolphin in each KDE release, and it is now a powerful file manager. Other KDE file managers I use frequently are Krusader and Konqueror, the latter also a Web browser that I have found will sometimes display Web pages that Firefox cannot (I installed the kwebkitpart package and configured Konqueror to use the WebKit rendering engine by default rather than the KHTML rendering engine). Konqueror is not so popular since the advent of Dolphin, but I use it quite often as it has several strings to its bow.

Konqueror and Dolphin can use KIO Slaves (in Gentoo these are available by installing the packages kdebase-kioslaves, kdemultimedia-kioslaves and kio-sysinfo), which provide additional functionality. One of the KIO Slaves for Konqueror is sysinfo:/, which I have bookmarked to save typing it in the address bar:

Konqueror using sysinfo:/

Snapshot 27 - Konqueror using sysinfo:/

For more detailed system information, I select System > KInfoCenter from the Lancelot menu, or enter the command kinfocenter in KRunner or in the input field of Lancelot or in a terminal window (you are spoilt for choice in Linux!).

Applications and Tools I use

If you’re wondering what I used to capture the images for this article, apart from the ImageMagick import command to capture the KDM Greeter screen, I used KSnapshot:

KSnapshot

Snapshot 28 - KSnapshot


And, after installing the package media-gfx/scrot, I used the following command in a Konsole window to take the above snapshot of the KSnapshot window:

$ scrot -d 6 -b -s snapshot.png

Coming in Part 2…

In my next article I’ll show you a few of the other applications and tools – both KDE and non-KDE – that I use regularly in KDE on my laptop.

Synchronise your Gentoo Linux clock with an Internet time server

There are a number of ways to synchronise Gentoo Linux with a time server on the Internet. Here I look at a few alternatives.

ntp-client

ntp-client and the NTP daemon ntpd are installed when you install the package net-misc/ntp. Although I have read on some Web sites that /etc/init.d/ntp-client should be added to the default runlevel in order to read the time from an NTP server (once-only, during start-up), this in fact does not work because usually the network connection is not up by the time the ntp-client initscript runs. Bear in mind that ntp-client does not run continuously; it syncs once with an external time server if there is a network connection, and that’s it.

NetworkManager Dispatcher

If you are using NetworkManager, an elegant solution is to use NetworkManagerDispatcher to restart ntp-client in order to resync your system clock every time a network connection comes up. This is my favoured solution for laptops; see further on for how to configure your machine to do this.

cronjob

Another way would be to create a cronjob to run periodically the ‘/etc/init.d/ntp-client restart‘ command or the ‘ntpd -q‘ command (the -q option means “set the time and quit”).

Wait a while after start up

A ‘quick-and-dirty’ method, which I have used sometimes to synchronise a laptop’s system clock every time it boots, would be to delay running ntp-client until the network is up by putting e.g. the command below in a file 10_ntp-client.start in the directory /etc/local.d/ (10 seconds is usually enough time for a wired or wireless connection to my home network to be established):

#!/bin/bash
sleep 10s && /etc/init.d/ntp-client restart

Don’t forget to make it executable:

# chmod 744 /etc/local.d/10_ntp-client.start

NTP daemon

Regarding the NTP daemon, it is possible to configure this from the command line, rather than via a Desktop Environment GUI, to run at start-up and continue running to adjust your system clock. The command:

# rc-update add ntpd default

will add the daemon’s initscript to the default runlevel so that it is launched automatically at the next startup, and the command:

# /etc/init.d/ntpd start

will start the daemon running right now.

Note that, by default, the NTP daemon won’t correct, all in one go, a time difference between your system clock and the remote NTP server if that difference is above a certain size. However, if you want to override the default behaviour, i.e. allow the NTP daemon to make a large first adjustment to the system clock, you can set the environment variable NTPD_OPTS in the file /etc/conf.d/ntpd as follows:

NTPD_OPTS="-g"
# The -g option enables ntpd to make large adjustments.

This would mean that you would not need to run ntp-client before ntpd. However, if you run ntp-client automatically — either once after start-up or periodically — then that would be good enough for the typical Desktop user, and could be an alternative to having a continuously-running NTP daemon. Nothing stops you doing both if you want, of course.

Updating the hardware clock

If you make clock_systohc="YES" in the file /etc/conf.d/hwclock then the time in the system clock will be written to the BIOS (CMOS) clock (a.k.a. hardware clock) when you shut down your PC.

How to configure NetworkManager Dispatcher to synchronise the system clock only when a network connection is made

If you’re using a machine that is permanently connected to a network, running the NTP daemon makes sense. But what if you have a machine that is not always connected to a network when it is powered up? I have a laptop and I don’t want the NTP daemon running all the time. But I would like my laptop to synchronise with an external time server once after start up when I connect to the Internet. NetworkManager has a handy tool called NetworkManager Dispatcher for doing just this.

If you have installed NetworkManager, you’ll find there is an initscript /usr/portage/net-misc/networkmanager/files/NetworkManagerDispatcher. Copy it to the directory /etc/init.d/ and give it the necessary restrictive permissions:

# cp /usr/portage/net-misc/networkmanager/files/NetworkManagerDispatcher /etc/init.d/
# chmod 744 NetworkManagerDispatcher

Then create a shell script called e.g. 99_ntp-client in the directory /etc/NetworkManager/dispatcher.d/ to be run by NetworkManagerDispatcher when a network connection is established, containing the following code:

#!/bin/bash

INTERFACE=$1 # The interface which is brought up or down
STATUS=$2 # The new state of the interface

case "$STATUS" in
    'up') # $INTERFACE is up
        echo "System time before starting ntp-client:" > /home/fitzcarraldo/ntp-client.txt
        date >> /home/fitzcarraldo/ntp-client.txt
        echo "Starting ntp-client:" >> /home/fitzcarraldo/ntp-client.txt
        rc-config restart ntp-client &>> /home/fitzcarraldo/ntp-client.txt
        echo "System time after starting ntp-client:" >> /home/fitzcarraldo/ntp-client.txt
        date >> /home/fitzcarraldo/ntp-client.txt
        ;;
    'down') # $INTERFACE is down
        # Check for active interface and down if no one active
        if [ ! `nm-tool|grep State|cut -f2 -d' '` = "connected" ]; then
                echo "Stopping ntp-client at:" > /home/fitzcarraldo/ntp-client.txt
                date >> /home/fitzcarraldo/ntp-client.txt
                rc-config stop ntp-client &>> /home/fitzcarraldo/ntp-client.txt
        fi
        ;;
esac

Make the root user the owner of the script, and only allow the root user to write to it and execute it:

# cd /etc/NetworkManager/dispatcher.d/
# chown root:root 99_ntp-client
# chmod 744 99_ntp-client

Then add NetworkManagerDispatcher to the default runlevel so that it will be launched every time you boot your machine:

# rc-update add NetworkManagerDispatcher default

As the package net-misc/ntp installs both /etc/init.d/ntpd and /etc/init.d/net-client, users could optionally add the NTP daemon ntpd to the default runlevel too if desired, which would provide continuous, incremental adjustments to the system clock once net-client has done its one-shot adjustment each time a network comes up:

# rc-update add ntpd default

But users who don’t leave their PCs on for days on end — or who use laptops — can ignore the above step and just stick with the NetworkManagerDispatcher and net-client solution, whereas users who leave their machines on for days or weeks on end can also use the NTP daemon to keep the system clock in sync in between the times when ntp-client has synchronised.

Don’t forget to delete ntp-client from the start-up level if you are using NetworkManagerDispatcher to run it:

# rc-update del ntp-client

Notice that the script /etc/NetworkManager/dispatcher.d/99_ntp-client logs some information in a text file ntp-client.txt in my home directory which I can check. Here is an example of what ntp-client.txt contains after I select a network (or it is selected automatically) following start up of my laptop:

System time before starting ntp-client:
Sun Jun 3 19:24:08 BST 2012
Starting ntp-client:
Restarting init script
* Setting clock via the NTP client 'ntpd' ...ntpd: time slew +0.067178s
[ ok ]
System time after starting ntp-client:
Sun Jun 3 19:24:17 BST 2012

As you can see above, the ntpd command was executed once by NetworkManagerDispatcher and made a small adjustment to the system time on my laptop.

Replacing ntpdate with ntpd in ntp-client

Just for the fun of it, I changed /etc/conf.d/ntp-client to use the command ntpd instead of ntpdate, even though the ntpdate command works fine. Anyway, here’s my /etc/conf.d/ntp-client file these days:

NTPCLIENT_CMD="ntpd"
NTPCLIENT_OPTS="-g -q"

I have added the -g option so that the ntpd command can make large adjustments to the system time if it is way off the actual time. This is useful at the beginning and end of Daylight Saving Time, or if you dual boot with Windows. Here is an example of the former when I powered up my laptop the morning after the clocks changed from BST to GMT at the end of Summer 2010:

$ cat /home/fitzcarraldo/ntp-client.txt
System time before starting ntp-client:
Sun Oct 31 09:37:23 GMT 2010
Starting ntp-client:
Starting init script
* Setting clock via the NTP client 'ntpd'...ntpd: time set -3600.122381s
[ ok ]
System time after starting ntp-client:
Sun Oct 31 08:37:30 GMT 2010

You can specify the NTP server or NTP server pool in the file /etc/ntp.conf, but the default server pool already specified in that file should work. Note again that, when ntpd is run with the -q option, it synchronises the system clock once and terminates, i.e. it is not running as a daemon.

Getting the integrated fingerprint reader on my laptop to work in Linux

My Compal NBLB2 laptop has a built-in Upek TCS5B fingerprint scanner:

$ lsusb | grep -i upek
Bus 002 Device 003: ID 147e:1001 Upek

I’m running 64-bit multilib Gentoo Linux with KDE 4.8.1 on this laptop. I decided it was about time I got the built-in fingerprint scanner/sensor working.

The FOSS application Fingerprint GUI caters for this model of fingerprint reader, as well as several other models: see the application’s Home Page (Ref. 1 at the end of this post) for a list of the models supported.

The Gentoo Bugzilla has a bug report (Ref. 2) that I found very helpful (my thanks, in particular, go to Jan Buecken), but the ebuilds in it were not for the latest version of Fingerprint GUI, which is 1.04 as I write this. The required packages are sys-auth/fingerprint-gui and sys-auth/upekbsapi-bin. So I had to modify a little the ebuilds from the Gentoo Bugzilla, and I installed the packages using a Portage local overlay as explained below (/etc/make.conf had already been edited accordingly and /usr/local/portage/profiles/repo_name had already been created).

1. First I created the local overlay directories for the two packages:

# mkdir -p /usr/local/portage/sys-auth/fingerprint-gui
# mkdir -p /usr/local/portage/sys-auth/upekbsapi-bin

2. Then I edited the fingerprint-gui-1.03 ebuild from Ref. 2 to create the file /usr/local/portage/sys-auth/fingerprint-gui/fingerprint-gui-1.04.ebuild containing:

# Copyright 1999-2011 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=3

inherit qt4-r2 versionator

MAKEOPTS="$MAKEOPTS -j1"

MY_PV=$(replace_version_separator 2 -)
DESCRIPTION="Use Fingerprint Devices with Linux"
HOMEPAGE="http://www.n-view.net/Appliance/fingerprint/"
SRC_URI="http://www.n-view.net/Appliance/fingerprint/download/${PN}-${MY_PV}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~amd64"
IUSE="upekbsapi"

DEPEND=">=sys-auth/libfprint-0.1.0_pre2
|| ( ( x11-libs/qt-core:4 x11-libs/qt-gui ) x11-libs/qt:4 )
>=app-crypt/qca-2.0.0
>=app-crypt/qca-ossl-2.0.0_beta3
x11-libs/libfakekey
>=dev-libs/libusb-1.0.0
sys-auth/polkit-qt
sys-libs/pam
!sys-auth/pam_fprint
!sys-auth/fprintd
!sys-auth/thinkfinger
"
RDEPEND="${DEPEND}
upekbsapi? ( sys-auth/upekbsapi-bin[headers] )"

S=${WORKDIR}/${PN}-${MY_PV}

src_configure() {
if has_version '>=sys-auth/polkit-qt-0.99.0'; then
eqmake4 LIBPOLKIT_QT=LIBPOLKIT_QT_1_1 || die "qmake4 failed"
else
eqmake4 || die "qmake4 failed"
fi
}

src_install() {
emake INSTALL_ROOT="${D}" DESTDIR="${D}" install || die "emake install failed"

domenu bin/fingerprint-gui/fingerprint-gui.desktop

dodoc CHANGELOG README COPYING\
doc/*.html\
doc/*.png
}

pkg_postinst() {
elog "1) Please see /usr/share/doc/${P}/Install-step-by-step.html to configure your device."
elog "   A fast (not recommended) way to use fingerprint-gui with your pam based application"
elog "   you can add the following line to the first off /etc/pam.d/system-auth"
elog "   auth        sufficient  pam_fingerprint-gui.so"
elog "   For more security we recommend that you don't enable fingerprint-gui authentication for all pam services."
elog "   See Install-step-by-step.html again."
elog "2) You must be in the plugdev group to use fingerprint"
if use upekbsapi; then
elog "3) You select to install upeks bsapi library, it's not open-sourced. Use it on your own risk."
fi
}

3. I edited the upekbsapi-bin-3.5.2.ebuild from Ref. 2 to create the file /usr/local/portage/sys-auth/upekbsapi-bin/upekbsapi-bin-3.5.2.ebuild containing:

# Copyright 1999-2010 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

EAPI=3

FP_GUI=fingerprint-gui-1.04
MY_PN=${PN/bsapi-bin/}
DESCRIPTION="UPEK Biometric Services SDK for PC"
HOMEPAGE="http://www.upek.com/solutions/eikon/default.asp"
SRC_URI="http://www.n-view.net/Appliance/fingerprint/download/${FP_GUI}.tar.gz"

LICENSE="EULA"
SLOT="0"
KEYWORDS="~x86 ~amd64"
IUSE="-headers"

DEPEND=""
RDEPEND="${DEPEND}"

S=${FP_GUI}/${MY_PN}

src_unpack() {
unpack ${FP_GUI}.tar.gz
}

src_install() {
cd "${S}"/
dodoc Readme.pdf releasenotes.txt UPEK_EULA.pdf
if use headers; then
dodoc doc/BSAPI.pdf  doc/BSAPIUsageonLinux.pdf
insinto /usr/include
doins include/bsapi.h
doins include/bserror.h
doins include/bstypes.h
fi
if use x86; then
dolib lib/libbsapi.so
elif use amd64; then
dolib lib64/libbsapi.so
fi
insinto /etc/udev/rules.d
doins 91-fingerprint-gui-upek.rules
dodir /var/${MY_PN}_data
fperms 777 /var/${MY_PN}_data
echo "nvmprefix=\"/var/${MY_PN}_data/.NVM\" dualswipe=0" > ${MY_PN}.cfg
insinto /etc
doins ${MY_PN}.cfg
}

4. Then I entered the following commands to create manifests for the two packages and to merge (install) them:

# cd /usr/local/portage/sys-auth/upekbsapi-bin
# ebuild upekbsapi-bin-3.5.2.ebuild manifest
# cd /usr/local/portage/sys-auth/fingerprint-gui
# ebuild fingerprint-gui-1.04.ebuild manifest
# USE="headers" emerge -1v upekbsapi-bin
# USE="upekbsapi" emerge -1v fingerprint-gui

5. The file /etc/pam.d/system-auth on my laptop contained the following lines:

auth            required        pam_env.so
auth            required        pam_unix.so try_first_pass likeauth nullok
auth            optional        pam_permit.so

account         required        pam_unix.so
account         optional        pam_permit.so

password        required        pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password        required        pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password        optional        pam_permit.so

session         required        pam_limits.so
session         required        pam_env.so
session         required        pam_unix.so
session         optional        pam_permit.so

and I edited it to be as follows:

auth            required        pam_env.so
auth            sufficient      pam_fingerprint-gui.so -d try_first_identified
auth            required        pam_unix.so try_first_pass likeauth nullok
auth            optional        pam_permit.so

account         required        pam_unix.so
account         optional        pam_permit.so

password        required        pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password        required        pam_unix.so try_first_pass use_authtok nullok sha512 shadow
password        optional        pam_permit.so

session         required        pam_limits.so
session         required        pam_env.so
session         required        pam_unix.so
session         optional        pam_permit.so

6. The UPEK fingerprint scanner on my laptop is Device 003 on USB Bus 002:

# lsusb | grep -i upek
Bus 002 Device 003: ID 147e:1001 Upek

As you can see below, the device is correctly a member of the plugdev group:

# ls -la /dev/bus/usb/002
total 0
drwxr-xr-x 2 root root 120 Mar 20 15:31 .
drwxr-xr-x 4 root root 80 Mar 20 15:31 ..
crw-rw-r-- 1 root usb 189, 128 Mar 20 15:31 001
crw-rw-r-- 1 root usb 189, 129 Mar 20 15:31 002
crw-rw-r-- 1 root plugdev 189, 130 Mar 20 17:37 003
crw-rw-r-- 1 root usb 189, 131 Mar 20 15:31 004

and my user account is a member of the plugdev group too:

$ groups
disk lp wheel floppy uucp cron audio cdrom dialout video games cdrw usb users kismet clamav haldaemon plugdev scanner pulse-access pulse-rt pulse kvm crontab vboxusers polkituser

7. I don’t think it was necessary to do, but I changed the file permissions to make sure all the devices on Bus 002 were completely accessible:

# chmod 777 /dev/bus/usb/002 -R
# ls -la /dev/bus/usb/002
total 0
drwxrwxrwx 2 root root 120 Mar 20 15:31 .
drwxr-xr-x 4 root root 80 Mar 20 15:31 ..
crwxrwxrwx 1 root usb 189, 128 Mar 20 15:31 001
crwxrwxrwx 1 root usb 189, 129 Mar 20 15:31 002
crwxrwxrwx 1 root plugdev 189, 130 Mar 20 17:37 003
crwxrwxrwx 1 root usb 189, 131 Mar 20 15:31 004

When I reboot, the file permissions revert to those shown in Step 6 above anyway.

8. Two udev rules files were created when I installed the packages:

# locate fingerprint | grep rule
/etc/udev/rules.d/91-fingerprint-gui-upek.rules
/lib64/udev/rules.d/91-fingerprint-gui-upek.rules

The file /etc/udev/rules.d/91-fingerprint-gui-upek.rules contained the following:

# udev rules for fingerprint-gui (libbsapi)

# set permissions
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="201[56]",   SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="201[56]",   SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="100[0123]", SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="300[01]",   SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="500[23]",   SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"

# enable power saving
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="201[56]",   ATTR{power/control}=="*", ATTR{power/control}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="201[56]",   ATTR{power/control}=="*", ATTR{power/control}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="100[0123]", ATTR{power/control}=="*", ATTR{power/control}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="300[01]",   ATTR{power/control}=="*", ATTR{power/control}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="500[23]",   ATTR{power/control}=="*", ATTR{power/control}="auto"

The file /lib64/udev/rules.d/91-fingerprint-gui-upek.rules contained the following:

# udev rules for fingerprint-gui (libbsapi)

# set permissions
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="201[56]", SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="201[56]", SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="100[01]", SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="3000",    SYMLINK+="input/touchchip-%k", MODE="0664", GROUP="plugdev"

# enable power saving
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="201[56]", ATTR{power/level}=="*", ATTR{power/level}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="201[56]", ATTR{power/level}=="*", ATTR{power/level}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="100[01]", ATTR{power/level}=="*", ATTR{power/level}="auto"
ATTRS{idVendor}=="147e", ATTRS{idProduct}=="3000",    ATTR{power/level}=="*", ATTR{power/level}="auto"

9. After reading a post in the Fingerprint GUI Forum (see quote further on) I decided to delete a file in /var/upek_data/ but, in retrospect, I’m not sure it was necessary, and, in any case, the file was subsequently recreated (perhaps when I reinstalled the packages?) and apparently has no adverse effect at present:

# ls -la /var/upek_data/
# rm /var/upek_data/.NVMe3031dcc911668f65aaeb5209f4db5ad5be21fbdbc810ac101963da0bf952f9a.bin

I had decided to delete the file because I was seeing the error message “ABSOpen() failed -1057 (Fingerprint sensor device communication error.)” in the log file /var/log/messages, and a post in the Fingerprint GUI Forum suggested deleting the file:

> Setting up the NVM emulation caused fingerprintGUI not to directly display the error, but after a second or two. Auth.log now shows a different error.

Yes. This one:

ABSOpen() failed -1057 (Fingerprint sensor device communication error.)

In some cases I’ve seen that removing all *.bin files in /var/upek/ did help. Try it.

In other cases there was some other process which had held open the device (e.g. a virtual machine running Windows on that host).

W.U.

Wolfgang Ullrich
March 18th, 2010 10:06am

(The Fingerprint GUI Forum refers to error messages being in a log file /var/log/auth.log, but, in my case, they were in the log file /var/log/messages.)

10. Anyway, now when I press e.g. Ctrl-Alt-F2 to open a VT, as usual I see a login prompt:

meshedgedx login:

However, when I enter my username and press Enter, not only is the usual Password prompt displayed but some additional text is displayed below it:

meshedgedx login: fitzcarraldo
Password:
Fingerprint Login 1.04
Authenticating fitzcarraldo
Swipe your finger or type your password:

If I enter my password, I am logged in as usual. But if I instead swipe my finger on the fingerprint scanner, I am also logged in. Nice. :-)

11. If I open a Konsole window and enter any command using sudo, let’s say sudo whoami for example, I am prompted as usual for my user password but now a GUI widget (see image below) also pops up prompting me to swipe my finger over the fingerprint scanner. Either entering my password or swiping my finger will allow me to launch the command. Nice. :-)

Fingerprint GUI widget

12. The instructions in Ref. 3 say to launch fingerprint-gui using sudo to register a fingerprint for the root user (i.e. to enable you to use the fingerprint scanner in order to log in as root user from e.g. a Konsole/Terminal window). In fact I had to use the command kdesu fingerprint-gui to launch Fingerprint GUI and register a fingerprint to enable me to log-in as the root user either by entering the root user’s password as usual or by swiping my finger. Having done that, now when I enter the su command in a Konsole window I am prompted to enter the root user’s password as usual but am also prompted to swipe my finger instead if I want:

$ su
Password:
Fingerprint Login 1.04
Authenticating root
Swipe your finger or type your password:
OK
No protocol specified
No protocol specified
#
# whoami
root
#

Nice. :-)

By the way, this also means I can swipe my finger to log-in as root user via a VT.

According to the Fingerprint GUI Forum, the error messages “No protocol specified” shown above are confined to KDE. It is possible to avoid them by using an export command first:

$ export XAUTHORITY=~/.Xauthority
$ su
Password:
Fingerprint Login 1.04
Authenticating root
Swipe your finger or type your password:
OK
#
#

I simply added the export command to my ~/.bashrc file, and the problem is fixed.

13. My only problem now is with the kdesu command: I have to enter both the root user's password and swipe my finger to launch an application using kdesu. For example, if I enter the command kdesu kwrite in a Konsole window, I am first prompted by a KDE pop-up window to enter the root user's password as usual, and, once I have entered the password in that window, I am then prompted in the Konsole window to swipe my finger. I have to do both in order for the kdesu command to execute.

14. According to Ref. 1, a limitation in KDM means that it is not possible to use the fingerprint scanner to log-in to KDE (although no such limitation exists in the case of GDM: see Ref. 3 for details). However, I'm using KDM and KDE 4.8.1 and, as soon as I enter my user name on the KDM login page, the Fingerprint GUI window pops up prompting me to swipe a finger or type my login/password. If I do either then I am logged in to KDE. Nice. :-)

So, there you have it: Fingerprint GUI 1.04 + UPEK BSAPI SDK for Linux 3.5.2 + KDE 4.8.1 + Gentoo Linux + Upek TCS5B (147e:1001) fingerprint scanner are a working combination. Kudos to Wolfgang Ullrich for creating Fingerprint GUI (and the Web site to accompany it).

REFERENCES

1. Fingerprint GUI

2. Gentoo's Bugzilla – Bug Report No. 341105 – fingerprint-gui (new package)

3. Fingerprint GUI Step-by-Step Manual

4. Fingerprint GUI User's Manual

EDIT (May 23, 2012): An ebuild for Fingerprint GUI was added to the Portage main tree on May 21, 2012. It is not identical to the ebuild I posted here a couple of months ago but also installs version 1.04 of the utility, so try merging the package from the main Portage tree as that is an easier way to install it.

Follow

Get every new post delivered to your Inbox.

Join 25 other followers