---
name: "xfs"
section: "1x"
platform: "linux"
package: "xfs"
version: "1:1.0.1-7"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/xfs/1x"
---

# xfs(1x)

X font server

## NAME

xfs - X font server

## SYNOPSIS

**xfs** \[ **-config** *configuration\_file* \] \[ **-daemon** \] \[ **-droppriv** \] \[ **-ls** *listen\_socket* \] \[ **-nodaemon** \] \[ **-pid** *pid\_file* \] \[ **-port** *tcp\_port* \] \[ **-user** *username* \]

## DESCRIPTION

**xfs** is the X Window System font server. It supplies fonts to X Window System display servers. The server is usually run by a system administrator, and started via **init**(\_\_osadmmansuffix\_\_). Users may also wish to start private font servers for specific sets of fonts.

To connect to a font server, see the documentation for your X server; it likely supports the syntax documented in the “FONT SERVER NAMES” section of [**X**(7)](/X/7.md).

## OPTIONS

- **-config** *configuration\_file*

  specifies the configuration file **xfs** will use. If this parameter is not specified, the default file, */usr/lib/X11/fs/config*, will be used.

- **-daemon**

  instructs **xfs** to fork and go into the background automatically at startup. If this option is not specified, **xfs** will run as a regular process (unless it was built to daemonize by default). When running as a daemon, **xfs** will attempt to create a file in which it stores its process ID, and will delete that file upon exit; see **-pid**.

- **-droppriv**

  instructs **xfs** to attempt to run as user and group *xfs* (unless the **-user** option is used). This has been implemented for security reasons, as **xfs** may have undiscovered buffer overflows or other paths for possible exploit, both local and remote. When using this option, you may also wish to specify ‘no-listen = tcp’ in the config file, which ensures that **xfs** will not to use a TCP port at all. By default, **xfs** runs with the user and group IDs of the user who invoked it.

- **-ls** *listen\_socket*

  specifies a file descriptor which is already set up to be used as the listen socket. This option is only intended to be used by the font server itself when automatically spawning another copy of itself to handle additional connections.

- **-nodaemon**

  instructs **xfs** not to daemonize (fork and detach from its controlling terminal). This option only has an effect if **xfs** is built to daemonize by default, which is not the stock configuration.

- **-pid** *pid\_file*

  instructs **xfs** to save its process ID into *pid\_file*, instead of the default, */var/run/xfs.pid*. If **xfs** is not running as a daemon, this option has no effect.

- **-port** *tcp\_port*

  specifies the TCP port number on which the server will listen for connections. The default port number is 7100. This option is ignored if **xfs** is configured to not listen to TCP transports at all (see “Configuration File Format” below).

- **-user** *username*

  instructs **xfs** to run as the user *username.* See **-droppriv** for why this may be desired. By default, **xfs** runs with the user and group IDs of the user who invoked it.

## INPUT FILES

**xfs** reads and serves any font file format recognized by the X server itself. It locates font files through the specification of a *catalogue*, which is delcared in **xfs**'s configuration file.

### Configuration File Format

**xfs** reads its configuration from */usr/lib/X11/fs/config* by default (see the **-config** option in the “OPTIONS” section above). The configuration language is a list of keyword and value pairs. Each keyword is followed by an equals sign (‘=’) and then the desired value.

Recognized keywords include:

- **alternate-servers** (list of *string*s)

  lists alternate servers for this font server. See the “FONT SERVER NAMES” section of [**X**(7)](/X/7.md) for the syntax of the string.

- **catalogue** (list of *string*s)

  declares as ordered list of font path element names from which fonts will be served. Use of the keyword ‘catalogue’ is very misleading at present: the current implementation only supports a single catalogue (‘all’), containing all of the specified fonts.

- **client-limit** (*cardinal*)

  determines the number of clients this font server will support before refusing service. This is useful for tuning the load on each individual font server.

- **clone-self** (*boolean*)

  indicates whether this font server should attempt to clone itself when the number of connected clients reaches the **client-limit**.

- **default-point-size** (*cardinal*)

  The default pointsize (in decipoints) for font requests that don't specify a point size. The default is 120.

- **default-resolutions** (list of *resolution*s)

  indicates the resolutions the server supports by default. This information may be used as a hint for pre-rendering, and substituted into requests for scaled fonts which do not specify a resolution. A *resolution* is a comma-separated pair of horizontal and vertical resolutions in pixels per inch. Multiple resolutions are separated by commas.

- **deferglyphs** (*string*)

  sets the mode for delayed fetching and caching of glyphs. *string* should be one of ‘none’, meaning glyphs deferment is disabled, ‘all’, meaning it is enabled for all fonts, and ‘16’, meaning it is enabled only for 16-bit fonts.

- **error-file** (*string*)

  indicates the filename of the error file. All warnings and errors will be logged here, unless **use-syslog** is set to a true value (see below).

- **no-listen** (*trans-type*)

  disables the specified transport type. For example, TCP/IP connections can be disabled with ‘no-listen = tcp’.

- **port** (*cardinal*)

  indicates the TCP port on which the server will listen for connections.

- **use-syslog** (*boolean*)

  determines whether errors and diagnostics should be reported via **syslog**(\_\_oslibmansuffix\_\_) (on supported systems) instead of being written to the **error-file** (see above).

### Example Configuration File

```
#
# sample font server configuration file
#
# allow a max of 10 clients to connect to this font server.
client-limit = 10
# When a font server reaches the above limit, start up a new one.
clone-self = on
# Identify alternate font servers for clients to use.
alternate-servers = hansen:7101,hansen:7102
# Look for fonts in the following directories.  The first is a set of
# Speedo outlines, the second is a set of misc bitmaps (such as terminal
# and cursor fonts), and the last is a set of 100dpi bitmaps.
#
catalogue = /usr/X11R6/lib/X11/fonts/speedo,
            /usr/X11R6/lib/X11/fonts/misc,
            /usr/X11R6/lib/X11/fonts/100dpi/
# in 12 points, decipoints
default-point-size = 120
# 100 x 100 and 75 x 75
default-resolutions = 100,100,75,75
# Specify our log filename.
error-file = /var/log/xfs.log
# Direct diagnostics to our own log file instead of using syslog.
use-syslog = off
```

## OUTPUT FILES

When operating in daemon mode, **xfs** sends diagnostic messages (errors and warnings) to the system log via the **syslog** C library function by default. However, these messages can be sent to an alternate location via the **error-file** and **use-syslog** configuration variables; see “Configuration File Format”, above.

## ASYNCHRONOUS EVENTS

**xfs** handles the following signals specially:

- *SIGTERM*

  causes the font server to exit cleanly.

- *SIGUSR1*

  causes **xfs** to re-read its configuration file.

- *SIGUSR2*

  causes **xfs** to flush any cached data it may have.

- *SIGHUP*

  causes **xfs** to reset, closing all active connections and re-reading the configuration file.

## BUGS

Multiple catalogues should be supported.

## FUTURE DIRECTIONS

Significant further development of **xfs** is unlikely. One of the original motivations behind it was the single-threaded nature of the X server — a user's X session could seem to ‘freeze up’ while the X server took a moment to rasterize a font. This problem with the X server, which remains single-threaded in all popular implementations to this day, has been mitigated on two fronts: machines have gotten much faster, and client-side font rendering (particularly via the Xft library) is the norm in contemporary software.

## AUTHORS

Dave Lemke, Network Computing Devices, Inc\
 Keith Packard, Massachusetts Institute of Technology

## SEE ALSO

[**X**(7)](/X/7.md), **init**(\_\_osadmmansuffix\_\_), **syslog**(\_\_oslibmansuffix\_\_), *The X Font Service Protocol*, *Font Server Implementation Overview*
