experimenting with vnc
My home setup consists of a server in the basement with thin clients in the upstairs office. I love this setup because it means the office is entirely solid state; no fans or disks to make noise. It's the ultimate silent PC.
Method 1: XDMCP
I typically don't run applications on the thin clients, rather I run an X server with -broadcast to get an XDMCP session from my server. From that point on, everything (gnome, window manager, browser, xterms, etc.) runs on the server with $DISPLAY pointing at the thin client. This is pretty simple to set up, just change gdm.conf on the server:
--- gdm.conf.dpkg-dist 2007-05-29 05:08:37.000000000 -0400 +++ gdm.conf 2008-02-07 09:56:42.000000000 -0500 @@ -59,2 +59,3 @@ [xdmcp] +Enable=true @@ -74,2 +75,3 @@ [servers] +0=inactive
and on the thin client, in /etc/rc.local:
Method 2: VNC
Running X remotely, even on a 100 Mbit network, can get slow. In particular, Firefox just crawls. Making a new tab (blank page), chug chug. Rendering pages, chug chug. It's plenty usable, and you can get used to it, but it's a shock to go back to a normal PC and see the speedup that local rendering buys. (Xterms, btw, are plenty fast on remote X because they're just sending characters to the server, which it then renders locally.)
So I started experimenting with VNC. To my delight, VNC restores Firefox's rendering speed. In fact, VNC is fast all around. I see some very minor latency in my xterms since they're now sending graphics over the link instead of characters, but it's barely a price to pay for the overall speedup.
Here's what I did to make this work. First install the server, apt-get install vnc4server, then create three entries in inetd.conf to correspond to the screens I have attached to the thin clients:
server # cat >> /etc/inetd.conf <<EOF 5910 stream tcp nowait nobody /usr/bin/Xvnc4 Xvnc4 -inetd \ -depth 24 -geometry 1024x768 -fp tcp/oliva:7100 \ -query localhost -once -securitytypes none 5912 stream tcp nowait nobody /usr/bin/Xvnc4 Xvnc4 -inetd \ -depth 24 -geometry 1280x1024 -dpi 85 -fp tcp/oliva:7100 \ -query localhost -once -securitytypes none 5919 stream tcp nowait nobody /usr/bin/Xvnc4 Xvnc4 -inetd \ -depth 24 -geometry 1920x1200 -dpi 93 -fp tcp/oliva:7100 \ -query localhost -once -securitytypes none EOF server # /etc/init.d/openbsd-inetd restart
On the thin client I apt-get install xvnc4viewer, then replace the -broadcast line in /etc/rc.local with:
# this corresponds to the 1920x1200 entry, suitable for a 24" LCD xinit /usr/bin/xvnc4viewer -fullcolor -fullscreen server:5919
Not everything is perfect using VNC. Here are a few problems I've run into:
caps-lock: I normally override caps-lock to be mod4 to control my window manager. It turns out that xvnc4viewer doesn't forward the caps-lock to Xvnc4, instead it's handled on the thin client's X server. That means that it can't be remapped inside the VNC session, instead I have to do it partly on the thin client:
ssh t5710 "xmodmap -e 'remove lock = Caps_Lock' \ -e 'keysym Caps_Lock = Super_R'
then inside the VNC session:
xmodmap -e 'add mod4 = Super_L Super_R'
mouse: My mouse has a bunch of buttons, which normally I can remap with xmodmap. With this setup, though, I only get 5 buttons (left, middle, right, scroll up, scroll down). I haven't figured out a workaround for this yet.