Re-enable Ctrl-Alt-Backspace in Xorg

Sep 2, 2010

Create the following as /etc/hal/fdi/policy/30user/10-x11-zap.fdi:

<?xml version=“1.0” encoding=“UTF-8”?>
<deviceinfo version=“0.2”>
Default input configuration is defined in:
Settings here modify or override the default configuration.
See comment in the file above for more information.

To see the currently active hal input configuration
run lshal or hal-device(1m) and search for “input.x11*” keys.

Hal and X must be restarted for changes here to take any effect
<match key=“info.capabilities” contains=“input.keys”>
<merge key=“input.x11_options.XkbOptions” type=“string”>terminate:ctrl_alt_bksp</merge>

and then restart hald and Xorg.

Disabling that goddamn GTK bell

Sep 2, 2010

echo ‘gtk-error-bell = 0’ »$HOME/.gtkrc-2.0

Changing liferea keyboard shortcuts

Jan 31, 2010

Liferea has no keyboard shortcut editor itself, but “Toggle unread status” demands the wrist-breaking chord action of Control-U. It expects you to be able to edit the shortcuts via the editable menu feature of GTK+.

Unfortunately that’s disabled on all modern GNOME installs, and there’s no UI for re-enabling it. As usual, gconf-editor to the rescue. The key you need to change is /desktop/gnome/interface/can_change_accels. After re-starting Liferea, you can then edit via hovering over the menu item and pressing the combination. Of course, this in itself is buggy: if it clashes with a menu accelerator (as ‘r’ is), it will perform that action instead.

It’s simpler to directly edit the accels file in your Liferea dot dir.

Epson all-in-ones: avoid like the plague

Jan 26, 2010

Browsing the net, you might get the impression that Epson Stylus All-in-ones are well supported under Linux. Unfortunately this is not the case. The pipslite driver you have to install is extremely flaky, and Fedora SELinux doesn’t work properly with it. There’s no “draft” mode for some bizarre reason; printing is extremely slow and often randomly cancels half-printed jobs due to USB resets

The scanner doesn’t work at all with the iscan software, despite claims to the contrary.

Setting up JACK on Fedora 12

Jan 26, 2010

Audacity is somewhat of a broken joke these days, so I needed to use Ardour to record. And that meant setting up JACK. Since JACK insists on exclusivity, I also needed to route pulseaudio through JACK so I could use other apps at the same time. Unfortunately, this is a bit of a pig to figure out. I hacked it as follows:

First edit /etc/pulse/, you need to add two lines:

load-module module-jack-sink
load-module module-jack-source

In theory now, a restart of pulseaudio should start using JACK for recording and playback, if jackd is running. However, it tends not to work very well: you might find PA hanging and you have to kill -9 it.

This isn’t enough of course, now when you log in again, gnome-session will try to start pulseaudio, but not jackd, so nothing works. It’s far from the right way, but I edited /usr/bin/start-pulseaudio-x11 (which is started from a /etc/xdg/autostart/ script), as follows:

amixer -c 0 sset 'Input Source' 'Line'

nohup jackd -d alsa &

sleep 5

/usr/bin/pulseaudio --start "[email protected]"

Note that I have to set the input source by hand: something in desktop start up used to do this for me, but now I’m going through JACK it has to be done by hand.

Liferea strict feed validation tip

Jan 17, 2010

New versions of Liferea refuse to parse any feed that fails to validate, even for relatively “minor” problems (the libxml2 recovery facility is no longer used; besides, it abandons the rest of the feed when it hits such problems). I don’t want to use Google Reader, since I don’t like the interface.

Typically bad feeds have things like high-bit chars or bare ampersands. Thankfully, there’s a “conversion filter” feature that you can use to work around the bad feeds. On the two bad feeds, I run this filter:

[[email protected] ~]$ cat bin/fix-ampersands 

sed 's/\o226/&amp;/g' | sed 's/& /\&amp;/g' | sed 's/\o243/GBP/g'


Nov 10, 2009

“The main indicators of egotism as I intend it here are are loud self-display, insecurity, constant approval-seeking, overinflating one’s accomplishments, touchiness about slights, and territorial twitchiness about one’s expertise. My claim is that egotism is a disease of the incapable, and vanishes or nearly vanishes among the super-capable.”

“I’m the crippled kid who became a black-belt martial artist and teacher of martial artists. I’ve made the New York Times bestseller list as a writer. You can hardly use a browser, a cellphone, or a game console without relying on my code. I’ve been a session musician on two records. I’ve blown up the software industry once, reinvented the hacker culture twice, and am without doubt one of the dozen most famous geeks alive.”

No prizes for guessing who this was.

Enabling xVM on OpenSolaris

Oct 29, 2009
Another significant usability improvement that landed in build 126 is Gary and Bill's work on enabling Xen. Now, running xVM should be as simple as:

# pkg install xvm-gui
# echo 'set zfs:zfs_arc_max = 0x10000000' >>/etc/system # yes, you still need this, sadly
# svcadm enable -r milestone/xvm
# reboot

There's also a new Visual Panel for doing this if you prefer a graphical method. More in the flag day message.


Dry-run migration

Oct 29, 2009
As part of our ongoing work on improving the ease of use of xVM, the newly available build 126 of OpenSolaris has my putback for:

6878952 Would like dry-run migration

This feature is useful for doing a simple check as to whether a guest can successfully migrate to another dom0 host. For example, domu-221 here is using a disk path that doesn't exist on the remote host hiss:

# virsh migrate --dryrun domu-221 xen:/// hiss    
error: POST operation failed: xend_post: error from xen daemon:
(xend.err 'Remote server error: Access to vbd:768 failed: error: "/iscsi/nevada-hvm" is not a valid block device.')

This works both with running and shutdown guests. Currently, the checks are fairly limited: are disks of the same path available on the remote host (note there is no checking of GUIDs or whatever to verify they really are the same piece of shared storage); is there enough memory on the remote host; and is the remote host the same CPU vendor. We expect these checks to improve both in scope and in reliability in the future.


A horrible little ElementTree gotcha

Oct 20, 2009

What does this print:

from lxml import etree
doc = etree.fromstring('<a><b><c/></b></a>')
newdoc = etree.ElementTree(doc.find('b'))
print newdoc.xpath('/b/c')[0].xpath('/a')

The answer is: [<Element a at 817548c>]. The first point to note is that xpath() against an element is only relative to that element: any absolute XPaths enumerate from the top of the containing tree. The second point is that the shallow copying of etree means that _Element::xpath, unlike _ElementTree::xpath, evaluates absolute paths from the top of the original underlying tree! So even though there’s no <a> in newdoc, an absolute XPath on a child element can still reach it.