Applications that would like to take advantage
of the Low Bandwidth extension to X (LBX) must make their connections to
an lbxproxy. These applications need to know nothing about LBX, they simply
connect to the lbxproxy as if were a regular server. The lbxproxy accepts
client connections, multiplexes them over a single connection to the X
server, and performs various optimizations on the X protocol to make it
faster over low bandwidth and/or high latency connections.

With regard to
authentication/authorization, lbxproxy simply passes along to the server
the credentials presented by the client. Since X clients will connect to
lbxproxy, it is important that the user's .Xauthority file contain entries
with valid keys associated with the network ID of the proxy. lbxproxy does
not get involved with how these entries are added to the .Xauthority file.
The user is responsible for setting it up.

The lbxproxy program has various
options, all of which are optional.

If :<display> is specified, the proxy
will use the given display port when listening for connections. The display
port is an offset from port 6000, identical to the way in which regular
X display connections are specified. If no port is specified on the command
line option, lbxproxy will default to port 63. If the port number that
the proxy tries to listen on is in use, the proxy will attempt to use another
port number. If the proxy is not using the Proxy Manager and the default
port number cannot be used, the port number that is used will be written
to stderr.

The other command line options that can be specified are:

-help

Prints a brief help message about the command line options.

-display dpy

Specifies the address of the X server supporting the LBX extension. If this
option is not specified, the display is obtained by the DISPLAY environment
variable.

-motion count

A limited number of pointer motion events are allowed
to be in flight between the server and the proxy at any given time. The
maximimum number of motion events that can be in flight is set with this
option; the default is 8.

-maxservers number

The default behavior of lbxproxy
is to manage a single server. However, lbxproxy can manage more than one
server. The default maximum number of servers is 20. The number of servers
can be overridden by setting the environment variable LBXPROXY_MAXSERVERS
to the desired number. The order of precedence from highest to lowest:
command line, environment variable, default number.

-[terminate|reset]

The
default behavior of lbxproxy is to continue running as usual when it's last
client exits. The -terminate option will cause lbxproxy to exit when the
last client exits. The -reset option will cause lbxproxy to reset itself
when the last client exits. Resetting causes lbxproxy to clean up it's state
and reconnect to the server.

-reconnect

The default behavior of lbxproxy
is to exit when its connection to the server is broken. The -reconnect option
will cause lbxproxy to just reset instead (see -reset above) and attempt
to reconnect to the server.

Report stream compression statistics
every time the proxy resets or receives a SIGHUP signal.

-nozeropad

Don't
zero out unused pad bytes in X requests, replies, and events.

-cheaterrors

Allows cheating on X protocol for the sake of improved performance. The
X protocol guarantees that any replies, events or errors generated by a
previous request will be sent before those of a later request. This puts
substantial restrictions on when lbxproxy can short circuit a request.
The -cheaterrors option allows lbxproxy to violate X protocol rules with
respect to errors. Use at your own risk.

-cheatevents

The -cheatevents option
allows lbxproxy to violate X protocol rules with respect to events as well
as errors. Use at your own risk.

At startup, lbxproxy "pre-interns"
a configurable list of atoms. This allows lbxproxy to intern a group of
atoms in a single round trip and immediately store the results in its cache.

While running, lbxproxy uses heuristics to decide when to delay sending
window property data to the server. The heuristics depend on the size of
the data, the name of the property, and whether a window manager is running
through the same lbxproxy.

Atom control is specified in the "AtomControl"
file, set up during installation of lbxproxy, with command line overrides.

The file is a simple text file. There are three forms of lines: comments,
length control, and name control. Lines starting with a '!' are treated as
comments. A line of the form

z length

specifies the minimum length in bytes before property data will be delayed.
A line of the form

optionsatomname

controls the given atom, where options is any combination of the following
characters: 'i' means the atom should be pre-interned; and 'w' means data for
properties with this name should be delayed only if a window manager is
also running through the same lbxproxy.