Posted on | June 15, 2009 | 3 Comments
Being over-loaded with work is a vicious cycle, especially when the work involves more maintenance than creativity. The cycle goes something like this:
- 15 things require immediate attention
- You give immediate attention to 15 things at once
- Despite the cycle of #1 and #2, #1 still persists at the end of the day
Even if I had the space in my small corner of the world to set up 10 different workstations, I don’t think the breakers would hold. I thought about just adding more monitors since they’ve become so cheap, the problem is that I need to keep 14 urgent things out of view while working on a single task. This is not like the classic case of information overload, where you have temptations on your desktop like e-mail, instant messengers, IRC clients, etc all competing with your editor or terminal to get some love from your eye balls. Here, in this case, I really have 15 urgent things making me quite anxious that unfortunately relate to each other causing them to be in progress at once.
Some of the tasks involve fiddling with system libraries, testing bleeding edge versions of various applications and other things that could lead to melt downs. I had to get these tasks on different systems and I needed a desktop for each one.
I have used VNC or SDL frame buffers in the past when working with Xen guests. VNC’s idea of 24 bit depth is a little different than mine, plus the mouse is extremely akward in tracking. SDL does a bit better on the rendering end, however the pointer is extremely over-sensitive. Having 6 VM’s open at once on a single desktop is also just protracting my problem, Its too easy to switch from one window to the next. I needed my faithful editor, in full glory, full screen with pointer tracking that could cut and paste huge chunks of code.
What I finally did was debootstrap 6 Ubuntu Jaunty domains (after previously doing an apt-mirror of the main / universe repository). I then installed the ubuntu-desktop package (which is what makes Ubuntu .. well .. Ubuntu) and configured X to play nicely with the virtual frame buffer (thanks, Steven!).
I then did what most people would consider taboo, I turned on XDMCP for each guest (safe, I’m behind a very paranoid NAT) and started various remote sessions. Switching between them is as simple as ctrl-alt-f(6 – 10), and you’re completely oblivious to the fact that you’re working on a deboostrapped paravirtualized Xen domain.
No more hassles with VNC/SDL pointer tracking, my apps run as if they’re running on the native display (which , technically, they are) .. its just as if I was using some kind of VGA passthrough.
This helped me become engrossed with one task at a time and actually make some real progress today. Sure, I have multiple windows and desktops on each virtual machine, but they are consigned to a single task and have disposable file systems. Using SSHFS (a FUSE backed SSH driven file system), I was able to quickly set up a shared folder to make moving patches / etc from guest to guest rather painless.
I am in no way advising anyone to turn on XDMCP when on a public network, however when working with multiple Xen domains locally that are running X, its so much better and less cluttering than using VNC or SDL.
XDMCP has been around for years, I can’t believe that it just dawned on me to use it today. This is really easy to set up with any modern Linux based OS using a pv_ops enabled kernel. Though I do appreciate hardware assisted virtualization, this small victory shows why I much prefer paravirtualization with Xen. I don’t have VT extensions on this machine, so KVM was out of the question for me.