Can someone explain how NX works?
I can't seem to find much about how the NX protocol actually works. I have heard it does something with sending X11 commands. But does this mean that the listening clients need to have an x server to run the actual commands and display them?
Highly simplified answer: it is more like VNC, where there is a "server" component running on the system running the desktop, and a "client" component running on the system where the user is.
In both the case of VNC and NX, the "server" component has a X-like display that the local programs attach to and treat like it was an X display.
The user then runs a "client" program that connects to the server, and the server uses its protocol to send the display back to the client and receive input from the server.
Like VNC, NX can be configured so that the client can disconnect from the NX session and reconnect later (and from alternate locations).
NX has options which can make it more responsive across lines which are slower and have higher latency, these can be selected by the client before connections are made.
In my experience, NX is slightly more flexible than VNC sessions; however I have found that really old X applications will suffer for some reason; I have a backup management program that doesn't display certain information in NX that it will in VNC. I believe it has something to do with the client-side font installation. Responsiveness varies depending on what you are doing compared to VNC, as it has to be said that nobody will be streaming video across either. VNC is more wide spread and more people have experience with it. The single feature people might care about for VNC is the capability to do "desktop sharing" with it as well (for example), I don't believe NX will do that.
Personally I'm deploying NX in situations where people are going to be using the system for highly-specified applications (CAD tools and the like) and have their own local desktops (which are usually windows these days), and use VNC for situations where people have linux desktops and want to do desktop-sharing.
You can sort of think about it as an X display system that's highly optimized for operating across networks. I could list more details, but honestly, there's a wealth of great info on the NX wikipedia article, so I'll suggest you go read up over there.
To answer your question, no, the clients don't need to run a full X server. They will need to run a NX client, though.