Windows In A Box
[Geek Alert…]
I’ve been getting very tired of having to shut down Linux and boot into Windows, every time I just wanted to run my checkbook program. That one little program is pretty much all that’s tying me to Windows now for my own personal use. Between the Macs and Linux I can pretty much deal with the other hassles of living in Bill’s World. But there is just no good replacement for that checkbook program I use that runs on Linux and that’s surprising because I don’t ask much of a checkbook program. I just want something to reconcile my bank accounts with the statements and, most importantly, print standard wallet size checks. Yet there is nothing out there for Linux that prints those kinds of checks, something both Money and Quicken have done since the MS-DOS days.
So that leaves me stuck with my old checkbook program, which is Money 97. Yes…I’m still using Money 97. I like the user interface, and it just works. But not in Wine, the so-called Windows emulator API for Linux. And that doesn’t surprise me because I don’t think anything I’ve ever tried to run in Wine has ever worked. But recently I was tasked to investigate VM technology for possible use in the software test center where I work. As I did so, I began to think VM technology might be my answer…at least until a viable native Linux alternative to my checkbook software popped up.
A Virtual Machine is a program that emulates hardware, and upon which you can (theoretically) run a different Operating System within the one currently running. Until the Intel based Macs came out recently, Macintosh users could use a product called Virtual PC to run Windows in, and thereby the Windows applications they needed that simply didn’t exist for the Mac. You have to have a license for the "guest" OS you’re running, and there is a performance penalty due to the overhead of running inside an emulator. But it makes running two different OSs at the same time on the same physical machine possible.
VMWare offers two free products that will run on Linux: VMWare server and VMPlayer. But the server wasn’t really the kind of desktop setup I was looking for, and the free VMPlayer will only run pre-made VMs. I did a little looking around though, and found some websites that will allow you to download a kind of VM template for Windows…an empty VM that’s ready to install the OS in. I tried the one on www.easyvmx.com. It limits you to a 640×480 desktop, and puts Windows in it’s own isolated disk image based file system. But it allows network card bridging (your guest OS can have its own network address). You just fill out a few items in their form and then you download your ready to run VM. I gave my VM a 10 gigabyte disk image to play in, and 1 gigabyte out of my 4 of core ram. I figured even if it was locked into it’s own private file system, I could still share files via the network.
I decided I would run my copy of Windows 2000 inside the VM, since there is no software branding on 2000. I assumed that XP would regard the VM as a new machine, and it only allows you to re-install it on two new machine configurations before you have to call Redmond and explain to them that you’re not a pirate. I’ve already used one my XP license lives due to a motherboard failure on Mowgli so I didn’t think I’d be able to install XP at all on VMPlayer.
VMPlayer installs via your usual Linux rpm package, and it set up without a hitch on CentOS, which is the Linux I’m running here at Casa del Garrett. The VM I downloaded from easyvmx came in a zip file that I unzipped in my home directory. First you have to run the VMPlayer config script, vmware-install.pl which makes you agree to a license, and then confusingly asks you many of the same questions that the form on the easyvmx website does. After that’s done you can run the VM by simply entering “vmplayer (vm).vmx” where (vm) is the name of the .vmx file in your easyvmx VM template directory.
When it first comes up without the OS installed it tries to boot, first from the CD player and then from the floppy. So you install your guest OS just as you would if you were installing on a naked PC. So far so good. My Windows 2000 install CDs boot from a set of four floppy disks. VMPlayer was able to boot from them and then install from the CD without trouble. When it comes up, it does so in a small 640×480 window. When you click inside the window your mouse and keyboard work with the guest OS. But to get back out of it you have to hit control-alt. You can also hit alt-g to enter the guest OS.
Unfortunately I couldn’t get my network card to work with it, and that was a deal breaker. Without networking I’d have been reduced to shuttling my checkbook files back and forth via the floppy drive or the CD, assuming I could get CD burning software to work on it. Still not sure what the problem was since from what I’m reading VMWare seems to work just fine with nearly every network card out there. Worse, I also couldn’t get it to work with my printer, which I would have needed to print checks from my checkbook program. The VMPlayer kept complaining it couldn’t access the LPT port. I figure my default print queue was holding it open. I might have been able to access the print queue alternatively via the network, but I couldn’t get networking to work. So I was hosed.
So that left me with either springing for VMWare Desktop ($190), or another product, Win4Lin (currently $70). The reviews of Win4Lin looked promising, and this Wikipedia page gave it a pretty good looking pedigree. Even better, Win4Lin claimed to integrate the guest OS with the Linux file system directly, something VMPlayer wouldn’t do, so I could easily share files with it without needing the networking, if I couldn’t get my card to work with it. Win4Lin pro sells for $70 currently. The web site claims the price is only good through October of last year (the normal price is $90), but I was still able to buy it at the sale price. They offered a money back guarantee. It looked promising so I decided to take a chance on it.
Win4Lin’s requirements page practically screams at you that they won’t support anything but certain Windows bootable CD-ROMs (oddly…all Win2k bootables except SP3)…yet when I read the documentation it looks like it will install a Guest Windows OS from bootable floppies too, as well as directly from an MSDN library disk…which could be really handy because the only other way to install Windows from an MSDN disk on a naked PC is to make bootable floppies.
But based on what I read from their requirements page, I looked around for ways to make a bootable CD from my MSDN CDs. I found this page, which gives you a good set of tools and step by step instructions. Except it was only after following those instructions and creating a Windows 2000 CD with service pack three on it that I discovered that SP3 is The One Windows Install CD That Win4Lin Does Not Support. Dang. So I had to go back and make another bootable CD without the service packs.
Win4Lin installs via an RPM, just like VMPlayer, and needs certain kernel development packages handy on the host machine to allow its service module to be built on the fly. The documentation leads you through installing these on your Linux box on a wide variety of different distributions, but it seems as though all it needs is the kernel development package and the GCC compiler, so I can’t imagine any distribution that wouldn’t be able to run this. The rpm installed on my CentOS system without a hitch. After the rpm is applied, you run a configuration program which sets up the VM and its service, asking you some questions along the way about how much memory and how big you want the system disk image to be, and whether or not you want it to access the Linux file system.
Then you run a "load Windows" program which gobbles up your bootable CD into a disk image. They advertise a simple “one-click-to-Windows” setup, but I chose to do each step myself from a terminal window. When I ran this part of the install it worked for a while and then complained that it couldn’t read my Windows CD. So I put in a different one and ran it again. This time the software complained that a Windows CD had already been “installed”. Hmmmm. I tried the optional command switch that allows a reinstall of the Windows CD, and the process started back up again, and after reading the CD for a while gave me the same error message it did before. So just for kicks I just went to the next step, which was to run the Windows install off the CD image Win4Lin had theoretically just gobbled up. It ran without a hitch. I’m guessing that for some reason the disk image program just wasn’t handling the end of the CD correctly.
The "install Windows" program runs the Windows installer off the disk image it just gobbled up, and then promptly shuts down the VM, and puts a link on your desktop. Double click on the link and a new window comes up and you can watch Windows booting inside of it, just as if it were booting on a stand alone PC. Win4Lin gives it a nice 1024×768 desktop window right out of the box. I’ve not tried fiddling with it to see if I could change anything. There is a full screen mode too, which I’ve not examined yet.
Moving the mouse cursor into the window made the VM and its guest OS active, moving the mouse out made my Linux desktop active. The first thing I noticed was that the keyboard sometimes got confused as to the state it was in when I went back into the VM from the Linux desktop, and appear to be locked up. It wasn’t, it was just in the wrong shift state for some reason. I eventually discovered simply hitting the alt key whenever that happened would clear it up. Hitting Shift F12 while inside the VM window brings up a menu of special keystrokes you can send to the guest OS, such as control-alt-delete, and the cut and paste functionality.
Networking worked right off the bat. I could bring up IE and it went right out to the network without a hitch. Charmingly, Win4Lin had somehow made their home page my browser’s initial default home page. I reckon that happened via some OEM switch they used during the install. Win4Lin does not support network card bridging, so my guest OS had the same network address as the host. But it all seemed to work just fine.
Integration with the Linux file system in Win4Lin works like this: Windows is installed on it’s own disk image file under your /home/winpro directory. This becomes your Windows ‘C’ drive. But Win4Lin also puts in a link to a “//HOST/home/My Documents” directory it creates (if it isn’t already there). In your Windows explorer this looks like your usual My Documents directory. But it’s on your Linux file system as a normal user directory. You can put symbolic links in that directory to other parts of your file system as needed, and they show up in your Windows explorer as folders under My Documents.
If you install Windows off a disk image that Win4Lin has gobbled up, that image also shows up on your Windows explorer. So any time you change your Windows configuration and it needs to fetch something off your install CD it’s always right there. I suppose this is why they want people to install Windows their way, and not directly off the install CD.
You add your printer by adding it as the network printer: //HOST/host-printer, and then specifying the Apple LaserWriter printer driver. This is a generic postscript printer driver that talks to your default Linux print queue. Following those instructions I was able to get Windows talking to my old HP Laserjet from within the VM without any trouble.
Then I installed my old version of MS Money. The autorun CD feature on Windows works just fine on Win4Lin. You put the CD in and, on CentOS anyway, the CD auto mounts and (since I’m running KDE) a Konqueror browser window automatically pops up, as usual. But if the Win4Lin VM is up, the Windows running inside it detects the inserted CD too, brings up an explorer window on it, and the autorun feature starts if present. The Money install went off without a hitch. Then I ran the check printing setup, and printed a test check. It came out exactly right.
So I was in business. I decided to bring my Windows 2000 instance fully up to date. I installed IE6, and then ran Windows update to bring it up to it’s final version. Redmond won’t be producing a version of IE 7 for Windows 2k. But the last version of IE 6 is enough to get me past another couple of Linux/Firefox annoyances, such as my UMUC online web class site, which oddly keeps insisting that the current version of Firefox doesn’t support Javascript 1.5, on Linux, but when I run it on the Mac and Windows it’s fine. When that was done I had an IE I could run from within Linux for those occasions when I was hitting on a web site that only worked right in IE. As a test I logged onto my UMUC web classroom able to navigate around it without any problems.
After I had IE6 up to date, I could install the latest Windows Update active-x control and finish updating Windows. That was when I realized something else about running Windows inside a VM. What’s nice about Linux and MacOS is that doing a system backup is a fairly straightforward process, compared to Windows. There are no hidden system files or delicate registries…it’s just a matter of copying files from one place to another. In the VM, the Windows system disk resides on a disk image file and that makes it a simple matter to back up and do a system restore of Windows if necessary. I made several safety backups of my Windows VM image file as I went through the process of applying all the Windows 2000 service patches, until I had an up to date (or as up to date as it will ever be now that Redmond has pretty much stopped supporting it) Windows 2000 installation.
Then just for kicks I tried installing iTunes for Windows. You can share your iTunes library on your local network, and when I’m running XP on Mowgli I can listen to my iTunes library on Bagheera, which is my iPod’s authorized computer, through the iTunes instance I have installed on Windows. I thought it would be nice to be able to listen to my iTunes music while running Linux too. iTunes installed in the VM okay, and after I poked a couple holes in the CentOS firewall for its ports, it detected the shared library on Bagheera. But nothing would play. Nothing. Not the DRM’ed music nor the non-DRM-ed stuff I’d ripped from my own CDs. iTunes would just sit there, with not even the track elapsed time counter moving. As a test I tried directly importing and playing a local mp3 file into it and it still wouldn’t play. I don’t know if that’s a Win2k issue or one with the VM, but I ended up uninstalling iTunes. Oh well. I can still plug my iPod into Mowgli’s audio input jacks.
The soundcard is gracefully shared between Windows and Linux. I could get Windows media player to play some mp3 files in Windows and XMMS to play those same files in Linux. I didn’t try playing them at the same time, I just wanted to know that playing one wouldn’t stomp all over the other. It didn’t. The desktop sound effects in both CentOS and Windows worked fine while the VM was up.
I installed only the basic Sun Java VM, not the SDK. Then I installed my copy of Office 2000, mostly just for files that only Word or Excel would read. So now I pretty much have everything I need to keep running Linux nearly all the time, without needing to swap hard drives back and forth whenever I suddenly need to run a Windows only program.
Windows runs without any noticeable sluggishness on Mowgli inside this VM. Mowgli, let it be said, is a 2 Ghz AMD Athlon 3200 64 bit machine with 4 gigabytes of ram. I installed all this on 32 bit CentOS though.
It works. So far, I’ve zero complaints about it, and I’m a bit amazed. This was really very simple to do with this VM product.
January 27th, 2007 at 4:31 pm
I used Windows 98SE under Win4Lin 2 back in the day to run Quicken, Free Agent, and IE, and it was just awesome.
I’ve never gotten anything to run under Wine, either, even when I had a Windows partition with DLLs it could use.
January 27th, 2007 at 11:51 pm
I see Win4Lin has been around for a while. I’d never heard of it until I started digging around for an alternative to the VMWare stuff. Now that I’ve got it on my Linux desktop I’m sorry I didn’t go this route sooner. For once I was able to get all my banking stuff done without having to shut down Linux.
I’m hoping MoneyDance eventually starts supporting wallet sized check printing.