<?xml version="1.0" encoding="UTF-8"?>

<chapter xml:id="configuring-guacamole" 
    xmlns="http://docbook.org/ns/docbook" version="5.0" xml:lang="en"
    xmlns:xi="http://www.w3.org/2001/XInclude">

    <title>Configuring Guacamole</title>
    <para>After installing Guacamole, you need to configure users and connections before Guacamole
        will work. This chapter covers general configuration of Guacamole and the use of its default
        authentication method.</para>
    <para>Guacamole's default authentication method reads all users and connections from a single
        file called <filename>user-mapping.xml</filename>. This authentication method is intended to
        be:</para>
    <orderedlist>
        <listitem>
            <para>Sufficient for small deployments of Guacamole.</para>
        </listitem>
        <listitem>
            <para>A relatively-easy means of verifying that Guacamole has been properly set
                up.</para>
        </listitem>
    </orderedlist>
    <para>Other, more complex authentication methods which use backend databases, LDAP, etc. are
        discussed in a separate, dedicated chapters.</para>
    <para>Regardless of the authentication method you use, Guacamole's configuration always consists
        of two main pieces: a directory referred to as <varname>GUACAMOLE_HOME</varname>, which is
        the primary search location for configuration files, and
            <filename>guacamole.properties</filename>, the main configuration file used by Guacamole
        and its extensions.</para>
    <section xml:id="guacamole-home">
        <title><varname>GUACAMOLE_HOME</varname> (<filename>/etc/guacamole</filename>)</title>
        <indexterm xmlns:xl="http://www.w3.org/1999/xlink">
            <primary><varname>GUACAMOLE_HOME</varname></primary>
        </indexterm>
        <para><varname>GUACAMOLE_HOME</varname> is the name given to Guacamole's configuration
            directory, which is located at <filename>/etc/guacamole</filename> by default. All
            configuration files, extensions, etc. reside within this directory. The structure of
                <varname>GUACAMOLE_HOME</varname> is rigorously defined, and consists of the
            following optional files:</para>
        <variablelist>
            <varlistentry>
                <term><filename>guacamole.properties</filename></term>
                <listitem>
                    <para>The main Guacamole configuration file. Properties within this file dictate
                        how Guacamole will connect to <package>guacd</package>, and may configure
                        the behavior of installed authentication extensions.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><filename>logback.xml</filename></term>
                <listitem>
                    <para>Guacamole uses a logging system called Logback for all messages. By
                        default, Guacamole will log to the console only, but you can change this by
                        providing your own Logback configuration file.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><filename>extensions/</filename></term>
                <listitem>
                    <para>The install location for all Guacamole extensions. Guacamole will
                        automatically load all <filename>.jar</filename> files within this directory
                        on startup.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><filename>lib/</filename></term>
                <listitem>
                    <para>The search directory for libraries required by any Guacamole extensions.
                        Guacamole will make the <filename>.jar</filename> files within this
                        directory available to all extensions. If your extensions require additional
                        libraries, such as database drivers, this is the proper place to put
                        them.</para>
                </listitem>
            </varlistentry>
        </variablelist>
        <section xml:id="overriding-guacamole-home">
            <title>Overriding <varname>GUACAMOLE_HOME</varname></title>
            <para>If you cannot or do not wish to use <filename>/etc/guacamole</filename> for
                    <varname>GUACAMOLE_HOME</varname>, the location can be overridden through any of
                the following methods:</para>
            <orderedlist>
                <listitem>
                    <para>Creating a directory named <filename>.guacamole</filename>, within the
                        home directory of <emphasis>the user running the servlet
                            container</emphasis>. This directory will automatically be used for
                            <varname>GUACAMOLE_HOME</varname> if it exists.</para>
                </listitem>
                <listitem>
                    <para>Specifying the full path to an alternative directory with the environment
                        variable <varname>GUACAMOLE_HOME</varname>. <emphasis>Be sure to consult the
                            documentation for your servlet container to determine how to properly
                            set environment variables.</emphasis></para>
                </listitem>
                <listitem>
                    <para>Specifying the full path to an alternative directory with the system
                        property <property>guacamole.home</property>.</para>
                </listitem>
            </orderedlist>
        </section>
    </section>

    <section xml:id="initial-setup">
        <title><filename>guacamole.properties</filename></title>
        <indexterm xmlns:xl="http://www.w3.org/1999/xlink">
            <primary><filename>guacamole.properties</filename></primary>
        </indexterm>
        <indexterm xmlns:xl="http://www.w3.org/1999/xlink">
            <primary>configuration</primary>
        </indexterm>
        <para>The Guacamole web application uses one main configuration file called
                <filename>guacamole.properties</filename>. This file is the common location for all
            configuration properties read by Guacamole or any extension of Guacamole, including
            authentication providers.</para>
        <para>In previous releases, this file had to be in the classpath of your servlet container.
            Now, the location of <filename>guacamole.properties</filename> can be explicitly defined
            with environment variables or system properties, and the classpath is only used as a
            last resort. When searching for <filename>guacamole.properties</filename>, Guacamole
            will check, in order:</para>
        <orderedlist>
            <listitem>
                <para>Within <varname>GUACAMOLE_HOME</varname>, as defined above.</para>
            </listitem>
            <listitem>
                <para>The classpath of the servlet container.</para>
            </listitem>
        </orderedlist>
        <para>The <filename>guacamole.properties</filename> file is optional and is used to
            configure Guacamole in situations where the defaults are insufficient, or to provide
            additional configuration information for extensions. There are several standard
            properties that are always available for use:</para>
        <variablelist>
            <varlistentry>
                <term><indexterm xmlns:xl="http://www.w3.org/1999/xlink">
                        <primary>api-session-timeout</primary>
                    </indexterm><parameter>api-session-timeout</parameter></term>
                <listitem>
                    <para>The amount of time, in minutes, to allow Guacamole sessions
                        (authentication tokens) to remain valid despite inactivity. If omitted,
                        Guacamole sessions will expire after 60 minutes of inactivity.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm xmlns:xl="http://www.w3.org/1999/xlink">
                        <primary>available-languages</primary>
                    </indexterm><parameter>available-languages</parameter></term>
                <listitem>
                    <para>A comma-separated whitelist of language keys to allow as display language
                        choices within the Guacamole interface. For example, to restrict Guacamole
                        to only English and German, you would specify:</para>
                    <informalexample>
                        <programlisting>available-languages: en, de</programlisting>
                    </informalexample>
                    <para>As English is the fallback language, used whenever a translation key is
                        missing from the chosen language, English should only be omitted from this
                        list if you are absolutely positive that no strings are missing.</para>
                    <para>The corresponding JSON of any built-in languages not listed here will
                        still be available over HTTP, but the Guacamole interface will not use them,
                        nor will they be used automatically based on local browser language. If
                        omitted, all defined languages will be available.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm xmlns:xl="http://www.w3.org/1999/xlink">
                        <primary>guacd-hostname</primary>
                    </indexterm><parameter>guacd-hostname</parameter></term>
                <listitem>
                    <para>The host the Guacamole proxy daemon (<package>guacd</package>) is
                        listening on. If omitted, Guacamole will assume <package>guacd</package> is
                        listening on localhost.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm xmlns:xl="http://www.w3.org/1999/xlink">
                        <primary>guacd-port</primary>
                    </indexterm><parameter>guacd-port</parameter></term>
                <listitem>
                    <para>The port the Guacamole proxy daemon (<package>guacd</package>) is
                        listening on. If omitted, Guacamole will assume <package>guacd</package> is
                        listening on port 4822.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm xmlns:xl="http://www.w3.org/1999/xlink">
                        <primary>guacd-ssl</primary>
                    </indexterm><parameter>guacd-ssl</parameter></term>
                <listitem>
                    <para>If set to "true", Guacamole will require SSL/TLS encryption between the
                        web application and <package>guacd</package>. By default, communication
                        between the web application and <package>guacd</package> will be
                        unencrypted.</para>
                    <para>Note that if you enable this option, you must also configure
                            <package>guacd</package> to use SSL via command line options. These
                        options are documented in the manpage of <package>guacd</package>. You will
                        need an SSL certificate and private key.</para>
                </listitem>
            </varlistentry>
        </variablelist>
        <example>
            <title>Example <filename>guacamole.properties</filename></title>
            <programlisting xml:id="guacamole.properties" version="5.0" xml:lang="en"># Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port:     4822</programlisting>
        </example>
    </section>
    <section xml:id="webapp-logging">
        <title>Logging within the web application</title>
        <indexterm>
            <primary>logging</primary>
        </indexterm>
        <para>By default, Guacamole logs all messages to the console. Servlet containers like Tomcat
            will automatically redirect these messages to a log file,
                <filename>catalina.out</filename> in the case of Tomcat, which you can read through
            while Guacamole runs. Messages are logged at four different log levels, depending on
            message importance and severity:</para>
        <variablelist>
            <varlistentry>
                <term><indexterm>
                        <primary>logging</primary>
                        <secondary>errors</secondary>
                    </indexterm><constant>error</constant></term>
                <listitem>
                    <para>Errors are fatal conditions. An operation, described in the log message,
                        was attempted but could not proceed, and the failure of this operation is a
                        serious problem that needs to be addressed.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm>
                        <primary>logging</primary>
                        <secondary>warnings</secondary>
                    </indexterm><constant>warn</constant></term>
                <listitem>
                    <para>Warnings are generally non-fatal conditions. The operation continued, but
                        encountered noteworthy problems.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm>
                        <primary>logging</primary>
                        <secondary>info</secondary>
                    </indexterm><constant>info</constant></term>
                <listitem>
                    <para>"Info" messages are purely informational. They may be useful or
                        interesting to administrators, but are not generally critical to proper
                        operation of a Guacamole server.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm>
                        <primary>logging</primary>
                        <secondary>debug</secondary>
                    </indexterm><constant>debug</constant></term>
                <listitem>
                    <para>Debug messages are highly detailed and oriented toward development. Most
                        debug messages will contain stack traces and internal information that is
                        useful when investigating problems within code. It is expected that debug
                        messages, though verbose, will not affect performance.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><indexterm>
                        <primary>logging</primary>
                        <secondary>trace</secondary>
                    </indexterm><constant>trace</constant></term>
                <listitem>
                    <para>Trace messages are similar to debug messages in intent and verbosity, but
                        are so low-level that they may affect performance due to their frequency.
                        Trace-level logging is rarely necessary, and is mainly useful in providing
                        highly detailed context around issues being investigated.</para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>Guacamole logs messages using a logging framework called <link
                xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://logback.qos.ch/"
                >Logback</link> and, by default, will only log messages at the
                "<constant>info</constant>" level or higher. If you wish to change the log level, or
            configure how or where Guacamole logs messages, you can do so by providing your own
                <filename>logback.xml</filename> file within <varname>GUACAMOLE_HOME</varname>. For
            example, to log all messages to the console, even "<constant>debug</constant>" messages,
            you might use the following <filename>logback.xml</filename>:</para>
        <informalexample>
            <programlisting>&lt;configuration>

    &lt;!-- Appender for debugging -->
    &lt;appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
        &lt;encoder>
            &lt;pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&lt;/pattern>
        &lt;/encoder>
    &lt;/appender>

    &lt;!-- Log at DEBUG level -->
    &lt;root level="debug">
        &lt;appender-ref ref="GUAC-DEBUG"/>
    &lt;/root>

&lt;/configuration></programlisting>
        </informalexample>
        <para>Guacamole and the above example configure only one appender which logs to the console,
            but Logback is extremely flexible and allows any number of appenders which can each log
            to separate files, the console, etc. based on a number of criteria, including the log
            level and the source of the message.</para>
        <para>More thorough <link xmlns:xlink="http://www.w3.org/1999/xlink"
                xlink:href="http://logback.qos.ch/manual/configuration.html">documentation on
                configuring Logback</link> is provided on the Logback project's web site.</para>
    </section>
    <section xml:id="basic-auth">
        <title>Using the default authentication</title>
        <indexterm>
            <primary>authentication</primary>
        </indexterm>
        <para>Guacamole's default authentication module is simple and consists of a mapping of
            usernames to configurations. This authentication module comes with Guacamole and simply
            reads usernames and passwords from an XML file. It is always enabled, but will only read
            from the XML file if it exists, and is always last in priority relative to any other
            authentication extensions.</para>
        <para>There are other authentication modules available. The Guacamole project provides
            database-backed authentication modules with the ability to manage connections and users
            from the web interface, and other authentication modules can be created using the
            extension API provided along with the Guacamole web application,
                <package>guacamole-ext</package>.</para>
        <section xml:id="user-mapping">
            <title><filename>user-mapping.xml</filename></title>
            <indexterm>
                <primary>user-mapping.xml</primary>
            </indexterm>
            <para>The default authentication provider used by Guacamole reads all username,
                password, and configuration information from a file called the "user mapping"
                located at <filename>GUACAMOLE_HOME/user-mapping.xml</filename>. An example of a
                user mapping file is included with Guacamole, and looks something like this:</para>
            <programlisting>&lt;user-mapping>
	
    &lt;!-- Per-user authentication and config information -->
    &lt;authorize username="USERNAME" password="PASSWORD">
        &lt;protocol>vnc&lt;/protocol>
        &lt;param name="hostname">localhost&lt;/param>
        &lt;param name="port">5900&lt;/param>
        &lt;param name="password">VNCPASS&lt;/param>
    &lt;/authorize>

    &lt;!-- Another user, but using md5 to hash the password
         (example below uses the md5 hash of "PASSWORD") -->
    &lt;authorize 
            username="USERNAME2"
            password="319f4d26e3c536b5dd871bb2c52e3178"
            encoding="md5">

        &lt;!-- First authorized connection -->
        &lt;connection name="localhost">
            &lt;protocol>vnc&lt;/protocol>
            &lt;param name="hostname">localhost&lt;/param>
            &lt;param name="port">5901&lt;/param>
            &lt;param name="password">VNCPASS&lt;/param>
        &lt;/connection>

        &lt;!-- Second authorized connection -->
        &lt;connection name="otherhost">
            &lt;protocol>vnc&lt;/protocol>
            &lt;param name="hostname">otherhost&lt;/param>
            &lt;param name="port">5900&lt;/param>
            &lt;param name="password">VNCPASS&lt;/param>
        &lt;/connection>

    &lt;/authorize>

&lt;/user-mapping></programlisting>
            <para>Each user is specified with a corresponding
                    <code>&lt;authorize></code> tag. This tag contains all
                authorized connections for that user, each denoted with a
                    <code>&lt;connection></code> tag. Each
                    <code>&lt;connection></code> tag contains a corresponding
                protocol and set of protocol-specific parameters, specified with
                the <code>&lt;protocol></code> and <code>&lt;param></code> tags
                respectively.</para>
            <section xml:id="user-setup">
                <title>Adding users</title>
                <indexterm>
                    <primary>users</primary>
                    <secondary>adding</secondary>
                </indexterm>
                <para>When using
                        <classname>BasicFileAuthenticationProvider</classname>,
                    username/password pairs are specified with
                        <code>&lt;authorize></code> tags, which each have a
                        <code>username</code> and <code>password</code>
                    attribute. Each <code>&lt;authorize></code> tag authorizes a
                    specific username/password pair to access all connections
                    within the tag:</para>
                <programlisting>&lt;authorize username="<replaceable>USER</replaceable>" password="<replaceable>PASS</replaceable>">
    ...
&lt;/authorize></programlisting>
                <para>In the example above, the password would be listed in
                    plaintext. If you don't want to do this, you can also
                    specify your password hashed with MD5:</para>
                <programlisting>&lt;authorize username="<replaceable>USER</replaceable>"
           password="<replaceable>319f4d26e3c536b5dd871bb2c52e3178</replaceable>"
           encoding="md5">
    ...
&lt;/authorize></programlisting>
                <para>After modifying user-mapping.xml, the file will be
                    automatically reread by Guacamole, and your changes will
                    take effect immediately. The newly-added user will be able
                    to log in - no restart of the servlet container is
                    needed.</para>
            </section>
            <section xml:id="connection-setup">
                <title>Adding connections to a user</title>
                <indexterm>
                    <primary>connections</primary>
                    <secondary>adding</secondary>
                </indexterm>
                <para>To specify a connection within an
                        <code>&lt;authorize></code> tag, you can either list a
                    single protocol and set of parameters (specified with a
                        <code>&lt;protocol></code> tag and any number of
                        <code>&lt;param></code> tags), in which case that user
                    will have access to only one connection named "DEFAULT", or
                    you can specify one or more connections with one or more
                        <code>&lt;connection></code> tags, each of which can be
                    named and contains a <code>&lt;protocol></code> tag and any
                    number of <code>&lt;param></code> tags.</para>
            </section>
        </section>
    </section>
    <section xml:id="connection-configuration">
        <title xml:id="configuring-connections">Configuring connections</title>
        <para>Each protocol supported by Guacamole has its own set of configuration parameters.
            These parameters typically describe the hostname and port of the remote desktop server,
            the credentials to use when connecting, if any, and the size and color depth of the
            display. If the protocol supports file transfer, options for enabling that functionality
            will be provided as well.</para>
        <section xml:id="vnc">
            <title>VNC</title>
            <indexterm>
                <primary>VNC</primary>
            </indexterm>
            <para>The VNC protocol is the simplest and first protocol supported by Guacamole.
                Although generally not as fast as RDP, many VNC servers are adequate, and VNC over
                Guacamole tends to be faster than VNC by itself due to decreased bandwidth
                usage.</para>
            <para>VNC support for Guacamole is provided by the <package>libguac-client-vnc</package>
                library, which will be installed as part of guacamole-server if the required
                dependencies are present during the build.</para>
            <section xml:id="vnc-network-parameters">
                <title>Network parameters</title>
                <para>With the exception of reverse-mode VNC connections, VNC works by making
                    outbound network connections to a particular host which runs one or more VNC
                    servers. Each VNC server is associated with a display number, from which the
                    appropriate port number is derived.</para>
                <informaltable frame="all" xml:id="vnc-parameters">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>hostname</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>hostname</secondary>
                                        </indexterm>The hostname or IP address of the VNC server
                                        Guacamole should connect to.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>port</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>port</secondary>
                                        </indexterm>The port the VNC server is listening on, usually
                                        5900 or 5900 + <replaceable>display number</replaceable>.
                                        For example, if your VNC server is serving display number 1
                                        (sometimes written as <constant>:1</constant>), your port
                                        number here would be 5901.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>autoretry</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>retrying connections</secondary>
                                        </indexterm>The number of times to retry connecting before
                                        giving up and returning an error. In the case of a reverse
                                        connection, this is the number of times the connection
                                        process is allowed to time out.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-authentication">
                <title>Authentication</title>
                <para>The VNC standard defines only password based authentication. Other
                    authentication mechanisms exist, but are non-standard or proprietary. Guacamole
                    supports only the password method.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>password</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>password</secondary>
                                        </indexterm>The password to use when attempting
                                        authentication, if any. This parameter is optional.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-display-settings">
                <title>Display settings</title>
                <para>VNC servers do not allow the client to request particular display sizes, so
                    you are at the mercy of your VNC server with respect to display width and
                    height. However, to reduce bandwidth usage, you may request that the VNC server
                    reduce its color depth. Guacamole will automatically detect 256-color images,
                    but this can be guaranteed for absolutely all graphics sent over the connection
                    by forcing the color depth to 8-bit. Color depth is otherwise dictated by the
                    VNC server.</para>
                <para>If you are noticing problems with your VNC display, such as the lack of a
                    mouse cursor, the presence of multiple mouse cursors, or strange colors (such as
                    blue colors appearing more like orange or red), these are typically the result
                    of bugs or limitations within the VNC server, and additional parameters are
                    available to work around such issues.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>color-depth</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>color depth</secondary>
                                        </indexterm>The color depth to request, in bits-per-pixel.
                                        This parameter is optional. If specified, this must be
                                        either 8, 16, 24, or 32. Regardless of what value is chosen
                                        here, if a particular update uses less than 256 colors,
                                        Guacamole will always send that update as a 256-color
                                        PNG.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>swap-red-blue</parameter></entry>
                                <entry>
                                    <para>If the colors of your display appear wrong (blues appear
                                        orange or red, etc.), it may be that your VNC server is
                                        sending image data incorrectly, and the red and blue
                                        components of each color are swapped. If this is the case,
                                        set this parameter to "true" to work around the problem.
                                        This parameter is optional.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>cursor</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>mouse pointer</secondary>
                                        </indexterm>If set to "remote", the mouse pointer will be
                                        rendered remotely, and the local position of the mouse
                                        pointer will be indicated by a small dot. A remote mouse
                                        cursor will feel slower than a local cursor, but may be
                                        necessary if the VNC server does not support sending the
                                        cursor image to the client.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>encodings</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>encodings</secondary>
                                        </indexterm>A space-delimited list of VNC encodings to use.
                                        The format of this parameter is dictated by libvncclient and
                                        thus doesn't really follow the form of other Guacamole
                                        parameters. This parameter is optional, and
                                            <package>libguac-client-vnc</package> will use any
                                        supported encoding by default.</para>
                                    <para>Beware that this parameter is intended to be replaced with
                                        individual, encoding-specific parameters in a future
                                        release.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>read-only</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>read-only</secondary>
                                        </indexterm>Whether this connection should be read-only. If
                                        set to "true", no input will be accepted on the connection
                                        at all. Users will only see the desktop and whatever other
                                        users using that same desktop are doing. This parameter is
                                        optional.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-recording">
                <title>Session recording</title>
                <para>VNC sessions can be recorded graphically. These recordings take the form of
                    Guacamole protocol dumps and are recorded automatically to a specified
                    directory. Recordings can be subsequently translated to a normal video stream
                    using the <command>guacenc</command> utility provided with
                    guacamole-server.</para>
                <para>For example, to produce a video called "<replaceable>NAME</replaceable>.m4v"
                    from the recording "<replaceable>NAME</replaceable>", you would run:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guacenc <replaceable>/path/to/recording/NAME</replaceable></userinput></screen>
                </informalexample>
                <para>The <command>guacenc</command> utility has additional options for overriding
                    default behavior, including tweaking the output format, which are documented in
                    detail within the manpage:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>man guacenc</userinput></screen>
                </informalexample>
                <para>If recording of key events is explicitly enabled using the
                        <parameter>recording-include-keys</parameter> parameter, recordings can also
                    be translated into human-readable interpretations of the keys pressed during the
                    session using the <command>guaclog</command> utility. The usage of
                        <command>guaclog</command> is analogous to <command>guacenc</command>, and
                    results in the creation of a new text file containing the interpreted
                    events:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guaclog <replaceable>/path/to/recording/NAME</replaceable></userinput><computeroutput>
guaclog: INFO: Guacamole input log interpreter (guaclog) version 0.9.14
guaclog: INFO: 1 input file(s) provided.
guaclog: INFO: Writing input events from "<replaceable>/path/to/recording/NAME</replaceable>" to "<replaceable annotations="">/path/to/recording/NAME</replaceable>.txt" ...
guaclog: INFO: All files interpreted successfully.</computeroutput>
<prompt>$</prompt> </screen>
                </informalexample>
                <important>
                    <para>Guacamole will never overwrite an existing recording. If necessary, a
                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
                            <replaceable>NAME</replaceable> to avoid overwriting an existing
                        recording. If even appending a numeric suffix does not help, the session
                        will simply not be recorded.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>recording-path</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>graphical recording</secondary>
                                        </indexterm>The directory in which screen recording files
                                        should be created. <emphasis>If a graphical recording needs
                                            to be created, then this parameter is
                                            required.</emphasis> Specifying this parameter enables
                                        graphical screen recording. If this parameter is omitted, no
                                        graphical recording will be created.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-recording-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", the directory specified by the
                                            <parameter>recording-path</parameter> parameter will
                                        automatically be created if it does not yet exist. Only the
                                        final directory in the path will be created - if other
                                        directories earlier in the path do not exist, automatic
                                        creation will fail, and an error will be logged.</para>
                                    <para><emphasis>This parameter is optional.</emphasis> By
                                        default, the directory specified by the
                                            <parameter>recording-path</parameter> parameter will not
                                        automatically be created, and attempts to create recordings
                                        within a non-existent directory will be logged as
                                        errors.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-name</parameter></entry>
                                <entry>
                                    <para>The filename to use for any created recordings.
                                            <emphasis>This parameter is optional.</emphasis> If
                                        omitted, the value "recording" will be used instead.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-output</parameter></entry>
                                <entry>
                                    <para>If set to "true", graphical output and other data normally
                                        streamed from server to client will be excluded from the
                                        recording, producing a recording which contains only user
                                        input events. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, graphical output will
                                        be included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-mouse</parameter></entry>
                                <entry>
                                    <para>If set to "true", user mouse events will be excluded from
                                        the recording, producing a recording which lacks a visible
                                        mouse cursor. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, mouse events will be
                                        included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-include-keys</parameter></entry>
                                <entry>
                                    <para>If set to "true", user key events will be included in the
                                        recording. The recording can subsequently be passed through
                                        the <command>guaclog</command> utility to produce a
                                        human-readable interpretation of the keys pressed during the
                                        session. <emphasis>This parameter is optional.</emphasis> If
                                        omitted, key events will be not included in the
                                        recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-sftp">
                <title>File transfer (via SFTP)</title>
                <para>VNC does not normally support file transfer, but Guacamole can provide file
                    transfer over SFTP even when the remote desktop is otherwise being accessed
                    through VNC and not SSH. If SFTP is enabled on a Guacamole VNC connection, users
                    will be able to upload and download files as described in <xref
                        linkend="using-guacamole"/>.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>enable-sftp</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>file transfer</secondary>
                                        </indexterm><indexterm>
                                            <primary>SFTP</primary>
                                        </indexterm>Whether file transfer should be enabled. If set
                                        to "true", the user will be allowed to upload or download
                                        files from the specified server using SFTP. If omitted, SFTP
                                        will be disabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-hostname</parameter></entry>
                                <entry>
                                    <para>The hostname or IP address of the server hosting SFTP.
                                        This parameter is optional. If omitted, the hostname of the
                                        VNC server specified with the
                                            <parameter>hostname</parameter> parameter will be
                                        used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-port</parameter></entry>
                                <entry>
                                    <para>The port the SSH server providing SFTP is listening on,
                                        usually 22. This parameter is optional. If omitted, the
                                        standard port of 22 will be used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-username</parameter></entry>
                                <entry>
                                    <para>The username to authenticate as when connecting to the
                                        specified SSH server for SFTP. This parameter is
                                        required.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-password</parameter></entry>
                                <entry>
                                    <para>The password to use when authenticating with the specified
                                        SSH server for SFTP.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-private-key</parameter></entry>
                                <entry>
                                    <para>The entire contents of the private key to use for public
                                        key authentication. If this parameter is not specified,
                                        public key authentication will not be used. The private key
                                        must be in OpenSSH format, as would be generated by the
                                        OpenSSH <command>ssh-keygen</command> utility.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-passphrase</parameter></entry>
                                <entry>
                                    <para>The passphrase to use to decrypt the private key for use
                                        in public key authentication. This parameter is not needed
                                        if the private key does not require a passphrase.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-directory</parameter></entry>
                                <entry>
                                    <para>The directory to upload files to if they are simply
                                        dragged and dropped, and thus otherwise lack a specific
                                        upload location. This parameter is optional. If omitted, the
                                        default upload location of the SSH server providing SFTP
                                        will be used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-root-directory</parameter></entry>
                                <entry>
                                    <para>The directory to expose to connected users via Guacamole's
                                            <link xmlns:xlink="http://www.w3.org/1999/xlink"
                                            linkend="file-browser">file browser</link>. If omitted,
                                        the root directory will be used by default.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-server-alive-interval</parameter></entry>
                                <entry>
                                    <para>The interval in seconds at which to send keepalive
                                    packets to the SSH server for the SFTP connection.  This
                                    parameter is optional.  If omitted, the default of 0 will be
                                    used, disabling sending keepalive packets.  The minimum
                                    value is 2.
                                    </para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-repeater">
                <title>VNC Repeater</title>
                <para>There exist VNC repeaters, such as UltraVNC Repeater, which act as
                    intermediaries or proxies, providing a single logical VNC connection which is
                    then routed to another VNC server elsewhere. Additional parameters are required
                    to select which VNC host behind the repeater will receive the connection.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>dest-host</parameter></entry>
                                <entry><indexterm>
                                        <primary>repeater</primary>
                                        <secondary>VNC</secondary>
                                    </indexterm><indexterm>
                                        <primary>proxy</primary>
                                        <secondary>VNC</secondary>
                                    </indexterm><indexterm>
                                        <primary>VNC</primary>
                                        <secondary>repeater</secondary>
                                    </indexterm>The destination host to request when connecting to a
                                    VNC proxy such as UltraVNC Repeater. This is only necessary if
                                    the VNC proxy in use requires the connecting user to specify
                                    which VNC server to connect to. If the VNC proxy automatically
                                    connects to a specific server, this parameter is not
                                    necessary.</entry>
                            </row>
                            <row>
                                <entry><parameter>dest-port</parameter></entry>
                                <entry><indexterm>
                                        <primary>repeater</primary>
                                        <secondary>VNC</secondary>
                                    </indexterm><indexterm>
                                        <primary>proxy</primary>
                                        <secondary>VNC</secondary>
                                    </indexterm>The destination port to request when connecting to a
                                    VNC proxy such as UltraVNC Repeater. This is only necessary if
                                    the VNC proxy in use requires the connecting user to specify
                                    which VNC server to connect to. If the VNC proxy automatically
                                    connects to a specific server, this parameter is not
                                    necessary.</entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-reverse-connections">
                <title>Reverse VNC connections</title>
                <para>Guacamole supports "reverse" VNC connections, where the VNC client listens for
                    an incoming connection from the VNC server. When reverse VNC connections are
                    used, the VNC client and server switch network roles, but otherwise function as
                    they normally would. The VNC server still provides the remote display, and the
                    VNC client still provides all keyboard and mouse input.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>reverse-connect</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>reverse connection</secondary>
                                        </indexterm>Whether reverse connection should be used. If
                                        set to "true", instead of connecting to a server at a given
                                        hostname and port, guacd will listen on the given port for
                                        inbound connections from a VNC server.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>listen-timeout</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>listen timeout</secondary>
                                        </indexterm>If reverse connection is in use, the maximum
                                        amount of time to wait for an inbound connection from a VNC
                                        server, in milliseconds. If blank, the default value is 5000
                                        (five seconds).</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-audio">
                <title>Audio support (via PulseAudio)</title>
                <para>VNC does not provide its own support for audio, but Guacamole's VNC support
                    can obtain audio through a secondary network connection to a PulseAudio server
                    running on the same machine as the VNC server.</para>
                <para>Most Linux systems provide audio through a service called PulseAudio. This
                    service is capable of communicating over the network, and if PulseAudio is
                    configured to allow TCP connections, Guacamole can connect to your PulseAudio
                    server and combine its audio with the graphics coming over VNC.</para>
                <para>Configuring PulseAudio for network connections requires an additional line
                    within the PulseAudio configuration file, usually
                        <filename>/etc/pulse/default.pa</filename>:</para>
                <informalexample>
                    <programlisting>load-module module-native-protocol-tcp auth-ip-acl=<replaceable>192.168.1.0/24</replaceable> auth-anonymous=1</programlisting>
                </informalexample>
                <para>This loads the TCP module for PulseAudio, configuring it to accept connections
                    without authentication and <emphasis>only</emphasis> from the
                        <replaceable>192.168.1.0/24</replaceable> subnet. You will want to replace
                    this value with the subnet or IP address from which guacd will be connecting. It
                    is possible to allow connections from absolutely anywhere, but beware that you
                    should only do so if the nature of your network prevents unauthorized
                    access:</para>
                <informalexample>
                    <programlisting>load-module module-native-protocol-tcp auth-anonymous=1</programlisting>
                </informalexample>
                <para>In either case, the <code>auth-anonymous=1</code> parameter is strictly
                    required. Guacamole does not currently support the cookie-based authentication
                    used by PulseAudio for non-anonymous connections. If this parameter is omitted,
                    Guacamole will not be able to connect to PulseAudio.</para>
                <para>Once the PulseAudio configuration file has been modified appropriately,
                    restart the PulseAudio service. PulseAudio should then begin listening on port
                    4713 (the default PulseAudio port) for incoming TCP connections. You can verify
                    this using a utility like <command>netstat</command>:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>netstat -ln | grep 4713</userinput>
<computeroutput>tcp        0      0 0.0.0.0:4713            0.0.0.0:*               LISTEN
tcp6       0      0 :::4713                 :::*                    LISTEN</computeroutput>
<prompt>$</prompt></screen>
                </informalexample>
                <para>The following parameters are available for configuring the audio support for
                    VNC:</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>enable-audio</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>sound</secondary>
                                        </indexterm><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>PulseAudio</secondary>
                                        </indexterm>If set to "true", audio support will be enabled,
                                        and a second connection for PulseAudio will be made in
                                        addition to the VNC connection. By default, audio support
                                        within VNC is disabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>audio-servername</parameter></entry>
                                <entry>
                                    <para>The name of the PulseAudio server to connect to. This will
                                        be the hostname of the computer providing audio for your
                                        connection via PulseAudio, most likely the same as the value
                                        given for the <parameter>hostname</parameter>
                                        parameter.</para>
                                    <para>If this parameter is omitted, the default PulseAudio
                                        device will be used, which will be the PulseAudio server
                                        running on the same machine as guacd.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="vnc-clipboard-encoding">
                <title>Clipboard encoding</title>
                <para>While Guacamole will always use UTF-8 for its own clipboard data, the VNC
                    standard requires that clipboard data be encoded in ISO 8859-1. As most VNC
                    servers will not accept data in any other format, Guacamole will translate
                    between UTF-8 and ISO 8859-1 when exchanging clipboard data with the VNC server,
                    but this behavior can be overridden with the
                        <parameter>clipboard-encoding</parameter> parameter.</para>
                <important>
                    <para><emphasis>The only clipboard encoding guaranteed to be supported by VNC
                            servers is ISO 8859-1.</emphasis> You should only override the clipboard
                        encoding using the <parameter>clipboard-encoding</parameter> parameter of
                        you are absolutely positive your VNC server supports other encodings.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>VNC</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>clipboard-encoding</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>clipboard encoding</primary>
                                        </indexterm><indexterm>
                                            <primary>VNC</primary>
                                            <secondary>clipboard encoding</secondary>
                                        </indexterm>The encoding to assume for the VNC clipboard.
                                        This parameter is optionl. By default, the standard encoding
                                        ISO 8859-1 will be used. <emphasis>Only use this parameter
                                            if you are sure your VNC server supports other encodings
                                            beyond the standard ISO 8859-1.</emphasis></para>
                                    <para>Possible values are:</para>
                                    <variablelist>
                                        <varlistentry>
                                            <term><constant>ISO8859-1</constant></term>
                                            <listitem>
                                                <para>ISO 8859-1 is the clipboard encoding mandated
                                                  by the VNC standard, and supports only basic Latin
                                                  characters.  Unless your VNC server specifies
                                                  otherwise, this encoding is the only encoding
                                                  guaranteed to work.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>UTF-8</constant></term>
                                            <listitem>
                                                <para>UTF-8 - the most common encoding used for
                                                  Unicode. Using this encoding for the VNC clipboard
                                                  violates the VNC specification, but some servers
                                                  do support this. This parameter value should only
                                                  be used if you know your VNC server supports this
                                                  encoding.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>UTF-16</constant></term>
                                            <listitem>
                                                <para>UTF-16 - a 16-bit encoding for Unicode which
                                                  is not as common as UTF-8, but still widely used.
                                                  Using this encoding for the VNC clipboard violates
                                                  the VNC specification. This parameter value should
                                                  only be used if you know your VNC server supports
                                                  this encoding.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>CP1252</constant></term>
                                            <listitem>
                                                <para>Code page 1252 - a Windows-specific encoding
                                                  for Latin characters which is mostly a superset of
                                                  ISO 8859-1, mapping some additional displayable
                                                  characters onto what would otherwise be control
                                                  characters. Using this encoding for the VNC
                                                  clipboard violates the VNC specification. This
                                                  parameter value should only be used if you know
                                                  your VNC server supports this encoding.</para>
                                            </listitem>
                                        </varlistentry>
                                    </variablelist>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="adding-vnc">
                <title>Adding a VNC connection</title>
                <indexterm>
                    <primary>VNC</primary>
                    <secondary>adding</secondary>
                </indexterm>
                <para>If you are using the default authentication built into Guacamole, and you wish
                    to grant access to a VNC connection to a particular user, you need to locate the
                        <code>&lt;authorize></code> section for that user within your
                        <filename>user-mapping.xml</filename>, and add a section like the following
                    within it:</para>
                <programlisting>&lt;connection name="<replaceable>Unique Name</replaceable>">
    &lt;protocol>vnc&lt;/protocol>
    &lt;param name="hostname"><replaceable>localhost</replaceable>&lt;/param>
    &lt;param name="port"><replaceable>5901</replaceable>&lt;/param>
&lt;/connection></programlisting>
                <para>If added exactly as above, a new connection named "<replaceable>Unique
                        Name</replaceable>" will be available to the user associated with the
                        <code>&lt;authorize></code> section containing it. The connection will use
                    VNC to connect to <replaceable>localhost</replaceable> at port
                        <replaceable>5901</replaceable>. Naturally, you will want to change some or
                    all of these values.</para>
                <para>If your VNC server requires a password, or you wish to specify other
                    configuration parameters (to reduce the color depth, for example), you will need
                    to add additional <code>&lt;param></code> tags accordingly.</para>
                <para>Other authentication methods will provide documentation describing how to
                    configure new connections. If the authentication method in use fully implements
                    the features of Guacamole's authentication API, you will be able to add a new
                    VNC connection easily and intuitively using the administration interface built
                    into Guacamole. You will not need to edit configuration files.</para>
            </section>
            <section xml:id="vnc-servers">
                <title>Which VNC server?</title>
                <indexterm>
                    <primary>VNC servers</primary>
                </indexterm>
                <para>The choice of VNC server can make a big difference when it comes to
                    performance, especially over slower networks. While many systems provide VNC
                    access by default, using this is often not the fastest method.</para>
                <section xml:id="realvnc">
                    <title>RealVNC or TigerVNC</title>
                    <indexterm>
                        <primary>RealVNC</primary>
                    </indexterm>
                    <indexterm>
                        <primary>TigerVNC</primary>
                    </indexterm>
                    <para>RealVNC, and its derivative TigerVNC, perform quite well. In our testing,
                        they perform the best with Guacamole. If you are okay with having a desktop
                        that can only be accessed via VNC, one of these is likely your best choice.
                        Both optimize window movement and (depending on the application) scrolling,
                        giving a very responsive user experience.</para>
                </section>
                <section xml:id="tightvnc">
                    <title>TightVNC</title>
                    <indexterm>
                        <primary>TightVNC</primary>
                    </indexterm>
                    <para>TightVNC is widely-available and performs generally as well as RealVNC or
                        TigerVNC. If you wish to use TightVNC with Guacamole, performance should be
                        just fine, but we highly recommend disabling its JPEG encoding. This is
                        because images transmitted to Guacamole are always encoded losslessly as PNG
                        images. When this operation is performed on a JPEG image, the artifacts
                        present from JPEG's lossy compression reduce the compressibility of the
                        image for PNG, thus leading to a slower experience overall than if JPEG was
                        simply not used to begin with.</para>
                </section>
                <section xml:id="x11vnc">
                    <title>x11vnc</title>
                    <indexterm>
                        <primary>x11vnc</primary>
                    </indexterm>
                    <para>The main benefit of using x11vnc is that it allows you to continue using
                        your desktop normally, while simultaneously exposing control of your desktop
                        via VNC. Performance of x11vnc is comparable to RealVNC, TigerVNC, and
                        TightVNC. If you need to use your desktop locally as well as via VNC, you
                        will likely be quite happy with x11vnc.</para>
                </section>
                <section xml:id="vino">
                    <title>vino</title>
                    <indexterm>
                        <primary>vino</primary>
                    </indexterm>
                    <para>vino is the VNC server that comes with the Gnome desktop environment, and
                        is enabled if you enable "desktop sharing" via the system preferences
                        available within Gnome. If you need to share your local desktop, we
                        recommend using x11vnc rather vino, as it has proven more performant and
                        feature-complete in our testing. If you don't need to share a local desktop
                        but simply need an environment you can access remotely, using a VNC server
                        like RealVNC, TigerVNC, or TightVNC is a better choice.</para>
                </section>
                <section xml:id="qemu">
                    <title>QEMU or KVM</title>
                    <indexterm>
                        <primary>QEMU</primary>
                    </indexterm>
                    <indexterm>
                        <primary>KVM</primary>
                    </indexterm>
                    <para>QEMU (and thus KVM) expose the displays of virtual machines using VNC. If
                        you need to see the virtual monitor of your virtual machine, using this VNC
                        connection is really your only choice. As the VNC server built into QEMU
                        cannot be aware of higher-level operations like window movement, resizing,
                        or scrolling, those operations will tend to be sent suboptimally, and will
                        not be as fast as a VNC server running within the virtual machine.</para>
                    <para>If you wish to use a virtual machine for desktop access, we recommend
                        installing a native VNC server inside the virtual machine after the virtual
                        machine is set up. This will give a more responsive desktop.</para>
                </section>
            </section>
        </section>
        <section xml:id="rdp">
            <title>RDP</title>
            <indexterm>
                <primary>RDP</primary>
            </indexterm>
            <para>The RDP protocol is more complicated than VNC and was the second protocol
                officially supported by Guacamole. RDP tends to be faster than VNC due to the use of
                caching, which Guacamole does take advantage of.</para>
            <para>RDP support for Guacamole is provided by the <package>libguac-client-rdp</package>
                library, which will be installed as part of guacamole-server if the required
                dependencies are present during the build.</para>
            <section xml:id="rdp-network-parameters">
                <title>Network parameters</title>
                <para>RDP connections require a hostname or IP address defining the destination
                    machine. The RDP port is defined to be 3389, and will be this value in most
                    cases. You only need to specify the RDP port if you are not using port
                    3389.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>hostname</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>hostname</secondary>
                                        </indexterm>The hostname or IP address of the RDP server
                                        Guacamole should connect to.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>port</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>port</secondary>
                                        </indexterm>The port the RDP server is listening on, usually
                                        3389. This parameter is optional. If this is not specified,
                                        the default of 3389 will be used.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-authentication">
                <title>Authentication and security</title>
                <para>RDP provides authentication through the use of a username, password, and
                    optional domain.</para>
                <para>Most RDP servers will provide a graphical login if the username, password, and
                    domain parameters are omitted. One notable exception to this is Network Level
                    Authentication, or NLA, which performs all authentication outside of a desktop
                    session, and thus in the absence of a graphical interface. If your server
                    requires NLA, you will need to manually choose this as your security mode, and
                    you <emphasis>must</emphasis> provide a username and password.</para>
                <para>All RDP connections are encrypted. Higher-grade encryption is available in the
                    form of TLS, another possible security mode.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>username</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>username</secondary>
                                        </indexterm>The username to use to authenticate, if any.
                                        This parameter is optional.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>password</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>password</secondary>
                                        </indexterm>The password to use when attempting
                                        authentication, if any. This parameter is optional.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>domain</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>domain</secondary>
                                        </indexterm>The domain to use when attempting
                                        authentication, if any. This parameter is optional.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>security</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>security</secondary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>NLA</secondary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>TLS</secondary>
                                        </indexterm>The security mode to use for the RDP connection.
                                        This mode dictates how data will be encrypted and what type
                                        of authentication will be performed, if any. By default,
                                        standard RDP encryption is requested, as it is the most
                                        widely supported.</para>
                                    <para>Possible values are:</para>
                                    <variablelist>
                                        <varlistentry>
                                            <term><constant>rdp</constant></term>
                                            <listitem>
                                                <para>Standard RDP encryption. <emphasis>This is the
                                                  default</emphasis> and should be supported by all
                                                  RDP servers.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>nla</constant></term>
                                            <listitem>
                                                <para>Network Level Authentication. This mode
                                                  requires the username and password, and performs
                                                  an authentication step before the remote desktop
                                                  session actually starts. If the username and
                                                  password are not given, the connection cannot be
                                                  made.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>tls</constant></term>
                                            <listitem>
                                                <para>TLS encryption. TLS (Transport Layer Security)
                                                  is the successor to SSL.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>any</constant></term>
                                            <listitem>
                                                <para>Allow the server to choose the type of
                                                  security.</para>
                                            </listitem>
                                        </varlistentry>
                                    </variablelist>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>ignore-cert</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>ignoring certificates</secondary>
                                        </indexterm>If set to "true", the certificate returned by
                                        the server will be ignored, even if that certificate cannot
                                        be validated. This is useful if you universally trust the
                                        server and your connection to the server, and you know that
                                        the server's certificate cannot be validated (for example,
                                        if it is self-signed).</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>disable-auth</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>disabling authentication</secondary>
                                        </indexterm>If set to "true", authentication will be
                                        disabled. Note that this refers to authentication that takes
                                        place while connecting. Any authentication enforced by the
                                        server over the remote desktop session (such as a login
                                        dialog) will still take place. By default, authentication is
                                        enabled and only used when requested by the server.</para>
                                    <para>If you are using NLA, authentication must be enabled by
                                        definition.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-session-settings">
                <title>Session settings</title>
                <para>RDP sessions will typically involve the full desktop environment of a normal
                    user. Alternatively, you can manually specify a program to use instead of the
                    RDP server's default shell, or connect to the administrative console.</para>
                <para>Although Guacamole is independent of keyboard layout, RDP is not. This is
                    because Guacamole represents keys based on what they <emphasis>do</emphasis>
                    ("press the <keycap>Enter</keycap> key"), while RDP uses identifiers based on
                    the key's location  ("press the rightmost key in the second row"). To translate
                    between a Guacamole key event  and an RDP key event, Guacamole must know ahead
                    of time the keyboard layout of the RDP server.</para>
                <para>By default, the US English qwerty keyboard will be used. If this does not
                    match the keyboard layout of your RDP server, keys will not be properly
                    translated, and you will need to explicitly choose a different layout in your
                    connection settings. If your keyboard layout is not supported, please notify the
                    Guacamole team by <link xmlns:xlink="http://www.w3.org/1999/xlink"
                        xlink:href="https://glyptodon.org/jira/">opening an issue in
                    JIRA</link>.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>client-name</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>client-name</secondary>
                                        </indexterm>When connecting to the RDP server, Guacamole
                                        will normally provide its own hostname as the name of the
                                        client. If this parameter is specified, Guacamole will use
                                        its value instead.</para>
                                    <para>On Windows RDP servers, this value is exposed within the
                                        session as the <envar>CLIENTNAME</envar> environment
                                        variable.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>console</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>console</secondary>
                                        </indexterm>If set to "true", you will be connected to the
                                        console (admin) session of the RDP server.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>initial-program</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>initial program</secondary>
                                        </indexterm>The full path to the program to run immediately
                                        upon connecting. This parameter is optional.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>server-layout</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>keyboard layout</primary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>keyboard layout</secondary>
                                        </indexterm>The server-side keyboard layout. This is the
                                        layout of the RDP server and has nothing to do with the
                                        keyboard layout in use on the client. <emphasis>The
                                            Guacamole client is independent of keyboard
                                            layout.</emphasis> The RDP protocol, however, is
                                            <emphasis>not</emphasis> independent of keyboard layout,
                                        and Guacamole needs to know the keyboard layout of the
                                        server in order to send the proper keys when a user is
                                        typing.</para>
                                    <para>Possible values are:</para>
                                    <variablelist>
                                        <varlistentry>
                                            <term><constant>en-us-qwerty</constant></term>
                                            <listitem>
                                                <para>English (US) keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>en-gb-qwerty</constant></term>
                                            <listitem>
                                                <para>English (UK) keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>de-de-qwertz</constant></term>
                                            <listitem>
                                                <para>German keyboard (qwertz)</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>fr-fr-azerty</constant></term>
                                            <listitem>
                                                <para>French keyboard (azerty)</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>fr-ch-qwertz</constant></term>
                                            <listitem>
                                                <para>Swiss French keyboard (qwertz)</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>it-it-qwerty</constant></term>
                                            <listitem>
                                                <para>Italian keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>ja-jp-qwerty</constant></term>
                                            <listitem>
                                                <para>Japanese keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>pt-br-qwerty</constant></term>
                                            <listitem>
                                                <para>Portuguese Brazilian keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>es-es-qwerty</constant></term>
                                            <listitem>
                                                <para>Spanish keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>sv-se-qwerty</constant></term>
                                            <listitem>
                                                <para>Swedish keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>tr-tr-qwerty</constant></term>
                                            <listitem>
                                                <para>Turkish-Q keyboard</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>failsafe</constant></term>
                                            <listitem>
                                                <para>Unknown keyboard - this option sends only
                                                  Unicode events and should work for any keyboard,
                                                  though not necessarily all RDP servers or
                                                  applications.</para>
                                                <para>If your server's keyboard layout is not yet
                                                  supported, this option should work in the
                                                  meantime.</para>
                                            </listitem>
                                        </varlistentry>
                                    </variablelist>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-display-settings">
                <title>Display settings</title>
                <para>Guacamole will automatically choose an appropriate display size for RDP
                    connections based on the size of the browser window and the DPI of the device.
                    The size of the display can be forced by specifying explicit width or height
                    values.</para>
                <para>To reduce bandwidth usage, you may also request that the server reduce its
                    color depth. Guacamole will automatically detect 256-color images, but this can
                    be guaranteed for absolutely all graphics sent over the connection by forcing
                    the color depth to 8-bit. Color depth is otherwise dictated by the RDP
                    server.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>color-depth</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>color depth</secondary>
                                        </indexterm>The color depth to request, in bits-per-pixel.
                                        This parameter is optional. If specified, this must be
                                        either 8, 16, or 24. Regardless of what value is chosen
                                        here, if a particular update uses less than 256 colors,
                                        Guacamole will always send that update as a 256-color
                                        PNG.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>width</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>display size</secondary>
                                        </indexterm>The width of the display to request, in pixels.
                                        This parameter is optional. If this value is not specified,
                                        the width of the connecting client display will be used
                                        instead.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>height</parameter></entry>
                                <entry>
                                    <para>The height of the display to request, in pixels. This
                                        parameter is optional. If this value is not specified, the
                                        height of the connecting client display will be used
                                        instead.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>dpi</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>display resolution</secondary>
                                        </indexterm>The desired effective resolution of the client
                                        display, in DPI. This parameter is optional. If this value
                                        is not specified, the resolution and size of the client
                                        display will be used together to determine, heuristically,
                                        an appropriate resolution for the RDP session.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>resize-method</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>display size</secondary>
                                        </indexterm>The method to use to update the RDP server when
                                        the width or height of the client display changes. This
                                        parameter is optional. If this value is not specified, no
                                        action will be taken when the client display changes
                                        size.</para>
                                    <para>Normally, the display size of an RDP session is constant
                                        and can only be changed when initially connecting. As of RDP
                                        8.1, the "Display Update" channel can be used to request
                                        that the server change the display size. For older RDP
                                        servers, the only option is to disconnect and reconnect with
                                        the new size.</para>
                                    <para>Possible values are:</para>
                                    <variablelist>
                                        <varlistentry>
                                            <term><constant>display-update</constant></term>
                                            <listitem>
                                                <para>Uses the "Display Update" channel added with
                                                  RDP 8.1 to signal the server when the client
                                                  display size has changed.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>reconnect</constant></term>
                                            <listitem>
                                                <para>Automatically disconnects the RDP session when
                                                  the client display size has changed, and
                                                  reconnects with the new size.</para>
                                            </listitem>
                                        </varlistentry>
                                    </variablelist>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-recording">
                <title>Session recording</title>
                <para>RDP sessions can be recorded graphically. These recordings take the form of
                    Guacamole protocol dumps and are recorded automatically to a specified
                    directory. Recordings can be subsequently translated to a normal video stream
                    using the <command>guacenc</command> utility provided with
                    guacamole-server.</para>
                <para>For example, to produce a video called "<replaceable>NAME</replaceable>.m4v"
                    from the recording "<replaceable>NAME</replaceable>", you would run:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guacenc <replaceable>/path/to/recording/NAME</replaceable></userinput></screen>
                </informalexample>
                <para>The <command>guacenc</command> utility has additional options for overriding
                    default behavior, including tweaking the output format, which are documented in
                    detail within the manpage:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>man guacenc</userinput></screen>
                </informalexample>
                <para>If recording of key events is explicitly enabled using the
                        <parameter>recording-include-keys</parameter> parameter, recordings can also
                    be translated into human-readable interpretations of the keys pressed during the
                    session using the <command>guaclog</command> utility. The usage of
                        <command>guaclog</command> is analogous to <command>guacenc</command>, and
                    results in the creation of a new text file containing the interpreted
                    events:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guaclog <replaceable>/path/to/recording/NAME</replaceable></userinput><computeroutput>
guaclog: INFO: Guacamole input log interpreter (guaclog) version 0.9.14
guaclog: INFO: 1 input file(s) provided.
guaclog: INFO: Writing input events from "<replaceable>/path/to/recording/NAME</replaceable>" to "<replaceable annotations="">/path/to/recording/NAME</replaceable>.txt" ...
guaclog: INFO: All files interpreted successfully.</computeroutput>
<prompt>$</prompt> </screen>
                </informalexample>
                <important>
                    <para>Guacamole will never overwrite an existing recording. If necessary, a
                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
                            <replaceable>NAME</replaceable> to avoid overwriting an existing
                        recording. If even appending a numeric suffix does not help, the session
                        will simply not be recorded.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>recording-path</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>graphical recording</secondary>
                                        </indexterm>The directory in which screen recording files
                                        should be created. <emphasis>If a graphical recording needs
                                            to be created, then this parameter is
                                            required.</emphasis> Specifying this parameter enables
                                        graphical screen recording. If this parameter is omitted, no
                                        graphical recording will be created.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-recording-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", the directory specified by the
                                            <parameter>recording-path</parameter> parameter will
                                        automatically be created if it does not yet exist. Only the
                                        final directory in the path will be created - if other
                                        directories earlier in the path do not exist, automatic
                                        creation will fail, and an error will be logged.</para>
                                    <para><emphasis>This parameter is optional.</emphasis> By
                                        default, the directory specified by the
                                            <parameter>recording-path</parameter> parameter will not
                                        automatically be created, and attempts to create recordings
                                        within a non-existent directory will be logged as
                                        errors.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-name</parameter></entry>
                                <entry>
                                    <para>The filename to use for any created recordings.
                                            <emphasis>This parameter is optional.</emphasis> If
                                        omitted, the value "recording" will be used instead.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-output</parameter></entry>
                                <entry>
                                    <para>If set to "true", graphical output and other data normally
                                        streamed from server to client will be excluded from the
                                        recording, producing a recording which contains only user
                                        input events. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, graphical output will
                                        be included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-mouse</parameter></entry>
                                <entry>
                                    <para>If set to "true", user mouse events will be excluded from
                                        the recording, producing a recording which lacks a visible
                                        mouse cursor. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, mouse events will be
                                        included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-include-keys</parameter></entry>
                                <entry>
                                    <para>If set to "true", user key events will be included in the
                                        recording. The recording can subsequently be passed through
                                        the <command>guaclog</command> utility to produce a
                                        human-readable interpretation of the keys pressed during the
                                        session. <emphasis>This parameter is optional.</emphasis> If
                                        omitted, key events will be not included in the
                                        recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-device-redirection">
                <title>Device redirection</title>
                <para>Device redirection refers to the use of non-display devices over RDP.
                    Guacamole's RDP support currently allows redirection of audio, printing, and
                    disk access, some of which require additional configuration in order to function
                    properly.</para>
                <para>Audio redirection will be enabled by default. If Guacamole was correctly
                    installed, and audio redirection is supported by your RDP server, sound should
                    play within remote connections without manual intervention.</para>
                <para>Printing requires <application>GhostScript</application> to be installed on
                    the Guacamole server, and allows users to print arbitrary documents directly to
                    PDF. When documents are printed to the redirected printer, the user will receive
                    a PDF of that document within their web browser.</para>
                <para>Guacamole provides support for file transfer over RDP by emulating a virtual
                    disk drive. This drive will persist on the Guacamole server, confined within the
                    drive path specified. If drive redirection is enabled on a Guacamole SSH
                    connection, users will be able to upload and download files as described in
                        <xref linkend="using-guacamole"/>.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>disable-audio</parameter></entry>
                                <entry><indexterm>
                                        <primary>disabling audio</primary>
                                    </indexterm><indexterm>
                                        <primary>audio</primary>
                                    </indexterm><indexterm>
                                        <primary>RDP</primary>
                                        <secondary>audio</secondary>
                                    </indexterm>Audio is enabled by default in both the client and
                                    in libguac-client-rdp. If you are concerned about bandwidth
                                    usage, or sound is causing problems, you can explicitly disable
                                    sound by setting this parameter to "true".</entry>
                            </row>
                            <row>
                                <entry><parameter>enable-audio-input</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>enabling audio input</primary>
                                        </indexterm><indexterm>
                                            <primary>audio input</primary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>audio input</secondary>
                                        </indexterm>If set to "true", audio input support
                                        (microphone) will be enabled, leveraging the standard
                                        "AUDIO_INPUT" channel of RDP. By default, audio input
                                        support within RDP is disabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-printing</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>enabling printing</primary>
                                        </indexterm><indexterm>
                                            <primary>printing</primary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>printing</secondary>
                                        </indexterm>Printing is disabled by default, but with
                                        printing enabled, RDP users can print to a virtual printer
                                        that sends a PDF containing the document printed to the
                                        Guacamole client. Enable printing by setting this parameter
                                        to "true".</para>
                                    <para><emphasis>Printing support requires
                                                <application>GhostScript</application> to be
                                            installed.</emphasis> If
                                            <application>guacd</application> cannot find the
                                            <filename>gs</filename> executable when printing, the
                                        print attempt will fail.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-drive</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>enabling file transfer</primary>
                                        </indexterm><indexterm>
                                            <primary>file transfer</primary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>file transfer</secondary>
                                        </indexterm>File transfer is disabled by default, but with
                                        file transfer enabled, RDP users can transfer files to and
                                        from a virtual drive which persists on the Guacamole server.
                                        Enable file transfer support by setting this parameter to
                                        "true".</para>
                                    <para>Files will be stored in the directory specified by the
                                            "<parameter>drive-path</parameter>" parameter, which is
                                        required if file transfer is enabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>drive-name</parameter></entry>
                                <entry>
                                    <para>The name of the filesystem used when passed through to
                                        the RDP session.  This is the name that users will see in their
                                        Computer/My Computer area along with client name (for example,
                                        "Guacamole on Guacamole RDP"), and is also the name of the share
                                        when accessing the special <filename>\\tsclient</filename>
                                        network location.</para>
                                    <para>If file transfer is not enabled, this parameter is
                                        ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>drive-path</parameter></entry>
                                <entry>
                                    <para>The directory on the Guacamole server in which transferred
                                        files should be stored. This directory must be accessible by
                                        guacd and both readable and writable by the user that runs
                                        guacd. <emphasis>This parameter does not refer to a
                                            directory on the RDP server.</emphasis></para>
                                    <para>If file transfer is not enabled, this parameter is
                                        ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-drive-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", and file transfer is enabled, the
                                        directory specified by the <parameter>drive-path</parameter>
                                        parameter will automatically be created if it does not yet
                                        exist. Only the final directory in the path will be created
                                        - if other directories earlier in the path do not exist,
                                        automatic creation will fail, and an error will be
                                        logged.</para>
                                    <para>By default, the directory specified by the
                                            <parameter>drive-path</parameter> parameter will not
                                        automatically be created, and attempts to transfer files to
                                        a non-existent directory will be logged as errors.</para>
                                    <para>If file transfer is not enabled, this parameter is
                                        ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>console-audio</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>console audio</secondary>
                                        </indexterm>If set to "true", audio will be explicitly
                                        enabled in the console (admin) session of the RDP server.
                                        Setting this option to "true" only makes sense if the
                                            <parameter>console</parameter> parameter is also set to
                                        "true".</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>static-channels</parameter></entry>
                                <entry>
                                    <para>A comma-separated list of static channel names to open and
                                        expose as pipes. If you wish to communicate between an
                                        application running on the remote desktop and JavaScript,
                                        this is the best way to do it. Guacamole will open an
                                        outbound pipe with the name of the static channel. If
                                        JavaScript needs to communicate back in the other direction,
                                        it should respond by opening another pipe with the same
                                        name.</para>
                                    <para>Guacamole allows any number of static channels to be
                                        opened, but protocol restrictions of RDP limit the size of
                                        each channel name to 7 characters.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-preconnection-pdu">
                <title>Preconnection PDU (Hyper-V)</title>
                <para><indexterm>
                        <primary>preconnection PDU</primary>
                    </indexterm><indexterm>
                        <primary>Hyper-V</primary>
                    </indexterm>Some RDP servers host multiple logical RDP connections behind a
                    single server listening on a single TCP port. To select between these logical
                    connections, an RDP client must send the "preconnection PDU" - a message which
                    contains values that uniquely identify the destination, referred to as the "RDP
                    source". This mechanism is defined by the <link
                        xmlns:xlink="http://www.w3.org/1999/xlink"
                        xlink:href="https://msdn.microsoft.com/en-us/library/cc242359.aspx">"Session
                        Selection Extension"</link> for the RDP protocol, and is implemented by
                    Microsoft's Hyper-V hypervisor.</para>
                <para>If you are using Hyper-V, you will need to specify the ID of the destination
                    virtual machine within the <parameter>preconnection-blob</parameter> parameter.
                    This value can be determined using PowerShell:</para>
                <informalexample>
                    <screen><computeroutput><prompt>PS C:\> </prompt></computeroutput><userinput>Get-VM <replaceable>VirtualMachineName</replaceable> | Select-Object Id
</userinput><computeroutput>
Id
--
ed272546-87bd-4db9-acba-e36e1a9ca20a


<prompt>PS C:\> </prompt></computeroutput></screen>
                </informalexample>
                <para>The preconnection PDU is intentionally generic. While its primary use is as a
                    means for selecting virtual machines behind Hyper-V, other RDP servers may use
                    it as well. It is up to the RDP server itself to determine whether the
                    preconnection ID, BLOB, or both will be used, and what their values mean.</para>
                <para>If you do intend to use Hyper-V, beware that its built-in RDP server uses
                    slightly different parameters for both authentication and the port number, and
                    Guacamole's defaults will not work. In most cases, you will need to do the
                    following when connecting to Hyper-V:</para>
                <orderedlist>
                    <listitem>
                        <para>Set "<parameter>port</parameter>" to "<constant>2179</constant>", as
                            this is the default port used by Hyper-V. The standard RDP port is 3389,
                            and Guacamole will use port 3389 unless a different value is
                            specified.</para>
                    </listitem>
                    <listitem>
                        <para>Specify both "<parameter>username</parameter>" and
                                "<parameter>password</parameter>" appropriately, and set
                                "<parameter>security</parameter>" to "<constant>nla</constant>" or
                                "<constant>any</constant>". Hyper-V requires Network Level
                            Authentication from connecting clients. Guacamole's default is to use
                            standard RDP encryption without Network Level Authentication, which
                            Hyper-V does not support.</para>
                    </listitem>
                    <listitem>
                        <para>If necessary, set "<parameter>ignore-cert</parameter>" to
                                "<constant>true</constant>". Hyper-V may use a self-signed
                            certificate.</para>
                    </listitem>
                </orderedlist>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>preconnection-id</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>preconnection ID</primary>
                                        </indexterm>The numeric ID of the RDP source. This is a
                                        non-negative integer value dictating which of potentially
                                        several logical RDP connections should be used. This
                                        parameter is optional, and is only required if the RDP
                                        server is documented as requiring it. <emphasis>If using
                                            Hyper-V, this should be left blank.</emphasis></para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>preconnection-blob</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>preconnection BLOB</primary>
                                        </indexterm><indexterm>
                                            <primary>Hyper-V</primary>
                                        </indexterm>An arbitrary string which identifies the RDP
                                        source - one of potentially several logical RDP connections
                                        hosted by the same RDP server. This parameter is optional,
                                        and is only required if the RDP server is documented as
                                        requiring it, such as Hyper-V. In all cases, the meaning of
                                        this parameter is opaque to the RDP protocol itself and is
                                        dictated by the RDP server. <emphasis>For Hyper-V, this will
                                            be the ID of the destination virtual
                                        machine.</emphasis></para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-gateway">
                <title>Remote desktop gateway</title>
                <para><indexterm>
                        <primary>remote desktop gateway</primary>
                    </indexterm><indexterm>
                        <primary>TS gateway</primary>
                    </indexterm>Microsoft's remote desktop server provides an additional gateway
                    service which allows external connections to be forwarded to internal RDP
                    servers which are otherwise not accessible. If you will be using Guacamole to
                    connect through such a gateway, you will need to provide additional parameters
                    describing the connection to that gateway, as well as any required
                    credentials.</para>
                <para><emphasis>This functionality is only available if Guacamole was built against
                        FreeRDP 1.1 or later.</emphasis> Older versions of FreeRDP do not have
                    support for RDP gateways.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>gateway-hostname</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>gateway hostname</primary>
                                        </indexterm>The hostname of the remote desktop gateway that
                                        should be used as an intermediary for the remote desktop
                                        connection. <emphasis>If omitted, a gateway will not be
                                            used.</emphasis></para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>gateway-port</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>gateway port</primary>
                                        </indexterm>The port of the remote desktop gateway that
                                        should be used as an intermediary for the remote desktop
                                        connection. By default, this will be "443".</para>
                                    <para><emphasis>If using a version of FreeRDP prior to 1.2, this
                                            setting has no effect.</emphasis> Older versions of
                                        FreeRDP use a hard-coded value of "443". </para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>gateway-username</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>gateway username</primary>
                                        </indexterm>The username of the user authenticating with the
                                        remote desktop gateway, if a gateway is being used. This is
                                        not necessarily the same as the user actually using the
                                        remote desktop connection.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>gateway-password</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>gateway password</primary>
                                        </indexterm>The password to provide when authenticating with
                                        the remote desktop gateway, if a gateway is being
                                        used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>gateway-domain</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>gateway domain</primary>
                                        </indexterm>The domain of the user authenticating with the
                                        remote desktop gateway, if a gateway is being used. This is
                                        not necessarily the same domain as the user actually using
                                        the remote desktop connection.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-connection-broker">
                <title>Load balancing and RDP connection brokers</title>
                <para><indexterm>
                        <primary>load balancing</primary>
                    </indexterm><indexterm>
                        <primary>connection broker</primary>
                    </indexterm>If your remote desktop servers are behind a load balancer, sometimes
                    referred to as a "connection broker" or "TS session broker", that balancer may
                    require additional information during the connection process to determine how
                    the incoming connection should be routed. RDP does not dictate the format of
                    this information; it is specific to the balancer in use.</para>
                <para>If you are using a load balancer and are unsure whether such information is
                    required, <emphasis>you will need to check the documentation for your
                        balancer</emphasis>. If your balancer provides <filename>.rdp</filename>
                    files for convenience, look through the contents of those files for a string
                    field called "loadbalanceinfo", as that field is where the required
                    information/cookie would be specified.</para>
                <para><emphasis>This functionality is only available if Guacamole was built against
                        FreeRDP 1.1 or later.</emphasis> Older versions of FreeRDP do not have
                    support for load balancers which require additional information during the
                    connection process.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>load-balance-info</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>loadbalanceinfo</primary>
                                        </indexterm>The load balancing information or cookie which
                                        should be provided to the connection broker. <emphasis>If no
                                            connection broker is being used, this should be left
                                            blank.</emphasis></para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-sftp">
                <title>RDP + SFTP</title>
                <para>Guacamole can provide file transfer over SFTP even when the remote desktop is
                    otherwise being accessed through RDP and not SSH. If SFTP is enabled on a
                    Guacamole RDP connection, users will be able to upload and download files as
                    described in <xref linkend="using-guacamole"/>.</para>
                <para>This support is independent of the file transfer implemented through RDP's own
                    "drive redirection" (RDPDR), and is particularly useful for RDP servers which do
                    not support RDPDR.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>enable-sftp</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>file transfer</secondary>
                                        </indexterm><indexterm>
                                            <primary>SFTP</primary>
                                        </indexterm>Whether file transfer should be enabled. If set
                                        to "true", the user will be allowed to upload or download
                                        files from the specified server using SFTP. If omitted, SFTP
                                        will be disabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-hostname</parameter></entry>
                                <entry>
                                    <para>The hostname or IP address of the server hosting SFTP.
                                        This parameter is optional. If omitted, the hostname of the
                                        RDP server specified with the
                                            <parameter>hostname</parameter> parameter will be
                                        used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-port</parameter></entry>
                                <entry>
                                    <para>The port the SSH server providing SFTP is listening on,
                                        usually 22. This parameter is optional. If omitted, the
                                        standard port of 22 will be used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-username</parameter></entry>
                                <entry>
                                    <para>The username to authenticate as when connecting to the
                                        specified SSH server for SFTP. This parameter is optional if
                                        a username is specified for the RDP connection. If omitted,
                                        the value provided for the <parameter>username</parameter>
                                        parameter will be use.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-password</parameter></entry>
                                <entry>
                                    <para>The password to use when authenticating with the specified
                                        SSH server for SFTP.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-private-key</parameter></entry>
                                <entry>
                                    <para>The entire contents of the private key to use for public
                                        key authentication. If this parameter is not specified,
                                        public key authentication will not be used. The private key
                                        must be in OpenSSH format, as would be generated by the
                                        OpenSSH <command>ssh-keygen</command> utility.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-passphrase</parameter></entry>
                                <entry>
                                    <para>The passphrase to use to decrypt the private key for use
                                        in public key authentication. This parameter is not needed
                                        if the private key does not require a passphrase.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-directory</parameter></entry>
                                <entry>
                                    <para>The directory to upload files to if they are simply
                                        dragged and dropped, and thus otherwise lack a specific
                                        upload location. This parameter is optional. If omitted, the
                                        default upload location of the SSH server providing SFTP
                                        will be used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-root-directory</parameter></entry>
                                <entry>
                                    <para>The directory to expose to connected users via Guacamole's
                                            <link xmlns:xlink="http://www.w3.org/1999/xlink"
                                            linkend="file-browser">file browser</link>. If omitted,
                                        the root directory will be used by default.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-server-alive-interval</parameter></entry>
                                <entry>
                                    <para>The interval in seconds at which to send keepalive 
                                    packets to the SSH server for the SFTP connection.  This 
                                    parameter is optional.  If omitted, the default of 0 will be 
                                    used, disabling sending keepalive packets.  The minimum 
                                    value is 2.
                                    </para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-perf-flags">
                <title>Performance flags</title>
                <para>RDP provides several flags which control the availability of features that
                    decrease performance and increase bandwidth for the sake of aesthetics, such as
                    wallpaper, window theming, menu effects, and smooth fonts. These features are
                    all disabled by default within Guacamole such that bandwidth usage is minimized,
                    but you can manually re-enable them on a per-connection basis if desired.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="2.75*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>enable-wallpaper</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>wallpaper</secondary>
                                        </indexterm>If set to "true", enables rendering of the
                                        desktop wallpaper. By default, wallpaper will be disabled,
                                        such that unnecessary bandwidth need not be spent redrawing
                                        the desktop.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-theming</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>theming</secondary>
                                        </indexterm>If set to "true", enables use of theming of
                                        windows and controls. By default, theming within RDP
                                        sessions is disabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-font-smoothing</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>font smoothing</secondary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>ClearType</secondary>
                                        </indexterm>If set to "true", text will be rendered with
                                        smooth edges. Text over RDP is rendered with rough edges by
                                        default, as this reduces the number of colors used by text,
                                        and thus reduces the bandwidth required for the
                                        connection.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-full-window-drag</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>full window drag</secondary>
                                        </indexterm>If set to "true", the contents of windows will
                                        be displayed as windows are moved. By default, the RDP
                                        server will only draw the window border while windows are
                                        being dragged.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-desktop-composition</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>desktop composition</secondary>
                                        </indexterm><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>Aero</secondary>
                                        </indexterm>If set to "true", graphical effects such as
                                        transparent windows and shadows will be allowed. By default,
                                        such effects, if available, are disabled.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>enable-menu-animations</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RDP</primary>
                                            <secondary>menu animations</secondary>
                                        </indexterm>If set to "true", menu open and close animations
                                        will be allowed. Menu animations are disabled by
                                        default.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="rdp-remoteapp">
                <title>RemoteApp</title>
                <para>Recent versions of Windows provide a feature called RemoteApp which allows
                    individual applications to be used over RDP, without providing access to the
                    full desktop environment. If your RDP server has this feature enabled and
                    configured, you can configure Guacamole connections to use those individual
                    applications.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>RDP</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>remote-app</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>RemoteApp</primary>
                                        </indexterm>Specifies the RemoteApp to start on the remote
                                        desktop. If supported by your remote desktop server, this
                                        application, and only this application, will be visible to
                                        the user.</para>
                                    <para>Windows requires a special notation for the names of
                                        remote applications. The names of remote applications must
                                        be prefixed with two vertical bars. For example, if you have
                                        created a remote application on your server for
                                            <filename>notepad.exe</filename> and have assigned it
                                        the name "notepad", you would set this parameter to:
                                        "||notepad".</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>remote-app-dir</parameter></entry>
                                <entry>
                                    <para>The working directory, if any, for the remote application.
                                        This parameter has no effect if RemoteApp is not in
                                        use.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>remote-app-args</parameter></entry>
                                <entry>
                                    <para>The command-line arguments, if any, for the remote
                                        application. This parameter has no effect if RemoteApp is
                                        not in use.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="adding-rdp">
                <title>Adding an RDP connection</title>
                <indexterm>
                    <primary>RDP</primary>
                    <secondary>adding</secondary>
                </indexterm>
                <para>If you are using the default authentication built into Guacamole, and you wish
                    to grant access to a RDP connection to a particular user, you need to locate the
                        <code>&lt;authorize></code> section for that user within your
                        <filename>user-mapping.xml</filename>, and add a section like the following
                    within it:</para>
                <programlisting>&lt;connection name="<replaceable>Unique Name</replaceable>">
    &lt;protocol>rdp&lt;/protocol>
    &lt;param name="hostname"><replaceable>localhost</replaceable>&lt;/param>
    &lt;param name="port"><replaceable>3389</replaceable>&lt;/param>
&lt;/connection></programlisting>
                <para>If added exactly as above, a new connection named "<replaceable>Unique
                        Name</replaceable>" will be available to the user associated with the
                        <code>&lt;authorize></code> section containing it. The connection will use
                    RDP to connect to <replaceable>localhost</replaceable> at port
                        <replaceable>3389</replaceable>. Naturally, you will want to change some or
                    all of these values.</para>
                <para>If you want to login automatically rather than receive a login prompt upon
                    connecting, you can specify a username and password with additional
                        <code>&lt;param></code> tags. Other options are available for controlling
                    the color depth, size of the screen, etc.</para>
                <para>Other authentication methods will provide documentation describing how to
                    configure new connections. If the authentication method in use fully implements
                    the features of Guacamole's authentication API, you will be able to add a new
                    RDP connection easily and intuitively using the administration interface built
                    into Guacamole. You will not need to edit configuration files.</para>
            </section>
        </section>
        <section xml:id="ssh">
            <title>SSH</title>
            <indexterm>
                <primary>SSH</primary>
            </indexterm>
            <para>Unlike VNC or RDP, SSH is a text protocol. Its implementation in Guacamole is
                actually a combination of a terminal emulator and SSH client, because the SSH
                protocol isn't inherently graphical. Guacamole's SSH support emulates a terminal on
                the server side, and draws the screen of this terminal remotely on the
                client.</para>
            <para>SSH support for Guacamole is provided by the <package>libguac-client-ssh</package>
                library, which will be installed as part of guacamole-server if the required
                dependencies are present during the build.</para>
            <section xml:id="ssh-network-parameters">
                <title>Network parameters</title>
                <para>SSH connections require a hostname or IP address defining the destination
                    machine. SSH is standardized to use port 22 and this will be the proper value in
                    most cases. You only need to specify the SSH port if you are not using the
                    standard port.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>hostname</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>hostname</secondary>
                                        </indexterm>The hostname or IP address of the SSH server
                                        Guacamole should connect to.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>port</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>port</secondary>
                                        </indexterm>The port the SSH server is listening on, usually
                                        22. This parameter is optional. If this is not specified,
                                        the default of 22 will be used.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>server-alive-interval</parameter></entry>
                                <entry>
                                    <para>
                                        <indexterm>
                                            <primary>SSH</primary>
                                            <secondary>server-alive-interval</secondary>
                                        </indexterm>
                                        By default the SSH client does not send keepalive requests
                                        to the server.  This parameter allows you to configure the
                                        the interval in seconds at which the client connection
                                        sends keepalive packets to the server.  The default is 0,
                                        which disables sending the packets.  The minimum value
                                        is 2.
                                    </para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="ssh-authentication">
                <title>Authentication</title>
                <para>SSH provides authentication through passwords and public key
                    authentication.</para>
                <para>For Guacamole to use public key authentication, it must have access to your
                    private key and, if applicable, its passphrase. If the private key requires a
                    passphrase, but no passphrase is provided, you will be prompted for the
                    passphrase upon connecting.</para>
                <para>If no private key is provided, Guacamole will attempt to authenticate using a
                    password, reading that password from the connection parameters, if provided, or
                    by prompting the user directly.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>username</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>username</secondary>
                                        </indexterm>The username to use to authenticate, if any.
                                        This parameter is optional. If not specified, you will be
                                        prompted for the username upon connecting.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>password</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>password</secondary>
                                        </indexterm>The password to use when attempting
                                        authentication, if any. This parameter is optional. If not
                                        specified, you will be prompted for your password upon
                                        connecting.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>private-key</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>public key authentication</secondary>
                                        </indexterm>The entire contents of the private key to use
                                        for public key authentication. If this parameter is not
                                        specified, public key authentication will not be used. The
                                        private key must be in OpenSSH format, as would be generated
                                        by the OpenSSH <command>ssh-keygen</command> utility.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>passphrase</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>passphrase</secondary>
                                        </indexterm>The passphrase to use to decrypt the private key
                                        for use in public key authentication. This parameter is not
                                        needed if the private key does not require a passphrase. If
                                        the private key requires a passphrase, but this parameter is
                                        not provided, the user will be prompted for the passphrase
                                        upon connecting.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="ssh-display-settings">
                <title>Display settings</title>
                <para>Guacamole's SSH support provides a display, but not in the same sense as a
                    remote desktop protocol like VNC or RDP. The display is a terminal emulator, and
                    thus provides options for configuring the font used and its size. In this case,
                        <emphasis>the chosen font must be installed on the server</emphasis>, as it
                    is the server that will handle rendering of characters to the terminal display,
                    not the client.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>color-scheme</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>color scheme</secondary>
                                        </indexterm>The color scheme to use for the terminal
                                        emulator used by SSH connections. Each color scheme dictates
                                        the default foreground and background color for the
                                        terminal. Programs which specify colors when printing text
                                        will override these defaults.</para>
                                    <para>This parameter is optional. By default, Guacamole will
                                        render text as gray over a black background.</para>
                                    <para>Possible values are:</para>
                                    <variablelist>
                                        <varlistentry>
                                            <term><constant>black-white</constant></term>
                                            <listitem>
                                                <para>Black text over a white background.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>gray-black</constant></term>
                                            <listitem>
                                                <para>Gray text over a black background. This is the
                                                  default color scheme.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>green-black</constant></term>
                                            <listitem>
                                                <para>Green text over a black background.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>white-black</constant></term>
                                            <listitem>
                                                <para>White text over a black background.</para>
                                            </listitem>
                                        </varlistentry>
                                    </variablelist>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>font-name</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>font</secondary>
                                        </indexterm>The name of the font to use. This parameter is
                                        optional. If not specified, the default of "monospace" will
                                        be used instead.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>font-size</parameter></entry>
                                <entry>
                                    <para>The size of the font to use, in points. This parameter is
                                        optional. If not specified, the default of 12 will be used
                                        instead.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="ssh-command">
                <title>Running a command (instead of a shell)</title>
                <para>By default, SSH sessions will start an interactive shell. The shell which will
                    be used is determined by the SSH server, normally by reading the user's default
                    shell previously set with <command>chsh</command> or within
                        <filename>/etc/passwd</filename>. If you wish to override this and instead
                    run a specific command, you can do so by specifying that command in the
                    configuration of the Guacamole SSH connection.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>command</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>command</secondary>
                                        </indexterm>The command to execute over the SSH session, if
                                        any. This parameter is optional. If not specified, the SSH
                                        session will use the user's default shell.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="ssh-typescripts">
                <title>Text session recording (typescripts)</title>
                <para>The full, raw text content of SSH sessions, including timing information, can
                    be recorded automatically to a specified directory. This recording, also known
                    as a "typescript", will be written to two files within the directory specified
                    by <parameter>typescript-path</parameter>:
                            <filename><replaceable>NAME</replaceable></filename>, which contains the
                    raw text data, and <filename><replaceable>NAME</replaceable>.timing</filename>,
                    which contains timing information, where <replaceable>NAME</replaceable> is the
                    value provided for the <parameter>typescript-name</parameter> parameter.</para>
                <para>This format is compatible with the format used by the standard UNIX
                        <command>script</command> command, and can be replayed using
                        <command>scriptreplay</command> (if installed). For example, to replay a
                    typescript called "<replaceable>NAME</replaceable>", you would run:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>scriptreplay <replaceable>NAME</replaceable>.timing <replaceable>NAME</replaceable></userinput></screen>
                </informalexample>
                <important>
                    <para>Guacamole will never overwrite an existing recording. If necessary, a
                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
                            <replaceable>NAME</replaceable> to avoid overwriting an existing
                        recording. If even appending a numeric suffix does not help, the session
                        will simply not be recorded.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>typescript-path</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>typescripts</secondary>
                                        </indexterm><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>text recording</secondary>
                                        </indexterm>The directory in which typescript files should
                                        be created. <emphasis>If a typescript needs to be recorded,
                                            this parameter is required.</emphasis> Specifying this
                                        parameter enables typescript recording. If this parameter is
                                        omitted, no typescript will be recorded.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-typescript-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", the directory specified by the
                                            <parameter>typescript-path</parameter> parameter will
                                        automatically be created if it does not yet exist. Only the
                                        final directory in the path will be created - if other
                                        directories earlier in the path do not exist, automatic
                                        creation will fail, and an error will be logged.</para>
                                    <para><emphasis>This parameter is optional.</emphasis> By
                                        default, the directory specified by the
                                            <parameter>typescript-path</parameter> parameter will
                                        not automatically be created, and attempts to record
                                        typescripts in a non-existent directory will be logged as
                                        errors.</para>
                                    <para>This parameter only has an effect if typescript recording
                                        is enabled. If the <parameter>typescript-path</parameter> is
                                        not specified, recording of typescripts will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>typescript-name</parameter></entry>
                                <entry>
                                    <para>The base filename to use when determining the names for
                                        the data and timing files of the typescript. <emphasis>This
                                            parameter is optional.</emphasis> If omitted, the value
                                        "typescript" will be used instead.</para>
                                    <para>Each typescript consists of two files which are created
                                        within the directory specified by
                                            <parameter>typescript-path</parameter>:
                                                <filename><replaceable>NAME</replaceable></filename>,
                                        which contains the raw text data, and
                                                <filename><replaceable>NAME</replaceable>.timing</filename>,
                                        which contains timing information, where
                                            <replaceable>NAME</replaceable> is the value provided
                                        for the <parameter>typescript-name</parameter>
                                        parameter.</para>
                                    <para>This parameter only has an effect if typescript recording
                                        is enabled. If the <parameter>typescript-path</parameter> is
                                        not specified, recording of typescripts will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="ssh-recording">
                <title>Graphical session recording</title>
                <para>In addition to text-based recordings, SSH sessions can be recorded
                    graphically. These recordings take the form of Guacamole protocol dumps and are
                    recorded automatically to a specified directory. Recordings can be subsequently
                    translated to a normal video stream using the <command>guacenc</command> utility
                    provided with guacamole-server.</para>
                <para>For example, to produce a video called "<replaceable>NAME</replaceable>.m4v"
                    from the recording "<replaceable>NAME</replaceable>", you would run:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guacenc <replaceable>/path/to/recording/NAME</replaceable></userinput></screen>
                </informalexample>
                <para>The <command>guacenc</command> utility has additional options for overriding
                    default behavior, including tweaking the output format, which are documented in
                    detail within the manpage:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>man guacenc</userinput></screen>
                </informalexample>
                <para>If recording of key events is explicitly enabled using the
                        <parameter>recording-include-keys</parameter> parameter, recordings can also
                    be translated into human-readable interpretations of the keys pressed during the
                    session using the <command>guaclog</command> utility. The usage of
                        <command>guaclog</command> is analogous to <command>guacenc</command>, and
                    results in the creation of a new text file containing the interpreted
                    events:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guaclog <replaceable>/path/to/recording/NAME</replaceable></userinput><computeroutput>
guaclog: INFO: Guacamole input log interpreter (guaclog) version 0.9.14
guaclog: INFO: 1 input file(s) provided.
guaclog: INFO: Writing input events from "<replaceable>/path/to/recording/NAME</replaceable>" to "<replaceable annotations="">/path/to/recording/NAME</replaceable>.txt" ...
guaclog: INFO: All files interpreted successfully.</computeroutput>
<prompt>$</prompt> </screen>
                </informalexample>
                <important>
                    <para>Guacamole will never overwrite an existing recording. If necessary, a
                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
                            <replaceable>NAME</replaceable> to avoid overwriting an existing
                        recording. If even appending a numeric suffix does not help, the session
                        will simply not be recorded.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>recording-path</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>graphical recording</secondary>
                                        </indexterm>The directory in which screen recording files
                                        should be created. <emphasis>If a graphical recording needs
                                            to be created, then this parameter is
                                            required.</emphasis> Specifying this parameter enables
                                        graphical screen recording. If this parameter is omitted, no
                                        graphical recording will be created.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-recording-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", the directory specified by the
                                            <parameter>recording-path</parameter> parameter will
                                        automatically be created if it does not yet exist. Only the
                                        final directory in the path will be created - if other
                                        directories earlier in the path do not exist, automatic
                                        creation will fail, and an error will be logged.</para>
                                    <para><emphasis>This parameter is optional.</emphasis> By
                                        default, the directory specified by the
                                            <parameter>recording-path</parameter> parameter will not
                                        automatically be created, and attempts to create recordings
                                        within a non-existent directory will be logged as
                                        errors.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-name</parameter></entry>
                                <entry>
                                    <para>The filename to use for any created recordings.
                                            <emphasis>This parameter is optional.</emphasis> If
                                        omitted, the value "recording" will be used instead.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-output</parameter></entry>
                                <entry>
                                    <para>If set to "true", graphical output and other data normally
                                        streamed from server to client will be excluded from the
                                        recording, producing a recording which contains only user
                                        input events. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, graphical output will
                                        be included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-mouse</parameter></entry>
                                <entry>
                                    <para>If set to "true", user mouse events will be excluded from
                                        the recording, producing a recording which lacks a visible
                                        mouse cursor. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, mouse events will be
                                        included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-include-keys</parameter></entry>
                                <entry>
                                    <para>If set to "true", user key events will be included in the
                                        recording. The recording can subsequently be passed through
                                        the <command>guaclog</command> utility to produce a
                                        human-readable interpretation of the keys pressed during the
                                        session. <emphasis>This parameter is optional.</emphasis> If
                                        omitted, key events will be not included in the
                                        recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="ssh-sftp">
                <title>SFTP</title>
                <para>Guacamole provides support for file transfer over SSH using SFTP, the file
                    transfer protocol built into most SSH servers. If SFTP is enabled on a Guacamole
                    SSH connection, users will be able to upload and download files as described in
                        <xref linkend="using-guacamole"/>.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>enable-sftp</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>SSH</primary>
                                            <secondary>file transfer</secondary>
                                        </indexterm><indexterm>
                                            <primary>SFTP</primary>
                                        </indexterm>Whether file transfer should be enabled. If set
                                        to "true", the user will be allowed to upload or download
                                        files from the SSH server using SFTP. Guacamole includes the
                                            <command>guacctl</command> utility which controls file
                                        downloads and uploads when run on the SSH server by the user
                                        over the SSH connection.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>sftp-root-directory</parameter></entry>
                                <entry>
                                    <para>The directory to expose to connected users via Guacamole's
                                            <link xmlns:xlink="http://www.w3.org/1999/xlink"
                                            linkend="file-browser">file browser</link>. If omitted,
                                        the root directory will be used by default.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="adding-ssh">
                <title>Adding an SSH connection</title>
                <indexterm>
                    <primary>SSH</primary>
                    <secondary>adding</secondary>
                </indexterm>
                <para>If you are using the default authentication built into Guacamole, and you wish
                    to grant access to a SSH connection to a particular user, you need to locate the
                        <code>&lt;authorize></code> section for that user within your
                        <filename>user-mapping.xml</filename>, and add a section like the following
                    within it:</para>
                <programlisting>&lt;connection name="<replaceable>Unique Name</replaceable>">
    &lt;protocol>ssh&lt;/protocol>
    &lt;param name="hostname"><replaceable>localhost</replaceable>&lt;/param>
    &lt;param name="port"><replaceable>22</replaceable>&lt;/param>
&lt;/connection></programlisting>
                <para>If added exactly as above, a new connection named "<replaceable>Unique
                        Name</replaceable>" will be available to the user associated with the
                        <code>&lt;authorize></code> section containing it. The connection will use
                    SSH to connect to <replaceable>localhost</replaceable> at port
                        <replaceable>22</replaceable>. Naturally, you will want to change some or
                    all of these values.</para>
                <para>If you want to login automatically rather than receive a login prompt upon
                    connecting, you can specify a username and password with additional
                        <code>&lt;param></code> tags. Other options are available for controlling
                    the font.</para>
                <para>Other authentication methods will provide documentation describing how to
                    configure new connections.</para>
            </section>
        </section>
        <section xml:id="telnet">
            <title>Telnet</title>
            <indexterm>
                <primary>telnet</primary>
            </indexterm>
            <para>Telnet is a text protocol and provides similar functionality to SSH. By nature, it
                is not encrypted, and does not provide support for file transfer. As far as graphics
                are concerned, Guacamole's telnet support works in the same manner as SSH: it
                emulates a terminal on the server side which renders to the Guacamole client's
                display.</para>
            <para>Telnet support for Guacamole is provided by the
                    <package>libguac-client-telnet</package> library, which will be installed as
                part of guacamole-server if the required dependencies are present during the
                build.</para>
            <section xml:id="telnet-network-parameters">
                <title>Network parameters</title>
                <para>Telnet connections require a hostname or IP address defining the destination
                    machine. Telnet is standardized to use port 23 and this will be the proper value
                    in most cases. You only need to specify the telnet port if you are not using the
                    standard port.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>telnet</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>hostname</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>hostname</secondary>
                                        </indexterm>The hostname or IP address of the telnet server
                                        Guacamole should connect to.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>port</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>port</secondary>
                                        </indexterm>The port the telnet server is listening on,
                                        usually 23. This parameter is optional. If this is not
                                        specified, the default of 23 will be used.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="telnet-authentication">
                <title>Authentication</title>
                <para>Telnet does not actually provide any standard means of authentication.
                    Authentication over telnet depends entirely on the login process running on the
                    server and is interactive. To cope with this, Guacamole provides non-standard
                    mechanisms for automatically passing the username and entering password. Whether
                    these mechanisms work depends on specific login process used by your telnet
                    server.</para>
                <para>The de-facto method for passing the username automatically via telnet is to
                    submit it via the <envar>USER</envar> environment variable, sent using the
                        <methodname>NEW-ENVIRON</methodname> option. This is the mechanism used by
                    most telnet clients, typically via the <option>-l</option> command-line
                    option.</para>
                <para>Passwords cannot typically be sent automatically - at least not as reliably as
                    the username. There is no <envar>PASSWORD</envar> environment variable (this
                    would actually be a horrible idea) nor any similar mechanism for passing the
                    password to the telnet login process, and most telnet clients provide no
                    built-in support for automatically entering the password. The best that can be
                    done is to heuristically detect the password prompt, and type the password on
                    behalf of the user when the prompt appears. The prescribed method for doing this
                    with a traditional command-line telnet is to use a utility like
                        <command>expect</command>. Guacamole provides similar functionality by
                    searching for the password prompt with a regular expression.</para>
                <para>If Guacamole receives a line of text which matches the regular expression, the
                    password is automatically sent. If no such line is ever received, the password
                    is not sent, and the user must type the password manually. Pressing any key
                    during this process cancels the heuristic password prompt detection.</para>
                <para>If the password prompt is not being detected properly, you can try using your
                    own regular expression by specifying it within the
                        <parameter>password-regex</parameter> parameter. The regular expression must
                    be written in the POSIX ERE dialect (the dialect typically used by
                        <command>egrep</command>).</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>telnet</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>username</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>username</secondary>
                                        </indexterm>The username to use to authenticate, if any.
                                        This parameter is optional. If not specified, or not
                                        supported by the telnet server, the login process on the
                                        telnet server will prompt you for your credentials. For this
                                        to work, your telnet server must support the
                                            <methodname>NEW-ENVIRON</methodname> option, and the
                                        telnet login process must pay attention to the
                                            <envar>USER</envar> environment variable. Most telnet
                                        servers satisfy this criteria.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>password</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>password</secondary>
                                        </indexterm>The password to use when attempting
                                        authentication, if any. This parameter is optional. If
                                        specified, your password will be typed on your behalf when
                                        the password prompt is detected.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>username-regex</parameter></entry>
                                <entry>
                                    <para>The regular expression to use when waiting for the
                                        username prompt. This parameter is optional. If not
                                        specified, a reasonable default built into Guacamole will be
                                        used. The regular expression must be written in the POSIX
                                        ERE dialect (the dialect typically used by
                                            <command>egrep</command>).</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>password-regex</parameter></entry>
                                <entry>
                                    <para>The regular expression to use when waiting for the
                                        password prompt. This parameter is optional. If not
                                        specified, a reasonable default built into Guacamole will be
                                        used. The regular expression must be written in the POSIX
                                        ERE dialect (the dialect typically used by
                                            <command>egrep</command>).</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="telnet-display-settings">
                <title>Display settings</title>
                <para>Guacamole's telnet support provides a display, but not in the same sense as a
                    remote desktop protocol like VNC or RDP. The display is a terminal emulator, and
                    thus provides options for configuring the font used and its size. In this case,
                        <emphasis>the chosen font must be installed on the server</emphasis>, as it
                    is the server that will handle rendering of characters to the terminal display,
                    not the client.</para>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>telnet</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>color-scheme</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>color scheme</secondary>
                                        </indexterm>The color scheme to use for the terminal
                                        emulator used by telnet connections. Each color scheme
                                        dictates the default foreground and background color for the
                                        terminal. Programs which specify colors when printing text
                                        will override these defaults.</para>
                                    <para>This parameter is optional. By default, Guacamole will
                                        render text as gray over a black background.</para>
                                    <para>Possible values are:</para>
                                    <variablelist>
                                        <varlistentry>
                                            <term><constant>black-white</constant></term>
                                            <listitem>
                                                <para>Black text over a white background.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>gray-black</constant></term>
                                            <listitem>
                                                <para>Gray text over a black background. This is the
                                                  default color scheme.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>green-black</constant></term>
                                            <listitem>
                                                <para>Green text over a black background.</para>
                                            </listitem>
                                        </varlistentry>
                                        <varlistentry>
                                            <term><constant>white-black</constant></term>
                                            <listitem>
                                                <para>White text over a black background.</para>
                                            </listitem>
                                        </varlistentry>
                                    </variablelist>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>font-name</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>font</secondary>
                                        </indexterm>The name of the font to use. This parameter is
                                        optional. If not specified, the default of "monospace" will
                                        be used instead.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>font-size</parameter></entry>
                                <entry>
                                    <para>The size of the font to use, in points. This parameter is
                                        optional. If not specified, the default of 12 will be used
                                        instead.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="telnet-typescripts">
                <title>Text session recording (typescripts)</title>
                <para>The full, raw text content of telnet sessions, including timing information,
                    can be recorded automatically to a specified directory. This recording, also
                    known as a "typescript", will be written to two files within the directory
                    specified by <parameter>typescript-path</parameter>:
                            <filename><replaceable>NAME</replaceable></filename>, which contains the
                    raw text data, and <filename><replaceable>NAME</replaceable>.timing</filename>,
                    which contains timing information, where <replaceable>NAME</replaceable> is the
                    value provided for the <parameter>typescript-name</parameter> parameter.</para>
                <para>This format is compatible with the format used by the standard UNIX
                        <command>script</command> command, and can be replayed using
                        <command>scriptreplay</command> (if installed). For example, to replay a
                    typescript called "<replaceable>NAME</replaceable>", you would run:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>scriptreplay <replaceable>NAME</replaceable>.timing <replaceable>NAME</replaceable></userinput></screen>
                </informalexample>
                <important>
                    <para>Guacamole will never overwrite an existing recording. If necessary, a
                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
                            <replaceable>NAME</replaceable> to avoid overwriting an existing
                        recording. If even appending a numeric suffix does not help, the session
                        will simply not be recorded.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>SSH</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>typescript-path</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>typescripts</secondary>
                                        </indexterm><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>text recording</secondary>
                                        </indexterm>The directory in which typescript files should
                                        be created. <emphasis>If a typescript needs to be recorded,
                                            this parameter is required.</emphasis> Specifying this
                                        parameter enables typescript recording. If this parameter is
                                        omitted, no typescript will be recorded.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-typescript-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", the directory specified by the
                                            <parameter>typescript-path</parameter> parameter will
                                        automatically be created if it does not yet exist. Only the
                                        final directory in the path will be created - if other
                                        directories earlier in the path do not exist, automatic
                                        creation will fail, and an error will be logged.</para>
                                    <para><emphasis>This parameter is optional.</emphasis> By
                                        default, the directory specified by the
                                            <parameter>typescript-path</parameter> parameter will
                                        not automatically be created, and attempts to record
                                        typescripts in a non-existent directory will be logged as
                                        errors.</para>
                                    <para>This parameter only has an effect if typescript recording
                                        is enabled. If the <parameter>typescript-path</parameter> is
                                        not specified, recording of typescripts will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>typescript-name</parameter></entry>
                                <entry>
                                    <para>The base filename to use when determining the names for
                                        the data and timing files of the typescript. <emphasis>This
                                            parameter is optional.</emphasis> If omitted, the value
                                        "typescript" will be used instead.</para>
                                    <para>Each typescript consists of two files which are created
                                        within the directory specified by
                                            <parameter>typescript-path</parameter>:
                                                <filename><replaceable>NAME</replaceable></filename>,
                                        which contains the raw text data, and
                                                <filename><replaceable>NAME</replaceable>.timing</filename>,
                                        which contains timing information, where
                                            <replaceable>NAME</replaceable> is the value provided
                                        for the <parameter>typescript-name</parameter>
                                        parameter.</para>
                                    <para>This parameter only has an effect if typescript recording
                                        is enabled. If the <parameter>typescript-path</parameter> is
                                        not specified, recording of typescripts will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="telnet-recording">
                <title>Graphical session recording</title>
                <para>In addition to text-based recordings, telnet sessions can be recorded
                    graphically. These recordings take the form of Guacamole protocol dumps and are
                    recorded automatically to a specified directory. Recordings can be subsequently
                    translated to a normal video stream using the <command>guacenc</command> utility
                    provided with guacamole-server.</para>
                <para>For example, to produce a video called "<replaceable>NAME</replaceable>.m4v"
                    from the recording "<replaceable>NAME</replaceable>", you would run:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guacenc <replaceable>/path/to/recording/NAME</replaceable></userinput></screen>
                </informalexample>
                <para>The <command>guacenc</command> utility has additional options for overriding
                    default behavior, including tweaking the output format, which are documented in
                    detail within the manpage:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>man guacenc</userinput></screen>
                </informalexample>
                <para>If recording of key events is explicitly enabled using the
                        <parameter>recording-include-keys</parameter> parameter, recordings can also
                    be translated into human-readable interpretations of the keys pressed during the
                    session using the <command>guaclog</command> utility. The usage of
                        <command>guaclog</command> is analogous to <command>guacenc</command>, and
                    results in the creation of a new text file containing the interpreted
                    events:</para>
                <informalexample>
                    <screen><prompt>$</prompt> <userinput>guaclog <replaceable>/path/to/recording/NAME</replaceable></userinput><computeroutput>
guaclog: INFO: Guacamole input log interpreter (guaclog) version 0.9.14
guaclog: INFO: 1 input file(s) provided.
guaclog: INFO: Writing input events from "<replaceable>/path/to/recording/NAME</replaceable>" to "<replaceable annotations="">/path/to/recording/NAME</replaceable>.txt" ...
guaclog: INFO: All files interpreted successfully.</computeroutput>
<prompt>$</prompt> </screen>
                </informalexample>
                <important>
                    <para>Guacamole will never overwrite an existing recording. If necessary, a
                        numeric suffix like ".1", ".2", ".3", etc. will be appended to
                            <replaceable>NAME</replaceable> to avoid overwriting an existing
                        recording. If even appending a numeric suffix does not help, the session
                        will simply not be recorded.</para>
                </important>
                <informaltable frame="all">
                    <indexterm>
                        <primary>parameters</primary>
                        <secondary>telnet</secondary>
                    </indexterm>
                    <tgroup cols="2">
                        <colspec colname="c1" colnum="1" colwidth="1*"/>
                        <colspec colname="c2" colnum="2" colwidth="3.55*"/>
                        <thead>
                            <row>
                                <entry>Parameter name</entry>
                                <entry>Description</entry>
                            </row>
                        </thead>
                        <tbody>
                            <row>
                                <entry><parameter>recording-path</parameter></entry>
                                <entry>
                                    <para><indexterm>
                                            <primary>telnet</primary>
                                            <secondary>graphical recording</secondary>
                                        </indexterm>The directory in which screen recording files
                                        should be created. <emphasis>If a graphical recording needs
                                            to be created, then this parameter is
                                            required.</emphasis> Specifying this parameter enables
                                        graphical screen recording. If this parameter is omitted, no
                                        graphical recording will be created.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>create-recording-path</parameter></entry>
                                <entry>
                                    <para>If set to "true", the directory specified by the
                                            <parameter>recording-path</parameter> parameter will
                                        automatically be created if it does not yet exist. Only the
                                        final directory in the path will be created - if other
                                        directories earlier in the path do not exist, automatic
                                        creation will fail, and an error will be logged.</para>
                                    <para><emphasis>This parameter is optional.</emphasis> By
                                        default, the directory specified by the
                                            <parameter>recording-path</parameter> parameter will not
                                        automatically be created, and attempts to create recordings
                                        within a non-existent directory will be logged as
                                        errors.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-name</parameter></entry>
                                <entry>
                                    <para>The filename to use for any created recordings.
                                            <emphasis>This parameter is optional.</emphasis> If
                                        omitted, the value "recording" will be used instead.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-output</parameter></entry>
                                <entry>
                                    <para>If set to "true", graphical output and other data normally
                                        streamed from server to client will be excluded from the
                                        recording, producing a recording which contains only user
                                        input events. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, graphical output will
                                        be included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-exclude-mouse</parameter></entry>
                                <entry>
                                    <para>If set to "true", user mouse events will be excluded from
                                        the recording, producing a recording which lacks a visible
                                        mouse cursor. <emphasis>This parameter is
                                            optional.</emphasis> If omitted, mouse events will be
                                        included in the recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                            <row>
                                <entry><parameter>recording-include-keys</parameter></entry>
                                <entry>
                                    <para>If set to "true", user key events will be included in the
                                        recording. The recording can subsequently be passed through
                                        the <command>guaclog</command> utility to produce a
                                        human-readable interpretation of the keys pressed during the
                                        session. <emphasis>This parameter is optional.</emphasis> If
                                        omitted, key events will be not included in the
                                        recording.</para>
                                    <para>This parameter only has an effect if graphical recording
                                        is enabled. If the <parameter>recording-path</parameter> is
                                        not specified, graphical session recording will be disabled,
                                        and this parameter will be ignored.</para>
                                </entry>
                            </row>
                        </tbody>
                    </tgroup>
                </informaltable>
            </section>
            <section xml:id="adding-telnet">
                <title>Adding a telnet connection</title>
                <indexterm>
                    <primary>telnet</primary>
                    <secondary>adding</secondary>
                </indexterm>
                <para>If you are using the default authentication built into Guacamole, and you wish
                    to grant access to a telnet connection to a particular user, you need to locate
                    the <code>&lt;authorize></code> section for that user within your
                        <filename>user-mapping.xml</filename>, and add a section like the following
                    within it:</para>
                <programlisting>&lt;connection name="<replaceable>Unique Name</replaceable>">
    &lt;protocol>telnet&lt;/protocol>
    &lt;param name="hostname"><replaceable>localhost</replaceable>&lt;/param>
    &lt;param name="port"><replaceable>23</replaceable>&lt;/param>
&lt;/connection></programlisting>
                <para>If added exactly as above, a new connection named "<replaceable>Unique
                        Name</replaceable>" will be available to the user associated with the
                        <code>&lt;authorize></code> section containing it. The connection will use
                    telnet to connect to <replaceable>localhost</replaceable> at port
                        <replaceable>23</replaceable>. Naturally, you will want to change some or
                    all of these values.</para>
                <para>As telnet is inherently insecure compared to SSH, you should use SSH instead
                    wherever possible. If Guacamole is set up to use HTTPS then communication with
                    the Guacamole <emphasis>client</emphasis> will be encrypted, but communication
                    between guacd and the telnet server will still be unencrypted. You should not
                    use telnet unless the network between guacd and the telnet server is
                    trusted.</para>
            </section>
        </section>
        <section xml:id="parameter-tokens">
            <title>Parameter tokens</title>
            <para>The values of connection parameters can contain "tokens" which will be replaced by
                Guacamole when used. These tokens allow the values of connection parameters to vary
                dynamically by the user using the connection, and provide a simple means of
                forwarding authentication information without storing that information in the
                connection configuration itself, so long as the remote desktop connection uses the
                same credentials as Guacamole.</para>
            <para>Each token is of the form
                    <varname>${<replaceable>TOKEN_NAME</replaceable>}</varname>, where
                    <replaceable>TOKEN_NAME</replaceable> is some descriptive name for the value the
                token represents. Tokens with no corresponding value will never be replaced, but
                should you need such text within your connection parameters, and wish to guarantee
                that this text will not be replaced with a token value, you can escape the token by
                adding an additional leading "$", as in "$${TOKEN_NAME}".</para>
            <variablelist>
                <varlistentry>
                    <term><varname>${GUAC_USERNAME}</varname></term>
                    <listitem>
                        <para>The username of the current Guacamole user. When a user accesses a
                            connection, this token will be dynamically replaced with the username
                            they provided when logging in to Guacamole.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><varname>${GUAC_PASSWORD}</varname></term>
                    <listitem>
                        <para>The password of the current Guacamole user. When a user accesses a
                            connection, this token will be dynamically replaced with the password
                            they used when logging in to Guacamole.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><varname>${GUAC_CLIENT_ADDRESS}</varname></term>
                    <listitem>
                        <para>The IPv4 or IPv6 address of the current Guacamole user. This will be
                            the address of the client side of the HTTP connection to the Guacamole
                            server at the time the current user logged in.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><varname>${GUAC_CLIENT_HOSTNAME}</varname></term>
                    <listitem>
                        <para>The hostname of the current Guacamole user. This will be the hostname
                            of the client side of the HTTP connection to the Guacamole server at the
                            time the current user logged in. If no such hostname can be determined,
                            the IPv4 or IPv6 address will be used instead, and this token will be
                            equivalent to <varname>${GUAC_CLIENT_ADDRESS}</varname>.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><varname>${GUAC_DATE}</varname></term>
                    <listitem>
                        <para>The current date in the local time zone of the Guacamole server. This
                            will be written in "YYYYMMDD" format, where "YYYY" is the year, "MM" is
                            the month number, and "DD" is the day of the month, all zero-padded.
                            When a user accesses a connection, this token will be dynamically
                            replaced with the date that the connection began.</para>
                    </listitem>
                </varlistentry>
                <varlistentry>
                    <term><varname>${GUAC_TIME}</varname></term>
                    <listitem>
                        <para>The current time in the local time zone of the Guacamole server. This
                            will be written in "HHMMSS" format, where "HH" is hours in 24-hour time,
                            "MM" is minutes, and "SS" is seconds, all zero-padded. When a user
                            accesses a connection, this token will be dynamically replaced with the
                            time that the connection began.</para>
                    </listitem>
                </varlistentry>
            </variablelist>
            <para>Note that these tokens are replaced dynamically each time a connection is used. If
                two different users access the same connection at the same time, both users will be
                connected independently of each other using different sets of connection
                parameters.</para>
        </section>
    </section>
    <section xml:id="guacd.conf">
        <title>Configuring guacd</title>
        <para><indexterm>
                <primary>guacd.conf</primary>
            </indexterm>guacd is configured with a configuration file called
                <filename>guacd.conf</filename>, by default located in
                <filename>/etc/guacamole</filename>. This file follows a simple, INI-like
            format:</para>
        <informalexample>
            <programlisting>#
# guacd configuration file
#

[daemon]

pid_file = /var/run/guacd.pid
log_level = info

[server]

bind_host = localhost
bind_port = 4822

#
# The following parameters are valid only if
# guacd was built with SSL support.
#

[ssl]

server_certificate = /etc/ssl/certs/guacd.crt
server_key = /etc/ssl/private/guacd.key</programlisting>
        </informalexample>
        <para>Configuration options are given as parameter/value pairs, where the name of the
            parameter is specified on the left side of an "<code>=</code>", and the value is
            specified on the right. Each parameter must occur within a proper section, indicated by
            a section name within brackets. The names of these sections are important; it is the
            pairing of a section name with a parameter that constitutes the fully-qualified
            parameter being set.</para>
        <para>For the sake of documentation and readability, comments can be added anywhere within
            guacd.conf using "<code>#</code>" symbols. All text following a "<code>#</code>" until
            end-of-line will be ignored.</para>
        <para>If you need to include special characters within the value of a parameter, such as
            whitespace or any of the above symbols, you can do so by placing the parameter within
            double quotes:</para>
        <informalexample>
            <programlisting>[ssl]

# Whitespace is legal within double quotes ...
server_certificate = "/etc/ssl/my certs/guacd.crt"

# ... as are other special symbols
server_key = "/etc/ssl/#private/guacd.key"</programlisting>
        </informalexample>
        <para>Note that even within double quotes, some characters still have special meaning, such
            as the double quote itself or newline characters. If you need to include these, they
            must be "escaped" with a backslash:</para>
        <informalexample>
            <programlisting># Parameter value containing a double quote
parameter = "some\"value"

# Parameter value containing newline characters
parameter2 = "line1\
line2\
line3"

# Parameter value containing backslashes
parameter3 = "c:\\windows\\path\\to\\file.txt"</programlisting>
        </informalexample>
        <para>Don't worry too much about the more complex formatting examples - they are only rarely
            necessary, and guacd will complain with parsing errors if the configuration file is
            somehow invalid. To ensure parameter values are entered correctly, just follow the
            following guidelines:</para>
        <orderedlist>
            <listitem>
                <para>If the value contains no special characters, just include it as-is.</para>
            </listitem>
            <listitem>
                <para>If the value contains any special characters (whitespace, newlines,
                        <code>#</code>, <code>\</code>, or <code>"</code>), enclose the entire value
                    within double quotes.</para>
            </listitem>
            <listitem>
                <para>If the value is enclosed within double quotes, escape newlines,
                    <code>\</code>, and <code>"</code> with a backslash.</para>
            </listitem>
        </orderedlist>
        <table frame="all">
            <title>guacd.conf parameters</title>
            <indexterm>
                <primary>parameters</primary>
                <secondary>guacd.conf</secondary>
            </indexterm>
            <tgroup cols="3">
                <colspec colname="c1" colnum="1" colwidth="1*"/>
                <colspec colname="c2" colnum="2" colwidth="1.85*"/>
                <colspec colname="c3" colnum="3" colwidth="5.55*"/>
                <thead>
                    <row>
                        <entry>Section</entry>
                        <entry>Name</entry>
                        <entry>Description</entry>
                    </row>
                </thead>
                <tbody>
                    <row>
                        <entry><parameter>daemon</parameter></entry>
                        <entry><parameter>pid_file</parameter></entry>
                        <entry>
                            <para><indexterm>
                                    <primary><parameter>pid_file</parameter></primary>
                                </indexterm>The name of the file in which the PID of the main guacd
                                process should be written. This is mainly needed for startup
                                scripts, which need to monitor the state of guacd, killing it if
                                necessary. If this parameter is specified, the user running guacd
                                must have sufficient permissions to create or modify the specified
                                file, or startup will fail.</para>
                        </entry>
                    </row>
                    <row>
                        <entry><parameter>daemon</parameter></entry>
                        <entry><parameter>log_level</parameter></entry>
                        <entry>
                            <para><indexterm>
                                    <primary>logging</primary>
                                    <secondary>guacd</secondary>
                                </indexterm><indexterm>
                                    <primary>guacd</primary>
                                    <secondary>logging</secondary>
                                </indexterm><indexterm>
                                    <primary><parameter>log_level</parameter></primary>
                                </indexterm>The maximum level at which guacd will log messages to
                                syslog and, if running in the foreground, the console. If omitted,
                                the default level of <constant>info</constant> will be used.</para>
                            <para>Legal values are <constant>trace</constant>,
                                    <constant>debug</constant>, <constant>info</constant>,
                                    <constant>warning</constant>, and
                                <constant>error</constant>.</para>
                        </entry>
                    </row>
                    <row>
                        <entry><parameter>server</parameter></entry>
                        <entry><parameter>bind_host</parameter></entry>
                        <entry>
                            <para><indexterm>
                                    <primary><parameter>bind_host</parameter></primary>
                                </indexterm>The host that guacd should bind to when listening for
                                connections. If unspecified, guacd will bind to localhost, and only
                                connections from within the server hosting guacd will
                                succeed.</para>
                        </entry>
                    </row>
                    <row>
                        <entry><parameter>server</parameter></entry>
                        <entry><parameter>bind_port</parameter></entry>
                        <entry>
                            <para><indexterm>
                                    <primary><parameter>bind_port</parameter></primary>
                                </indexterm>The port that guacd should bind to when listening for
                                connections. If unspecified, port 4822 will be used.</para>
                        </entry>
                    </row>
                    <row>
                        <entry><parameter>ssl</parameter></entry>
                        <entry><parameter>server_certificate</parameter></entry>
                        <entry>
                            <para><indexterm>
                                    <primary><parameter>server_certificate</parameter></primary>
                                </indexterm>The filename of the certificate to use for SSL
                                encryption of the Guacamole protocol. If this option is specified,
                                SSL encryption will be enabled, and the Guacamole web application
                                will need to be configured within
                                    <filename>guacamole.properties</filename> to use SSL as
                                well.</para>
                        </entry>
                    </row>
                    <row>
                        <entry><parameter>ssl</parameter></entry>
                        <entry><parameter>server_key</parameter></entry>
                        <entry>
                            <para><indexterm>
                                    <primary><parameter>server_key</parameter></primary>
                                </indexterm>The filename of the private key to use for SSL
                                encryption of the Guacamole protocol. If this option is specified,
                                SSL encryption will be enabled, and the Guacamole web application
                                will need to be configured within
                                    <filename>guacamole.properties</filename> to use SSL as
                                well.</para>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
        <para>You can also affect the configuration of guacd with command-line options. If given,
            these options take precendence over the system-wide configuration file:</para>
        <variablelist>
            <varlistentry>
                <term><option>-b <replaceable>HOST</replaceable></option></term>
                <listitem>
                    <para>Changes the host or address that guacd listens on.</para>
                    <para>This corresponds to the <parameter>bind_host</parameter> parameter within
                        the <parameter>server</parameter> section of
                        <filename>guacd.conf</filename>.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><option>-l <replaceable>PORT</replaceable></option></term>
                <listitem>
                    <para>Changes the port that guacd listens on (the default is port 4822).</para>
                    <para>This corresponds to the <parameter>bind_port</parameter> parameter within
                        the <parameter>server</parameter> section of
                        <filename>guacd.conf</filename>.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><option>-p <replaceable>PIDFILE</replaceable></option></term>
                <listitem>
                    <para>Causes guacd to write the PID of the daemon process to the specified file.
                        This is useful for init scripts and is used by the provided init
                        script.</para>
                    <para>This corresponds to the <parameter>pid_file</parameter> parameter within
                        the <parameter>daemon</parameter> section of
                        <filename>guacd.conf</filename>.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><option>-L <replaceable>LEVEL</replaceable></option></term>
                <listitem>
                    <para>Sets the maximum level at which guacd will log messages to syslog and, if
                        running in the foreground, the console. Legal values are
                            <constant>trace</constant>, <constant>debug</constant>,
                            <constant>info</constant>, <constant>warning</constant>, and
                            <constant>error</constant>. The default value is
                            <constant>info</constant>.</para>
                    <para>This corresponds to the <parameter>log_level</parameter> parameter within
                        the <parameter>daemon</parameter> section of
                        <filename>guacd.conf</filename>.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><option>-f</option></term>
                <listitem>
                    <para>Causes guacd to run in the foreground, rather than automatically forking
                        into the background.</para>
                </listitem>
            </varlistentry>
        </variablelist>
        <para>If guacd was built with support for SSL, data sent via the Guacamole protocol can be
            encrypted with SSL if an SSL certificate and private key are given with the following
            options:</para>
        <variablelist>
            <varlistentry>
                <term><option>-C <replaceable>CERTIFICATE</replaceable></option></term>
                <listitem>
                    <para>The filename of the certificate to use for SSL encryption of the Guacamole
                        protocol. If this option is specified, SSL encryption will be enabled, and
                        the Guacamole web application will need to be configured within
                            <filename>guacamole.properties</filename> to use SSL as well.</para>
                    <para>This corresponds to the <parameter>server_certificate</parameter>
                        parameter within the <parameter>ssl</parameter> section of
                            <filename>guacd.conf</filename>.</para>
                </listitem>
            </varlistentry>
            <varlistentry>
                <term><option>-K <replaceable>KEY</replaceable></option></term>
                <listitem>
                    <para>The filename of the private key to use for SSL encryption of the Guacamole
                        protocol. If this option is specified, SSL encryption will be enabled, and
                        the Guacamole web application will need to be configured within
                            <filename>guacamole.properties</filename> to use SSL as well.</para>
                    <para>This corresponds to the <parameter>server_key</parameter> parameter within
                        the <parameter>ssl</parameter> section of
                        <filename>guacd.conf</filename>.</para>
                </listitem>
            </varlistentry>
        </variablelist>
    </section>

</chapter>
