There is a add-on technology to X or VNC called NX by an Italian company called NoMachine. It's quite useful as it speeds up working on remote desktops via slow network connections (i.e. DSL pipes) substantially.
The libraries that implement NX are released under GPLv2 by that company. A server wrapping up the libraries' functionality is available as closed source from NoMachine or as a free product (GPLv2 again) by Fabian Franz, called FreeNX.
FreeNX itself is amazing as it is written in BASH (with a few helper functions in C). It's also able to mend some of the shortcomings of the NX architecture. E.g. stock NX requires a technical user called "nx" to able to ssh into the NX server with a public/private keypair. FreeNX can work around that for more secure set-ups.
One issue I bumped into quite regularly with Linux clients and Linux hosts from different distributions/localisations is that the keymaps are not compatible. This usually results in the ALTGr key not usable, so German keyboard users can't enter a pipe ("|"), tilde ("~") or a backslash ("\") character. Also the up and down keys are usually resulting in weird characters being pasted to the shell. Now all of that makes using a shell/terminal prompt quite interesting.
Thankfully though, the users from Ubuntuforums have documented a fix
which was also echoed in the German Ubuntuusers forum.
Make sure you have xmodmap installed on both client and server (i.e.
emerge -a xmodmap on Gentoo,
apt-get install x11-xserver-utils on Debian/Ubuntu).
You basically need to export your local keymap and make that known to the server:
scp localxmodmap server:/home/<username>/.Xmodmap
# now we're on the server
# for Debian / Ubuntu users only (to make the Xmodmap permanent)
# Gentoo users don't need this
if [ -e "/etc/debian_version" ] ; then echo "xmodmap ~/.Xmodmap" >> ~/.bashrc ; fi
~/.Xmodmap is sourced by /etc/X11/xinit/xinitrc on Gentoo for each user.
/etc/X11/Xmodmap can be used (by root) to set system-wide defaults.
On Debian you need to e.g. run
xmodmap via .bashrc as given in the above code snippet.