I'd used Linux as my primary OS for five years prior to starting at Zend,
and have used a number of distros: SuSE, Mandrake (back when it was still
Mandrake), RedHat, Slackware, Debian, Gentoo, and Ubuntu have all been on
my machines at one point or another. I like Gentoo quite a lot, but it's a
pain on desktops, where you may be needing to upgrade more often than once
every few months or years. Debian-based distros are my favorite for desktop
machines, as the packaging mechanism is first-rate, and they tend to have
plenty of developer packages available. So, I decided to use Ubuntu again,
as I've heard great things about their installer since I last used it. I
chose the latest stable release, Edgy Eft; since Feisty Fawn is still
incubating, I didn't want to risk instability in my day-to-day work
environment as people finalize packages. On the other hand, I also wanted a
reasonably up-to-date system. Due to Ubuntu's dedication to a regular
release cycle, I figured that with Edgy Eft, I'd get the best of both
worlds.
I was not disappointed. I had a working desktop installed in someting like
30 minutes, with a single reboot -- and that was simply to go from the live
CD into the actual installed OS. Even better: the initial install recognized
all of my hardware immediately, including the built-in wireless
hardware, something I've never experienced before with any Linux OS.
That said, there were three minor issues I needed to correct:
- I was having issues compiling anything; every configure script I ran
ended up reporting shell escaping issues or other related errors.
- I have an IBM T43 Thinkpad laptop with a 'Trackpoint' mouse -- basically
a little joystick between the 'G' and 'H' keys that has mouse buttons just
below the space bar. On Windows, you can use the middle mouse button as a
wheel lock, allowing you to scroll with the mouse. This functionality was
not enabled in linux, and I wasn't sure how to enable it.
- Suspend and hibernate were acting, well, funky. Basically, recovery
never occurred completely, and I'd usually have no wireless access after
resuming.
- Unable to mute the microphone
I was able to find solutions for all three relatively easily, fortunately,
and I'm sharing the solutions below:
Compilation issues: shell escaping
I always compile apache and PHP by hand, as I can then control what I get
precisely. This is important as it allows me to have multiple versions of
PHP if I need them, each tuned to a different server. But as I tried to run
the configure script for either, I was getting an error indicating that sed
was not behaving properly due to the shell not escaping characters properly.
I did some research, and discovered some posts claiming that the version of
bash shipped with Ubuntu had a bug, and that the only recourse was upgrading
bash. Of course, there was not a new version in the repository, and I
couldn't compile a newer version due to the shell issues.
So, I decided to see if there were another shell I could symlink /bin/sh to
so I could recompile bash. And that's where the problem lay: /bin/sh was
symlinking to /bin/dash -- a stripped down shell used by debian and ubuntu.
When I symlinked it to /bin/bash instead, all the errors went away.
Summary: relink /bin/sh to /bin/bash if you need to compile programs on
Ubuntu.
Trackpoint usage
I found several sites dedicated to laptops on linux, and one dedicated to
thinkpads running linux. They were each suggesting that I'd need to (a)
recompile X.org, and/or (b) add a kernel level driver. Once those were done,
I'd be able to add some directives to my X configuration in order to have my
wheel button enabled.
I'm not sure where I found the directives, but I decided to simply try them
and restart X. Here they are:
# In /etc/X11/xorg.conf:
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
Option "CorePointer"
Option "Device" "/dev/input/mice"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "EmulateWheel" "on"
Option "EmulateWheelButton" "2"
Option "EmulateWheelInertia" "50"
Option "EmulateWheelTimeOut" "200"
Option "EmulateWheelClickToo" "true"
Option "YAxisMapping" "4 5"
Option "XAxisMapping" "6 7"
EndSection
With these settings in place, restart your X server (Ctrl-Alt-Backspace),
and you're in business. I found that this actually provided better
functionality than on Windows; I now can do all of:
- Use button two as a wheel lock, allowing vertical scrolling
-
- and also do horizontal scrolling (never could do that in
Windows)
- and use it as a middle mouse button, allowing me to paste in
X
Suspend and Hibernate
As I said earlier, each of these caused bizarre issues when I'd resume. The
little 'sleep' indicator would blink continually, the wireless adapter would
never work, and, if I tried to connect my vpn client, my machine would
freeze. And suspend never truly suspended the machine; it would turn off the
display, but the machine was still fully powered. It was a nightmare.
I remembered trying suspend2 last year, but with mixed results. I decided to
look into it some more, to see if te project has matured. I was disappointed
at first, because it looked like I'd need to build my own kernel, and I
didn't want to do anything that would potentially impinge on my ability to
work. And then I saw mention of a 'hibernate' program.
I did a quick search of the apt repositories, and saw that it was available:
$ apt-cache search hibernate
$ apt-get install hibernate
Once installed, I still had some configuration to do. GNOME has some
utilities for battery/power management that can initiate suspend and
hibernate, and GDM of course has them as well. However, they interact with
the acpid process. I needed to figure out how to get acpid to work with
hibernate.
This turned out to be pretty easy. First, replace /etc/acpi/sleep.sh with
the following:
#!/bin/sh
/usr/sbin/hibernate --config-file=/etc/hibernate/ram.conf
The, replace /etc/acpi/hibernate.sh and /etc/acpi/powerbtn.sh with:
#!/bin/bash
# Skip if we're in the middle of resuming
test -f /var/lock/acpisleep && exit 0
/usr/sbin/hibernate --config-file=/etc/hibernate/disk.conf
This was only half the issue, however; while I was truly suspending and
hibernating, and resuming, the wireless adapter was still not coming up by
itself.
hibernate comes with a number of configuration files. One is called
blacklisted-modules. I placed the following in it:
ath_pci
wlan_scan_sta
wlan
I needed to add some additional directies to /etc/hibernate/common.conf to
make this work, and to bring the adapter down and up:
# Unload and load modules from the blacklist. These were already set.
UnloadBlacklistedModules yes
LoadModules auto
# Bring down and restart networking:
DownInterfaces ath0
UpInterfaces ath0
This solved the issue of the wireless adapter very nicely.
There were also a few other /etc/hibernate/common.conf directives I changed
due to my machine's configuration:
# This is an IBM laptop, so turn this on:
IbmAcpi yes
# I use GNOME; lock the screen on resume:
LockGnomeScreenSaver yes
# I don't use vbe in my X configuration, so I turned these off:
EnableVbetool no
# And I wanted to display some messages:
Xstatus gnome
XSuspendText Preparing to suspend...
XResumeText Resuming from suspend...
One last issue remained. You may recall discussion of a VPN client earlier.
Well, I discovered that when I tried to fire it up after resuming from
suspend or hibernate, my machine would lock up. The way the VPN client works
is that a daemon is run at machine startup that loads a kernel module;
evidently, resuming from suspend caused some sort of issue with this.
Fortunately, hibernate has some directives for this, and I added this to
/etc/hibernate/common.conf:
StopServices vpnclient_init
StartServices vpnclient_init
StopServices stops a service located in /etc/init.d/ just prior to a suspend
or hibernate process; StartServices does the opposite. With these directives
in place, everything worked perfectly for me.
Muting the microphone
I use Skype regularly, and typically in meetings will mute the microphone
when others speak. I couldn't find a way to do this easily at first.
The solution is that you need to enable some extra properties of the volume
control.
First off, right click on the volume control applet in the system tray, and
select 'Open Volume Control'. Then select the 'Edit' menu item, and
'Preferences' under it. You want to select 'Capture' and 'Microphone
Capture'. After these are selected, close the dialog.
You'll now have a 'Capture' tab in the volume control applet. It shows a
pair of sliders marked 'Capture'; below it are some icons, one of which is a
microphone. To mute the microphone, click it; a red 'X' over it shows that
it's muted. Clicking it again unmutes the microphone.
Summary
I now have all the functionality of Windows, and then some. Plugging in my
flash drive loads it onto the desktop immediately, and also opens up a
Nautilus window with it. I have a full range of unix utilities available to
use for all of my documents. I've installed beagle, and have, arguably,
better desktop search than when using Google Desktop. Xbindkeys allows me to
create hot keys for launching common apps. I can use Gvim if I want to,
instead of vim, and still have access to a shell within it. The
mail-notification applet allows me to query my local maildir store as well
as gmail. I can use zenity with atd to create alarms for myself.
And apps run much faster, I'm finding. I've been plaing with Zend Studio,
which runs on Java, and it runs much more quickly than the Windows version
ever ran for me -- meaning I may actually give it more than a cursory try.
It's good to be back on linux!