Linux and wireless devices


Linux has problems with peripherals and built-in hardware components. Even peripherals from companies that are supposedly Linux-friendly and have released open-source drivers in the past have become outdated by new and incompatible hardware - the same is true for companies that previously had released closed-source drivers for Linux, which no longer work with new versions of the hardware (Canon, for example, and their Pixma iP2500 printer which is different enough from older printers in the same series that the Linux drivers no longer work).

Take wireless network cards. The RT2500 chipset from Ralink is used for lots of wireless cards - in my case the Belkin F5D7000. Ralink released rt2500 drivers which were incorporated into the Linux kernel and provide stable WEP-encrpyted network access, using the standard Preferences > Network configuration interface in Ubuntu. The problem is that this interface doesn't support WPA, which is pretty much obligatory given how easy it is to crack WEP networks if you have the right network card and drivers to do so. In Ubuntu Feisty, NetworkManager (network-manager) was introduced, with the appropriate GUI for choosing wireless networks in roaming mode using a panel applet (nm-applet). NetworkManager builds on standard interfaces for wireless network card drivers: Linux Wireless Extensions, a.k.a. WEXT. Unfortunately the rt2500 drivers don't support Wireless Extensions, meaning NetworkManager can't communicate with the drivers, so wireless network access doesn't work on machines with these cards: you have to uninstall NetworkManager and configure the connection using the old method, using only WEP.

Developers are working on a new set of drivers: rt2x00, which will support Wireless Extensions. According to the Gnome NetworkManager page, WPA/WPA2 is working since kernel-2.6.22 with the new [mac80211] wireless stack and the latest rt2x00 CVS version.

The only alternative - for now - is the tried, tested, but ultimately a bit flaky use of Windows drivers via ndiswrapper. You have to blacklist the built-in rt2500 drivers by adding rt2500 to /etc/modprobe.d/blacklist, get the Windows drivers (by installing the drivers in Windows then looking for the .cat, .inf and .sys files in \windows\system32\drivers), install using the .inf file with ndiswrapper and set the ndiswrapper module to load each time the system starts up.

NetworkManager should then be able to see your wireless network and connect using WEP or WPA. If you have to switch from one to the other, you need to run /etc/init.d/networking restart before connecting so that it notices that the encryption type has changed, and might have to delete the stored password in Accessories > Password and Encryption Keys.

The fun thing is that in a few months all this knowledge will be useless - these problems will have been fixed, software and hardware will have moved on and there'll be new problems (though hopefully less incompatibilities) to deal with. Still, it's useful to know where things have gone wrong.