This section does not cite any sources.October 2020) (Learn how and when to remove this template message)(
X uses a client–server model: an X server communicates with various client programs. The server accepts requests for graphical output (windows) and sends back user input (from keyboard, mouse, or touchscreen). The server may function as:
- an application displaying to a window of another display system
- a system program controlling the video output of a PC
- a dedicated piece of hardware
This client–server terminology – the user's terminal being the server and the applications being the clients – often confuses new X users, because the terms appear reversed. But X takes the perspective of the application, rather than that of the end-user: X provides display and I/O services to applications, so it is a server; applications use these services, thus they are clients.
The communication protocol between server and client operates network-transparently: the client and server may run on the same machine or on different ones, possibly with different architectures and operating systems. A client and server can even communicate securely over the Internet by tunneling the connection over an encrypted network session.
An X client itself may emulate an X server by providing display services to other clients. This is known as "X nesting". Open-source clients such as Xnest and Xephyr support such X nesting.
To use an X client application on a remote machine, the user may do the following:
- on the local machine, open a terminal window
- use ssh with the X forwarding argument to connect to the remote machine
- request local display/input service (e.g., export DISPLAY=user's machine:0 if not using SSH with X forwarding enabled)
The remote X client application will then make a connection to the user's local X server, providing display and input to the user.
Alternatively, the local machine may run a small program that connects to the remote machine and starts the client application.
Practical examples of remote clients include:
- administering a remote machine graphically (similar to using remote desktop, but with single windows)
- using a client application to join with large numbers of other terminal users in collaborative workgroups
- running a computationally intensive simulation on a remote machine and displaying the results on a local desktop machine
- running graphical software on several machines at once, controlled by a single display, keyboard and mouse