### 16.10 The Server Mode

In order to give access to the GPS capabilities from external processes (e.g. `Emacs`), GPS can be launched in server mode.

The two relevant command line switches are `--server` and `--hide`.

`--server` will open a socket on the given port, allowing multiple clients to connect to a running GPS, and sending GPS shell or python commands.

`--hide` tells GPS not to display its main window when starting. note that under unix systems, you still need to have access to the current screen (as determined by the `DISPLAY` environment variable) in this mode.

Using the two switches together provides a way to launch GPS as a background process with no initial user interface.

Clients connecting through a standard socket have access to a simple shell using `GPS>>` as the separating prompt between each command. This is needed in order to determine when the output (result) of a command is terminated.

All the GPS shell commands (as defined in The GPS Shell) are available from this shell. In addition, the python interpreter, if enabled, is also available through the use of the `python` prefix before a python command.

For example, sending `pwd` through the socket will send the `pwd` command through the GPS shell and display the result on the socket; similarly, sending `python GPS.pwd()` will send the `GPS.help()` command through the python interpreter (see The Python Interpreter for more details).

The socket shell provides also additional commands:

- logout This command will inform the GPS server that the connection should now be closed.
- id <string> This command will register the current session with a given string. This string can then be used within GPS itself (for example via a .xml or python plug-in) to display extra information to the client via the socket, using the command GPS.Socket().send.

For example, let suppose that we start gps with the `--server=1234` command: this will bring up GPS as usual.

Now, on a separate terminal, create a simple client by typing the following:

         telnet localhost 1234
         Trying 127.0.0.1...
         Connected to localhost.
         Escape character is '^]'.
         GPS>> id test-1
         id set to 'test-1'
         GPS>> pwd
         c:\working-dir\
         GPS>>

Then in the GPS Python Console:

         >>> GPS.Socket ("test-1").send ("hello, it's time to logout\n");

At this point, the following is received on the client (telnet) side:

         GPS>> hello, it's time to logout

We can then close the client:

         logout
         Connection closed by foreign host.