Okay, sounds like a quick run-down of the basics is needed. Put on your learning hat!
Linux (and all other UNIX systems such as HP-UX, AIX, Solaris, etc) use a system called X11 for graphical applications. An X11 server controls a graphics card in a PC, and an X11 client (i.e. an application) uses network-based code to ask for things to be drawn on a given X11 server. So, on a typical Linux desktop, that means the screen is controlled by the X.Org server, and apps like Firefox connect to the server in order to show things.
The server to connect to is contained in an environmental variable called DISPLAY - and if the app fails to connect to the named display, it dies:
Code:
jms@osc-bigmac:~$ echo $DISPLAY
:0.0
jms@osc-bigmac:~$ DISPLAY=nipples xlogo
Error: Can't open display: nipples
One reason for doing things using network-based code is it means apps can transparently display on a remote X server - for example, I can connect from machine A (a desktop) to machine B (a server with no graphics card), and run applications which are displayed on A's desktop. This is option 1: Run an X11 server on your machine, connect to the remote system using an SSH client, and run the remote apps with a local display
Alternatively, there's the VNC solution I perfected. What this does is slightly different - you're aware of how VNC exports a given screen over a network? Well You can configure things such that VNC exports a new X11 server, running on machine B, over VNC - you can connect to that VNC session using a VNC client on machine A. The upside is you don't need to use anything scary like SSH (it's all graphical). The downside is increased bandwidth requirements and lower security