Open-source plushy?

You may have noticed that LinLog has a new look. I installed what will soon be the next version of LnBlog last night, and when I upgraded LinLog, I switched it to the new theme, which I call Tux Ice. It's supposed to look vaguely wintery, or something. I'm sure I'll end up tweaking it some more.

Anyway, while I was looking around for a nifty image of Tux to put in the page banner, I came across Free-Penguin.org, which "provides 'executables' that enable you to make your own soft-toy Linux penguin." In other words, they offer sewing patterns that you can download and print out to make a Tux plush toy. How cute is that?

Firefox images - Ah ha!

Well, I feel like a bone-head. Remember in my last post how I complained that some images weren't showing up in Firefox. Well, I finally tracked it down. I had the "Load images from originating website only" option turned on. I'd forgotten that option was even there! I'm not sure if it's on by default, but I don't remember changing it.

It didn't click until I was looking for extra serial port cards on CDW-G this morning and noticed that none of the images were loading. However, when I browsed to plain old CDW, it worked. That's when the light-bulb went on and I checked the image locations. Sure enough, everything was being served form the cdw.com domain. That's one mystery down. (Although, on the other hand, the non-working mouse gestures did pop up again yesterday.)

Firefox annoyances

Holy inversion of opinion, Batman! Who would have thought that, just a month ago, I was on the verge of dropping Opera for Firefox, when now, I'm just going to complain about how much Firefox sucks? Funny how things work out, isn't it?

Opera 8.0 final has been good to me, while Firefox has not. Opera 8 is definitely a step up from the 7.x series and I'm no longer suffering from the problems I had with the 8.0 betas. However, with Firefox, it seems like every upgrade I install breaks something. I mean, it's really starting to get ridiculous. Of course, I should probably preface this by saying that I'm only talking about Firefox on Windows - I can't use it on Linux, because my system is old and Firefox is so slow on it that I have enough time to go get a cup of coffee between page loads.

Anyway, the first thing to go was the ability to open multiple windows. I'm not sure if this is because of a Firefox upgrade, or a "Tabbrowser Preferences" extension upgrade, but I can no longer open more than one instance of Firefox. It doesn't matter if I use File->New Window, run it from the Start menu, or any other way I can think of. I get a quick busy cursor - and then nothing. The really annoying thing about this is that it also forces me to open all Javascript pop-ups in tabs, including the ones that resize the browser window.

The second thing I noticed was mouse gestures. They seem to be working now, but for a while, they would inexplicably stop functioning. A little experimentation on my part suggested that this might be somehow related to my using MSVDM (the suckiness of that is a story for another day), so maybe it's not all Firefox's fault, but it's still a pain.

I also noticed recently that some images are not being displayed in Firefox. So far, they've all been GIF images, but it doesn't happen with all GIFs. I saw this both on Linux and the more up-to-date version I use on Windows. For example, when I downloaded RealPlayer 10 on Linux, the download page was missing a rather large graphic that displayed fine in Opera. On windows, I noticed that the graphics used for some characters in the pronunciation guides at dictionary.com are missing. What's the deal? The AdBlock extension doesn't show these being blocked and they show up in other browsers, so this doesn't make much sense.

Of course, it's entirely possible that most of my problems are caused by Firefox extensions rather than Firefox itself, but that just raises the question: what good is an extensible browser if it's not safe to use the extensions? Many of the Firefox boosters I've read claim that Firefox's extensibility makes it superior to Opera's built-in features because you can build extensions to emulate anything Opera can do and more. While that's technically true, what they often leave out is the fact that a) not all extensions are high-quality and b) extensibility doesn't buy you anything if no one has, in fact, written the extension you need. Yeah, I know - I could write the extension myself if I really wanted to, but it just isn't worth the hassle.

So, yeah, Opera has its problems, but at this point, I don't really think Firefox is any better. It's kind of like the difference between Linux and Windows - they both suck, just in different ways. And right now, Opera, just like Linux, sucks less for my purposes.

More Xandros successes

It took a while, but I finally got Xandros to print without using Samba. It turns out the problem was not with Xandros, but with the Slackware 10.1 system I to which the printer was connected.

According to the CUPS documentation, CUPS printers are automatically shared with all other systems on the network. The general impression I got was that you don't need to do anything special to print to a CUPS server - just tell the client which server to use and the rest is automatic. It turns out that that's both true and false. It's true that you don't need to do anything on the client but tell it where the server is, but figuring out the URI or the printer you want can be a bit tricky. It's also true that you don't have to do any special configuration on the server - except change the default security settings. That's right, my problem was server security. It turns out that I needed to change the default location in the /etc/cups/cupsd.conf file to allow connections from places other than the local host. The relevant section looks like this:
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
I just had to change 127.0.0.1 to 192.168.0.* and it started working. I was able to give
ipp://hostname/printers/printername
as the URI of the printer and Xandros was able to send jobs to it.

KMail on Xandros - Success!

Remember how I mentioned that I couldn't figure out how to change the default mail client in Xanrdos 3 OCE? Well, I figured it out, thanks to a little experimentation in Slackware. Actually, all I did was change the default mail client on my Slackware box, grep for the program name under my $HOME/.kde/share directory, and there it was. I don't know why I didn't think of that the first time.

Anyway, it turns out that all you need to do is add a line to your $HOME/.kde/share/config/emaildefaults file. Under the [PROFILE_Default] section, add the setting EmailClient=kmail, so that it looks kind of like this:
[PROFILE_Default]
EmailClient=kmail
I'm not sure how the profiles stuff works, but this seems to do the trick. Now, when I right-click a contact in the KDE address book and send them an e-mail, it opens up KMail instead of Thunderbird.

In a related note, a little Googling also found me the setting to make FireFox open links in KMail. Of course, this isn't specific to Xandros - I've been wondering how to do it for a while. It's just that I don't use FireFox on my Slackware box (it runs too slow on my old hardware), so I never really bothered with it until now. All you need to do is open up FireFox and type
about:config
into the address bar. This will open up FireFox's long, convoluted settings dialog. Type "mailto" in the filter box to search for the relevant setting. Look for a preference named
network.protocol-handler.app.mailto
You probably won't see one, so right-click in the preferences list and select New->String. Enter network.protocol-handler.app.mailto for the preference name and kmail, or whatever your favorite mail program is, for the value.

The only one problem with this is that the File->Send Link menu item may not work. Sure, it will open your mail program, but it won't actually put the link in the body of the message. It turns out that this is because FireFox calls the mail program with a single argument: a URL query string. That means that if your mail program doesn't understand how to parse a query string, you're out of luck. So, for example, the KMail command line options like -s and --body won't work, because there aren't any separate variable to pass them. However, it turns out there's a program called kmailservice which comes with KDE, and it does know how to parse query strings. I haven't looked into it much yet, but apparently it takes a URL and parses it into a form the default mail client can understand. So I just set kmailservice as my mailto program in FireFox and I'm good to go.

The extra software

The other day, I mentioned that I had problems installing K3B and KOffice on Xandros. They are not available through the Xandros Network, but can be had from the "unsupported" Debian sources. The Debian packages don't work on Xandros, though I did manage to get both of them installed eventually.

K3B turned out to be the easy one. After surfing around the Xandros forums, I found that somebody had created an APT repository at xandros.or.id, wherever that is. (Is .id India? Or maybe Indonesia?) They had a working package for K3B there, so all I had to do was copy the APT source line
deb http://www.xandros.or.id/archive xxx main
and paste it into the "add" box in Xandros Network configuration, and I was good to go.

KOffice was a bit harder. Once I installed all the proper development packages through XN, building it was simple. Building real KDE packages is always simple - the only hard ones are the half-baked stuff you sometimes find on SourceForge or KDE-Apps. Hell, even building KDE itself is easy - it just takes a really long time. But building it is only half the battle - I also had to make a package for it. Sure, I could always just su to root and do a "make install", but my experience is that this is to be avoided when at all possible. It's acceptable for things like kernel modules, where you'll have to rebuild it when you change kernels anyway, but for desktop software, there's always a good chance that you'll want to remove, reinstall, or upgrade it at a later date, and doing this outside the system package manager is a pain in the neck. Especially uninstalling.

As a result, I find it best to build my own package whenever I install from source. I've been doing it on Slackware for years, and it's extremely easy in most cases. However, I don't have any experience with Debian, so I basically had to start from scratch. After a little searching, I eventually found a decent HOWTO on Debian packaging. Many of the other links I found had lots of stuff on Debian standards and best practices, but since I just want to build packages for my own personal use, I don't really care about those. This guide got me up and running with a quick and dirty Debian package that I can uninstall at will. It wasn't quite as easy as Slackware, but still not too difficult.

Xandros up and running

Well, I've more or less finished setting up Sarah's new computer. Xandros 3 OCE is up and running, I've slimmed down her desktop, updated her software, configured her wireless network card, and even managed to build a Debian package of KOffice that I built from source. The only thing I have left to do is decide how I want to network it with my computer.

The wireless network setup in Xandros was easy. In fact, much, much easier than it was on my Slackware box. I bought Sarah the same Edimax EW-7128G card that I have. For those of you who didn't read the inaugural LinLog post, this is a PCI 802.11b/g WiFi card with RaLink RT2500 chipset. It has native Linux drivers released under the GNU GPL, but they're still in beta release and have some issues. Since no distribution that I know of includes these drivers, I anticipated having to build them from source, and prepared accordingly.

Building the drivers was a bit of a pain, but not too bad. In addition to GCC, which isn't included on the Xandros install CD, I had to download the kernel sources from the Xandros Network. This was annoying, but not entirely unexpected. The only major annoyance was that the kernel source package from XN just dumps a bzip2 compressed tarball in /usr/src. That's it. They don't even bother to extract it. What do they have, a large number of customers who never actually use the source, but just want that warm, fuzzy feeling of knowing they have it? Anyway, before I could build the drivers, I had to extract the kernel sources, copy the kernel config file from /boot (no, the source archive didn't have any config file in it), and start building the kernel. I'm not certain if building the kernel was actually necessary, but I did it anyway. Actually, I only built part of the kernel - I killed the process after several minutes. The drivers built and installed without any problems after that.

The wireless configuration part was dead simple. In the control center, Xandros has a network configuration module reminiscent of the Windows network configuration applet. After installing the driver, the configuration module picked up the card automatically. All I had to do was uncheck the "enabled" box for the integrated NIC I had used initially and change the combo box to my RaLink wireless card. I checked the "enabled" box, set my IP, gateway, and so forth (I'm using static IPs on my LAN), and that was it. Xandros started using the new interface right away. It did show me a message saying that some programs might be using cached settings and would require a reboot, but I was able to unplug the cable from my router without interrupting anything. I'd almost forgotten things could be this easy.

For contrast, the installation process on Slackware was much more involved. Building the drivers was somewhat simpler in my case, as I already had a compiled and configured kernel sitting in /usr/src, but the configuration was much harder. I had to edit several system initialization files by hand, including /etc/rc.d/rc.wireless.conf and /etc/rc.d/rc.inet1. Now, I can see having to modify the wireless configuration file, but rc.inet1 is the script that brings up the network interfaces. It should work without modification for any network interface. In fact, I don't see any reason why this script couldn't have worked, other than the fact that it hard-codes the names of the network interfaces. In other words, the script assumes that the first (and, in most cases, only) network interface is eth0 and does not provide a way to override this other than hand-editing the script. Of course, when it comes to wireless devices, this is a horribly flawed assumption. For instance, the RaLink drivers name the first wireless card ra0, and the only way to change this is to set a parameter for the kernel module. Setting an alias for eth0 in your modprobe.conf or modules.conf won't do the trick. Of course, I didn't discover this until some time later, in a forum posting on the driver development page at SourceForge (no, it's not in the documentation). Apparently this isn't usually an issue, since most distributions are sane and let you set the device name in a configuration file. It's things like this that make me think about switching distributions.