I would recommend using VNC, possible tunneled over SSH or through a VPN for security. You will need to run a VNC server on each machine you want to access. The
tightvnc package contains
vncserver, this launches an X11 server separate from the one displayed on that computer's monitor, and a VNC server to give you access to it. There is also a package
x11vnc, it contains a VNC server that will connect to the X11 server already running on the computer, which is much more convenient for screen sharing.
x11vnc will act like teamviewer.
As for VNC clients,
tightvnc comes with
vncviewer. You may also want to try the
vinagre that slm mentions.
As for other options, X11 forwarding would allow an application to display itself on a different computer, but you can't move the display between different computers, and it has some really crippling performance issues. Many applications now come with a web interface, e.g. some popular bittorrent clients, and this would be most efficient by far if the applications you need support this.