You love working inside your Linux desktop, but at the most inconvenient times you've got to reboot into Windows—whether to open a tricky Office file, try out a Windows application, or even just play a quick game. However, with some free tools and a Windows installation disk, you can have Windows apps running right on your Linux desktop and sharing the same desktop files. It's relatively painless, it takes only a little bit longer than a Windows XP install, and it works just like virtualizing Windows on a Mac with Parallels Coherence—except it's free. Here's how to set up Windows inside VirtualBox, and then get Windows apps running seamlessly inside your desktop.
Before getting started, make sure you have enough space on a hard drive for a Windows XP installation (meaning at least 5 GB) and enough memory to make two systems worthwhile.You can follow most of these steps if you want to try running Vista inside Linux, but your mileage might vary, of course.
If you're curious what the end result might look like, here's a screenshot from my quick installation. I would've loved to have gotten iTunes running, but I didn't have time to wait for all the post-XP-installation patches/upgrades to install to show you. (Click for larger image)
First off, we'll install VirtualBox. For most, that just involves heading to their package manager and installing all the virtualbox pacakges from the repositories; in Ubuntu 7.10 ("Gutsy Gibbon"), for example, you can use this terminal command
If you don't see VirtualBox in your installation program, the app's downloads page has packages for just about every major distribution. After installing, give your username permissions to run VirtualBox (substituting "su" on some systems):
sudo aptitude install virtualbox-ose virtualbox-ose-modules-generic
sudo usermod -G vboxusers -a [your username]
Restart your system for good measure, and now you should see "InnoTek VirtualBox" in your application menu—it was in "System Tools' in Gutsy. Get your XP CD ready and fire up VirtualBox. Choose "New" from the button menu, and then give your virtual system a name (WIndows XP usually works for me) and choose "Windows XP" from the bottom menu, then hit "Next." Decide how much RAM you'll dedicate to it in the next window, hit "Next," then, assuming you haven't done this before, hit "New" and follow the prompts to set up hard drive space for your virtual XP system. Make sure that partition is selected, hit "Next," then hit "Finish" to set up your new XP space.
Back at VirtualBox's main screen, see if the "CD/DVD-ROM" menu is highlighted. If not, click it, and then check "Mount CD/DVD Drive," "Host CD/DVD Drive" (and make sure it points to your system's CD drive), and check yes for "Enable Passthrough." Hit OK, select your XP image from the left-hand column and hit "Start." You'll launch into the hopefully familiar XP installation routine; follow it through until you're at your Windows desktop.
Now you've got a working Windows inside a resizable box, but let's take this further. Remove your XP CD from the drive, head up to the "Devices" menu and choose "Unmount CD/DVD-ROM." In the same menu, choose "Install Guest Additions." VirtualBox should prompt you to download the Guest Additions ISO file, then select it to be mounted. This creates a virtual CD drive in XP, which you can get to through Start Menu->My Computer (it might take a moment to show up). Double-click the "CD drive" and follow the prompts to install the extra tools. Reboot once you're done for good measure, and restart the XP machine.
Once that's finished, you've got a "Seamless" option available in the "Machine" menu, or by holding down the "Host" key (Right Control by default) and hitting "L." Either way you run it, it drops the big window and deposits Windows' bottom taskbar on your Linux desktop. You can also ditch the main VirtualBox window at this point, if you'd prefer.
The Start panel's default bottom position can be a problem for GNOME-based systems, since you've already got an app-switching bar there. I recommend either moving your Start or GNOME menus to the left or right-hand sides, or setting your Start menu to double-height, which puts the Start button just above the GNOME bar. Either way, make sure you un-check the "Keep the taskbar on top of other windows" option on the Windows toolbar, or you might see a few graphical glitches. Otherwise, pretty neat, huh?
Now for the final piece: Synchronizing your Windows and Linux desktops. If you're running in Seamless mode, hold down the "Host" key and hit "Home" to bring back the virtual XP desktop. Select the "Device" menu and choose "Shared Folders." You'll be prompted to choose a folder from your Linux system; select your Desktop folder (usually found at /home/your username/Desktop). Head back to Windows, launch a command prompt (enter "cmd" into the "Run" dialog), and enter the following:
If it worked, you should see an X: network drive mounted in your "My Computer" window.
net use x: \\vboxsvr\Desktop
Now for the final touch: Synchronizing the two desktops. In XP, hit the "Run" dialog and type in "regedit." Make a backup first (File->Export), and then navigate to HKEY_CURRENT_USER -> Software -> Microsoft -> Windows -> CurrentVersion -> Explorer -> User Shell Folders. Double-click to open the properties on the "Desktop" key you'll find there, and enter a new value of (without the quotes) "x:". You should see the change immediately—everything you put on your Linux desktop is shown in Windows and vice versa—handy for storing downloads grabbed in Windows.
If you'd rather do without the Start menu/panel integration and just want a few custom apps to open in their own windows, check out a helpful guide at Linux.com to getting this set up with some free tools and VMWare Server, which, while not quite as user-friendly as VirtualBox, is still a pretty nice package.
Got your own Windows-inside-Linux set-ups (besides Wine, which is another thing entirely) you feel like sharing? Have any suggestions/tweaks to this step-by-step? Share it in the comments and help two disparate operating systems find some harmony.