When You Assume..
I, like many others, have never thought of Linux as a "pretty" operating system, instead choosing to think of it as the home of "best effort" programmer-designed GUIs and "command line first" design.
This line of thought has set my expectations for my desktop Linux environments at home. When I switched to running Linux as my main Desktop machine 18 months ago I noticed that the fonts were nowhere near as nice as my Mac and Windows machines. Blindly assuming that Ubuntu didn't support ClearType, I simply went about my business and put up with the horrible fonts.
That was up until today, when I finally decided to investigate. It turns out that Ubuntu fully supports ClearType (although they call it "subpixel smoothing"), it's just turned off by default. There's even a handy GUI for turning it on. I'm never going to assume that my OS has to look like a dog's breakfast ever again.
Flashdance
Until recently, Adobe's support for Flash in 64 bit Linux environments has been pretty much non existent. Those of us who have made the jump have had to make do with nspluginwrapper, which enables the Netscape plugins to run on architectures (such as x64) that they were not written for. The experience offered by this solution was seriously sub par, and was almost a show stopper issue for me when deciding whether or not to make the switch to Linux.
This all changed when Adobe started releasing Alphas of the Flash 10 player for x64 linux distros. Finally we can run the flash plugin natively, ditching the horrid performance and "gray screen of death" that was commonly associated with nspluginwrapper.
It took me about 20 seconds to set up the new plugin using this guide from Softpedia. I uninstalled nspluginwrapper, created a plugin directory as instructed and copied in the libflashplayer.so file. Then I reboot firefox and....
Argh! The performance was even worse than before! What was going on?
A quick scan of top told me that a process called gtk-gnash was eating 100% of one of my 4 CPU cores. I had found the culprit. Unfortunately Ubuntu comes with a horrible open source flash implementation called gnash. The nspluginwrapper implementation had successfully kept it at bay, but now that was gone, leaving me exposed to the CPU usage equivalent of Unicron that is gnash.
After uninstalling everything to do with gnash and giving the system a quick restart for good measure, seeing as gnash had successfully crashed ALSA and a few other core systems, and I was up and running. Finally I can enjoy watching mind numbing Youtube videos and playing benign Flash games at a speed more befitting of my Quad Core box with 8 Gb of RAM!
Command and Conquer Pt 1: The Basics
In the early years of public internet usage, before the days of PPP and SLIP (anyone else remember using a SLIP client to get IP connectivity??), one of the only ways to get connected from home was to dial in to a *NIX shell account using a Terminal Emulator application. To many people, their first exposure to the "internet" involved a blinking cursor and a plethora of confusion as their "dir" command refused to work.
That method of internet access hasn't been popular in quite some time, but regardless, the ancient art of staring blankly at the command line is making somewhat of a comeback through another avenue. With the popularity of OSX, Linux-based ultra portables and "friendly" Linux distributions such as Ubuntu, more and more people are being exposed to environments where Bash is the most common way of performing non-GUI operations.
"What's that?", I hear you say, "Non-GUI Operations? But I'm using the latest version of Friendlynix, the friendliest Linux distribution in the world! Can't I do everything through the GUI?". For the most part, yes. However, there are going to be times when you need to peek "under the covers", and it's best to be prepared lest you be shocked and disturbed by what you find. *NIX variants may have lost a lot of their rough edges, but it's not all icecream and cakes just yet.
So let's start with the basics. A *NIX style file system is completely different to the C:\ drive orientated view found in Windows. Everything starts from a single root directory, which lives at "/". All your devices, including DVD Drives, USB sticks, and hard drives, live as branches of this directory. If you're interested, you should look into device mounting, but for the sake of this conversation it's enough to know that the top of your file system is always "/" and everything else can be found below it. Another thing to note is that most *NIX file systems are case sensitive. This means that, to the file system, "MySpecialFile.txt" is not the same as "myspecialfile.txt".
One of the most important things you'll need to do once you pop open your terminal of choice is get your bearings, as you won't be comfortable until you get a feeling for where you sit in relation to everything else. Depending on your terminal setup, this may already be shown to you as part of the prompt, but if it is not then you'll want to use a command called pwd, which means "print working dir".
garrys@GAMBIT:~$ pwd /home/garrys
Here it is telling me that I'm currently in the "/home/garrys" directory. This is my home directory, and is quite often your starting point for a new shell session. Don't worry about the "garrys@GAMBIT:~$". That's my Bash prompt telling me who I'm logged on as, the machine that I'm logged on to and the current working directory. "~" is effectively a shortcut for your home directory, but I'll get into that a little later.
Now that we know where we are, we'll want to get a look at our surroundings. The ls command is the *NIX equivalent of good old dir, and the source of much confusion for recent DOS converts. It stands for "list directory contents", and that's exactly what it does.
garrys@GAMBIT:~$ ls amsn_received Music squeak.image argo.user.properties My GCompris SqueakV39.sources autosave.xmi nautilus-debug-log.txt temp Desktop paw.metafile Templates Documents Pictures uml_generated_code Examples Public Videos GNUstep runtime-EclipseApplication workspace gpodder-downloads squeak.changes
Now, there are a few arguments for ls that you should be aware of. The actual format of the ls command is:
ls [OPTIONS] [FILE]
where [OPTIONS] is, for the sake of this conversation, a string starting with "-" and [FILE] is a filter that you would like to apply to restrict your query. Both [OPTIONS] and [FILE] are optional. [OPTIONS] represents a series of options that you can apply to your command to affect the outcome. An important thing to note is that these options can be combined, which makes for a pretty powerful little tool.
One of the most useful options you can apply is the list option, "l". It formats the output in a one item per row list, and also presents additional information on each entry, including file size. You would execute it as follows.
garrys@GAMBIT:~$ ls -l total 16500 drwx------ 2 garrys garrys 4096 2008-05-13 20:10 amsn_received -rw-r--r-- 1 garrys garrys 1439 2008-07-04 09:42 argo.user.properties -rw------- 1 garrys garrys 18067 2008-07-14 20:34 autosave.xmi drwxr-xr-x 15 garrys garrys 4096 2008-07-04 18:44 Desktop drwxr-xr-x 8 garrys garrys 4096 2008-07-14 18:01 Documents lrwxrwxrwx 1 garrys garrys 26 2007-12-02 09:07 Examples -> /usr/share/example-content drwxr-xr-x 3 garrys garrys 4096 2008-07-13 21:10 GNUstep drwxr-xr-x 5 garrys garrys 4096 2008-07-05 19:55 gpodder-downloads
ls in it's base form tries to be helpful by hiding various files from you, such as those that start with a "." character. If you'd like to see these, you can use the "a" option (think "all", as in "show me all files"). Here we've combined the "a" and "l" options to show all files in a directory in an item per row list format:
garrys@GAMBIT:~$ ls -la total 17868 drwxr-xr-x 138 garrys garrys 12288 2008-07-17 00:31 . drwxr-xr-x 3 root root 4096 2007-12-02 09:07 .. drwx------ 2 garrys garrys 4096 2008-04-20 23:58 .abuse drwxr-xr-x 2 garrys garrys 4096 2008-02-22 20:17 .ActiveState drwx------ 4 garrys garrys 4096 2008-05-30 23:57 .adobe drwxr-xr-x 4 garrys garrys 4096 2008-01-04 13:50 .alien-arena -rw-r--r-- 1 garrys garrys 224 2008-05-11 23:53 .alsamodular.cfg drwx------ 9 garrys garrys 4096 2008-05-28 01:31 .amsn drwx------ 2 garrys garrys 4096 2008-05-13 20:10 amsn_received -rw-r--r-- 1 garrys garrys 657 2008-07-15 22:09 .amSynthControllersrc -rw-r--r-- 1 garrys garrys 116060 2008-07-15 22:09 .amSynth.presets -rw-r--r-- 1 garrys garrys 159 2008-07-15 22:09 .amSynthrc -rw-r--r-- 1 garrys garrys 1439 2008-07-04 09:42 argo.user.properties
Notice all the files with full stops at the start? Normally we wouldn't see these (and rightly so, as they are mostly settings files), but the "a" option makes them visible. There are many more useful options, such as "t" to sort by the modification time and "S" to sort by size, but those should be enough to keep you going for the moment.
After specifying all your options you are able to add an optional filter to limit your results. These filters can make use of wildcards. You will probably find yourself reaching for the "*" character more often than the others. It basically means "match anything and everything", and is incredibly handy. Using this you could do something like the following to match all text files in a directory:
garrys@GAMBIT:~$ ls *.txt nautilus-debug-log.txt
As you can see, only files ending in ".txt" were returned. Very useful.
Now that we can look at the contents of a directory, how do we move about? We use the cd command, which means "change directory". cd is fairly straightforward, as the syntax is extremely simple:
cd [DIRECTORY]
There are a few special directories that you should be aware of. The aforementioned "/", or root directory, is probably the most important. If you cd to here then you'll be sitting at the top of your file system. As previously mentioned, "~" is a shortcut for your home directory. If you cd to here from anywhere in the file system then you will be taken straight to your home directory, usually /home/yourusername.
Every directory always contains two entries you can navigate to, "." and "..". The first, ".", refers to the directory itself, so if you cd to this then you're not going to go anywhere. This is actually extremely useful, as you'll find out later on, but for the moment we'll ignore it. ".." refers to the parent directory (the directory "above" your current location in the file system). Technically you could cd to ".." until the end of time, as once you hit the root directory it becomes just like ".", i.e. ".." in the root directory always refers to the root directory.
# Change directory to the root of your file system cd / # Change directory to your home directory cd ~ # Stay in the current directory cd . # Move to the parent directory cd ..
When moving to an actual directory you simply type the name of the path to that directory. You can either reference the directory from the root of the file system (an absolute path), or use a relative path, which is the location of the directory from your current position. For example:
# Move to the "etc" directory which lives directly under the root directory cd /etc # Move to the downloads/graphics directory which is in the directory I'm currently in. Note there's no leading "/" because we want the path to be relative cd downloads/graphics
We can even get fancy and combine the parent directory ".." with other paths. This allows us to move up in the file system as well as down. For example:
# We're going to use two directories here: /etc and /bin. They both sit one level under the root directory. garrys@GAMBIT:/$ cd /etc #Then we can use a relative reference to move to /bin as follows garrys@GAMBIT:/etc$ cd ../bin
You can also use wildcards with cd. It will pick the first matching path from the wildcard results and attempt to change directory to it.
# Get a list of all the directories starting with "D". The -d option on ls simply tells ls to only print the names of directories, rather than their contents garrys@GAMBIT:~$ ls -d D* Desktop Documents # Change directory to the first wildcard match, which is going to be the Desktop directory garrys@GAMBIT:~$ cd D* # Show our full path, just to prove exactly where we are (even though it's shown in the Bash prompt) garrys@GAMBIT:~/Desktop$ pwd /home/garrys/Desktop
The most important thing you can ever be taught is how to learn, and the best way to learn about commands on *NIX systems is the man command. It presents manual pages on commands, describing exactly what they do and what syntax you need to use when calling them. Using this command you can find out more information about all those ls options I neglected to mention in the above text.
garrys@GAMBIT:~$ man ls LS(1) User Commands LS(1) NAME ls - list directory contents SYNOPSIS ls [OPTION]... [FILE]... DESCRIPTION List information about the FILEs (the current directory by default). Sort entries alphabetically if none of -cftuvSUX nor --sort. Mandatory arguments to long options are mandatory for short options too. --SNIP--
The man command takes up the entire terminal, and pushing escape will not get you out of it, no matter how many times you try. "q" is the magic key to exit a man page. You can also use the arrow keys to move around, and space acts as a "page down" mechanism. One of the coolest things you can do is search within the man page. "/" followed by a character sequence will search the man page for that character sequence. Very handy if you're hunting through a rather lengthy file for one pesky option.
One of the best things about *NIX based operating systems is the majority of the content on your file system is in plain text format. Storing things like this is actually a key part of the philosophy that UNIX was based on, as it enables programs to play nice with each other on the command line (among other things). So you have all these text files sitting on your computer; how do you get at them? Well, there are a few options, perhaps the simplest being the cat command.
cat is capable of concatenating multiple files together and printing them out to the command line. Technically it sends them a stream called stdout, but that's a discussion for another day. Basically you give it one or more files (actually you don't even need to give it a file, but once again that's a little beyond our discussion here) and it will print the files out, one after another.
garrys@GAMBIT:~$ cat textfile1.txt This is textfile 1 garrys@GAMBIT:~$ cat textfile2.txt This is textfile 2 garrys@GAMBIT:~$ cat textfile1.txt textfile2.txt This is textfile 1 This is textfile 2
That's fine for small text files, but what about large files? Well, for that you can use less. It presents information page by page, much like man; in fact, it has almost the same syntax as man (q to quit, space to page, "/" to search etc). You can check out it's man page for a full list of commands. You may also be interested in learning about more, which is basically the predecessor to less. It's worth knowing simply because you may see it pop up on the web and wonder just exactly what it is.
Most of the commands you've executed up until this point have been in your PATH. This means that they are in designated parts of the system that Bash is aware of and knows to look for executables in. A slight problem arises when you try to run an executable file that may be sitting on your Desktop or in your home directory somewhere; namely it won't find the file you're after.It can be incredibly frustrating for new users, as the file shows up when using ls. The thing is, for various security reasons you need to provide a full path to any executable that's not in your PATH.
# List the executable I want, just to show that it's clearly in the local directory garrys@GAMBIT:~/Desktop$ ls NVIDIA-Linux-x86_64-169.12-pkg2.run NVIDIA-Linux-x86_64-169.12-pkg2.run # Try to execute the file without providing a full path garrys@GAMBIT:~/Desktop$ NVIDIA-Linux-x86_64-169.12-pkg2.run #Bash tells me that this didn't work because it couldn't find the command bash: NVIDIA-Linux-x86_64-169.12-pkg2.run: command not found # The following will work, as I've specified a full command by using the magic "." directory that references the current directory. The added "./" at the start is the key to success here garrys@GAMBIT:~/Desktop$ ./NVIDIA-Linux-x86_64-169.12-pkg2.run
This is a fairly big difference for people who are used to the Windows command line or DOS, but it's one that's extremely important to remember.
So now you can find out where you are, see what's in your current directory, move about, find out more information about commands and check out the contents of text files. See, the command line is not so scary after all! Next time we'll check out some basic file and directory manipulation commands and also explore the difference between Windows and *NIX style file permissions.
Get Back
I've been using the Firefox 3.0 beta since I upgraded to Ubuntu 8.04, as it came as a standard package, but until now I had no idea that version 3.0 had a significantly different UI from 2.0. In fact, I only found out when I saw recent Flickr posts showing a Firefox comparison chart with a list of "advantageous" features. One in particular stuck out:
Large "back" button, the result of decades of market research
Large back button? I couldn't see a large back button on my Ubuntu install, even though I was running the latest 3.0 release. What were they talking about?
After installing Firefox 3.0 on my Windows 2003 machine at work I soon found out: They've enlarged the back button, presumably because it's the most commonly hit icon in the tool bar, and it looks pretty cool. I must say that I don't use the back button much, I'm more of a "delete key == back" kinda guy, but it's a nice touch.
Apparently there's a bit of backlash against this new feature, but at least they're trying. It's certainly less jarring than IE7's "hide the menu" approach to UI innovation, and it makes quite a lot of sense from a practical point of view.
I've now upgraded my Mac and XP machines to Firefox 3.0, and I'm enjoying the new UI. As an aside, and regardless of John Gruber's list of gripes, I still think that Firefox 3.0 on the Mac is a huge step forward in comparison to what they had. Versions 2.0 and 3.0 are like chalk and cheese. But I digress..
So why didn't my Linux install have this spiffy new button? Well, it turns out that Firefox 3.0 on Linux is one of the latest applications to get the Tango treatment. Tango is an attempt to bring some order to the world of open source applications by giving them a sense of consistency. This is actually a great idea, and it's done wonders for applications such as OpenOffice.Org and The GIMP, which now look somewhat respectable. There's a showroom full of projects that have had a Tango related makeover, and most of the featured applications are much better off with the new icon set.
This is all well and good, but what about Firefox? It's probably the biggest open source project in next to Linux itself, and yet it's not yet mentioned in the Tango Showroom. Surely there's a reason for this?
Well, a potential reason becomes fairly obvious once you actually open up the browser. The very first page that pops up has a picture of what the new theme looks like on Windows Vista, which is a stark contrast to what you are seeing in your native browser window.
See what I mean? The "standard icon" idea that has worked so well for OpenOffice.Org, The GIMP and VMWare Workstation has given us a fairly plain browser that has lost all traces of the innovation that the Firefox team were trying to implement. It looks pedestrian and boring, in fact if it wasn't for the deli.cio.us plugin icons I think I'd never get any work done, as a mere glance at my Firefox toolbar would send me straight to sleep.
It's sad that the most interesting, and therefore the one most likely to draw your attention at a casual glance, icon in the standard set now being the home icon. Although it is much more visually appealing than the plain forward and back arrows, it's a button that I can't remember ever clicking. Not even once. There are no paint brushes or printers to mix things up and keep your eye from settling on a useless feature that you've never wanted and will never need.
The great thing about Firefox is that you can apply a theme to get it to look however you want, so you would think that I would have no need to complain. I could just pick a theme from the Firefox website and would be happy, right? Well, yes and no. There's no "official" theme from Firefox that delivers similar functionality for Linux. There might very well be a 3rd party theme that will make my browser act like this (I did look for one without success, but that's another story altogether), but that still doesn't change the fact that the Firefox team have taken a vastly different approach to their Linux UI when compared to OSX and Windows, one which flies in the face of their obvious urge to innovate.
Alex Faaborg spoke about how they wanted to integrate with the host OS as much as possible on the proprietary platforms, and that didn't stop them from making the forward and back buttons look absolutely nothing like any native control on XP, Vista or OSX, so their integration manifesto couldn't have been that rigid. With Linux they have gone for total homogonisation, where as OSX and Windows have an "integrated, but with individual flair" feel. They haven't had all the life sucked out of them by a desire to conform to the nth degree. Standards are great, and are certainly needed on Linux given the diverse nature of the different window managers, but they shouldn't be used to stifle ideas and discourage creativity.
Maximize Your Potential
Up until tonight I was pretty happy with my switch to Thunderbird. I'd migrated over my RSS feeds, for which I was previously using the (admittedly rather cool, as the RSS feeds are almost done at an account level, rather than application level) Outlook 2007 RSS feature, and was busy searching for a replacement calendar application.
My state of mail related bliss was interrupted when I performed a system update involving a new version of GTK. Upon restarting my machine, I discovered that Thunderbird was stuck in full screen mode. Full screen mode involves an application filling the entire screen with no window adornments, so it can't be resized or even moved to another screen. This wouldn't have been so bad if it wasn't for the fact that all the secondary windows (preferences, new messages etc) seem to behave strangely when in full screen mode, often appearing under the main window and requiring a click on the relevant task bar item to get them to show.
After a bit of searching on the web I managed to find a bug entry on the Ubuntu's Launchpad Bugtracker confirming that I wasn't alone. Various Linux installs I've used in the past have allowed me to push "Alt-F11" to toggle full screen mode, but that didn't seem to be enabled on my Ubuntu 8.04 install.
Figuring that it was an issue that could probably be solved by playing with some window manager settings, I went poking about in the CompizConfig Settings Manager. I found some interesting shortcut configurations under "Window Management > Extra WM Actions", one of them being a shortcut to "Toggle Fullscreen", which was disabled.
In about two seconds I had set this up to use the familiar "Alt-F11". I then tried it out on Thunderbird and my problem was solved. No more forced full screen mode. Now I could drag that little window around to my heart's content! Even better, I could now jump in and out of full screen mode for any application I wanted. I'm going to have to do a bit more digging in the Compiz settings to see what other useful features I can find.
Evolution at Work
I very rarely see the Gmail front page, as I've usually got an active session kicking around on whatever machine I'm using. This means that I never get to see the Gmail blog updates that they feature on the front page. I'm far too lazy to actually subscribe to the Gmail Blog RSS feed (and I still haven't found a Linux RSS reader I like, so I won't be doing that for a little while), so I usually miss out on all the latest Google Mail related gossip.
Tonight I went to check my mail using Safari on an old Mac laptop we have floating about. It was the first time I'd used this particular account/browser combination to access Gmail, so I was confronted with the login screen.
Seeing as it was already in front of me, I gave the page a quick cursory scan to see if there was anything of interest. I'm glad I did, because I noticed the latest Gmail blog entry, which was centred around Gmail's IMAP support I must have seriously missed the boat on that one, because I didn't even notice that Gmail supported IMAP.
I set about trying to configure a mail client on Linux to work with this new-found IMAP goodness. I already had two clients installed; Evolution, the default Gnome email client, and Thunderbird, from the same guys who make the little browser that could, so I was determined to pick one of those, at least in the short term.
I'd used Evolution way back in 2002 when it was the only linux mail client that could connect to Exchange, so I thought I'd give it a go first up. Gmail uses a few funny ports for SMTP and IMAP, so I grabbed those settings from the IMAP client configuration page. They haven't made a specific page for Evolution, so I just picked "Other" and away I went.
Initially everything went great. All of my mail came down, and the test messages I sent to some of my other email accounts worked fine. Great! I was all but ready to mark this one off as a job well done. There was one little problem, though: whenever I tried to reply to a message, i got a nasty error message telling me:
Error while performing operation. Host lookup failed: myemailaddress: Name or service not known
Hmm. Just to make sure that there were no whacky Evolution settings to consider, I went and grabbed an Evolution specific tutorial. No luck. I even tried switching to my ISP's SMTP server. Still no luck.
Thunderbird's icon was calling me from the launch panel, so I thought I'd give that a go to see if it suffered from the same problem as Evolution. Google have made a specific guide on configuring Gmail IMAP for Thunderbird, so to avoid complications I followed it word for word. I wasn't going to risk some silly configuration mistake getting in the way of my inexplicable need for a thick client email solution.
It took around 20 seconds to have the entire account configured. I got all my mail, sent some test messages (both new compositions and replies to other messages), and it all just worked. Amazing.
So in the end, it looks like Thunderbird won by default. I could go back and try to fix Evolution, but I honestly can't be bothered. I'll give Thunderbird a go for a few weeks and see how I like it. I may even mode back to using the Gmail browser-based client. Or maybe I'll just start answering all my email via the Gmail Mobile client. Then I'd be able to fulfill my lifelong dream of developing horrible thumb-based RSI from excessive predictive texting.
Edit: Looks like I spoke too soon. I'm currently having fun with this bug. After doing a GTK update last night, Thunderbird has been stuck in full screen mode. Oh well, I didn't move to Linux because it was easy!
Chasing the Heron – Part 1
My Ubuntu box has actually been up and running since late last year, but I haven't starting using it as my primary desktop until recently. In its previous life it was a file server, subversion repository and web server. It started off as a 7.10 Gutsy Gibbon install, but I recently upgraded to 8.04 Hardy Heron just in time for my big migration.
I had never had much luck with networking on the machine. The wireless network dropped out when I put any decent sort of traffic through it. I would still have a signal, but would be unable to send or receive any packets. This wasn't a major issue when the box was sitting under a desk only being used to serve up files via ethernet, but as soon as I started taxing the wireless card, which I use for all internet traffic, it would start to flake out. I would only get around 45 minutes of usable internet access and then I'd either have to reboot or start playing with ifup/ifdown for 30 minutes, hoping that something would breathe life back into the connection.
Unhappy with the situation, I decided to do some digging and came up with a list of problems people were having with dodgy wireless cards. Some of the symptoms were remarkably similar to those I was experiencing, which at the very least told me that I wasn't alone.
Some posts suggested that there was a problem with the networking components of the OS itself, and made suggestions such as running DHCP manually. I tried every potential solution I could get my hands on, including replacing the default wireless network management software with the same handy KDE utility that my EEE PC uses, but to no avail.
Having had no luck with the OS side of things, I started to look for issues specific to my wireless chipset. Using lspci, a utility that lists information about PCI devices, I was able to find the chipset used by the onboard wireless card on my ASUS P5K-E motherboard. After adding this number to my google query I quickly discovered that there was a flaw with the wireless driver needed by my wireless card. This meant that I was not going to get it working properly, short of rewriting the driver.
Figuring that I wasn't going to get anywhere, I thought that I could just cannibalise the wireless card from my Vista box and pop that in. It turns out that there are no native drivers for the card I was trying to use, but NDISwrapper came to the rescue. NDISWrapper lets you use any Windows driver written to take advantage of the Network Device Interface Specification. NDISWrapper was amazingly easy to install and configure with the Windows driver for the wireless card I was trying to use. Then I simply reset my machine, disabled the onboard wireless in the BIOS and let the machine boot normally. My wireless network was picked up straight away by the new card and everything worked like a dream.
One lesson I did learn after all this was to never assume that a piece of hardware will work on Linux. Thankfully, the Ubuntu Community's excellent documentation surrounding wireless networking contains a list of supported wireless cards that should be helpful should I ever choose to put together another box.



