http://git-wip-us.apache.org/repos/asf/incubator-guacamole-website/blob/2441fd18/doc/0.9.11-incubating/gug/configuring-guacamole.html
----------------------------------------------------------------------
diff --git a/doc/0.9.11-incubating/gug/configuring-guacamole.html 
b/doc/0.9.11-incubating/gug/configuring-guacamole.html
new file mode 100644
index 0000000..b1cc286
--- /dev/null
+++ b/doc/0.9.11-incubating/gug/configuring-guacamole.html
@@ -0,0 +1,1523 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd";><html 
xmlns="http://www.w3.org/1999/xhtml";><head><meta http-equiv="Content-Type" 
content="text/html; charset=UTF-8" /><title>Chapter 5. Configuring 
Guacamole</title><link rel="stylesheet" type="text/css" href="gug.css" /><meta 
name="generator" content="DocBook XSL-NS Stylesheets V1.78.1" /><link 
rel="home" href="index.html" title="Guacamole Manual" /><link rel="up" 
href="users-guide.html" title="Part I. User's Guide" /><link rel="prev" 
href="proxying-guacamole.html" title="Chapter 4. Proxying Guacamole" /><link 
rel="next" href="jdbc-auth.html" title="Chapter 6. Database authentication" />
+            <meta name="viewport" content="width=device-width, 
initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, 
target-densitydpi=device-dpi"/>
+        </head><body>
+            <!-- CONTENT -->
+
+            <div id="page"><div id="content">
+        <div class="navheader"><table width="100%" summary="Navigation 
header"><tr><th colspan="3" align="center">Chapter 5. Configuring 
Guacamole</th></tr><tr><td width="20%" align="left"><a accesskey="p" 
href="proxying-guacamole.html">Prev</a> </td><th width="60%" 
align="center">Part I. User's Guide</th><td width="20%" align="right"> <a 
accesskey="n" href="jdbc-auth.html">Next</a></td></tr></table><hr /></div><div 
xml:lang="en" class="chapter" lang="en"><div class="titlepage"><div><div><h2 
class="title"><a id="configuring-guacamole"></a>Chapter 5. Configuring 
Guacamole</h2></div></div></div><div class="toc"><p><strong>Table of 
Contents</strong></p><dl class="toc"><dt><span class="section"><a 
href="configuring-guacamole.html#guacamole-home"><code 
class="varname">GUACAMOLE_HOME</code></a></span></dt><dt><span 
class="section"><a href="configuring-guacamole.html#initial-setup"><code 
class="filename">guacamole.properties</code></a></span></dt><dt><span 
class="section"><a href="
 configuring-guacamole.html#webapp-logging">Logging within the web 
application</a></span></dt><dt><span class="section"><a 
href="configuring-guacamole.html#basic-auth">Using the default 
authentication</a></span></dt><dd><dl><dt><span class="section"><a 
href="configuring-guacamole.html#user-mapping"><code 
class="filename">user-mapping.xml</code></a></span></dt></dl></dd><dt><span 
class="section"><a 
href="configuring-guacamole.html#connection-configuration">Configuring 
connections</a></span></dt><dd><dl><dt><span class="section"><a 
href="configuring-guacamole.html#vnc">VNC</a></span></dt><dt><span 
class="section"><a 
href="configuring-guacamole.html#rdp">RDP</a></span></dt><dt><span 
class="section"><a 
href="configuring-guacamole.html#ssh">SSH</a></span></dt><dt><span 
class="section"><a 
href="configuring-guacamole.html#telnet">Telnet</a></span></dt><dt><span 
class="section"><a href="configuring-guacamole.html#parameter-tokens">Parameter 
tokens</a></span></dt></dl></dd><dt><span class="se
 ction"><a href="configuring-guacamole.html#guacd.conf">Configuring 
guacd</a></span></dt></dl></div><p>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.</p><p>Guacamole's default authentication method 
reads all users and connections from a single
+        file called <code class="filename">user-mapping.xml</code>. This 
authentication method is intended to
+        be:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li 
class="listitem"><p>Sufficient for small deployments of Guacamole.</p></li><li 
class="listitem"><p>A relatively-easy means of verifying that Guacamole has 
been properly set
+                up.</p></li></ol></div><p>Other, more complex authentication 
methods which use backend databases, LDAP, etc. are
+        discussed in a separate, dedicated chapters.</p><p>Regardless of the 
authentication method you use, Guacamole's configuration always consists
+        of two main pieces: a directory referred to as <code 
class="varname">GUACAMOLE_HOME</code>, which is
+        the primary search location for configuration files, and
+            <code class="filename">guacamole.properties</code>, the main 
configuration file used by Guacamole
+        and its extensions.</p><div class="section"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
id="guacamole-home"></a><code 
class="varname">GUACAMOLE_HOME</code></h2></div></div></div><a 
id="idm140352911061936" class="indexterm"></a><p>Guacamole reads files from its 
own configuration directory by default, resorting to
+            the classpath only when this directory cannot be found. When 
locating this directory,
+            Guacamole will try, in order:</p><div class="orderedlist"><ol 
class="orderedlist" type="1"><li class="listitem"><p>The directory specified 
within the system property
+                        <span 
class="property">guacamole.home</span>.</p></li><li class="listitem"><p>The 
directory specified within the environment variable
+                        <code 
class="varname">GUACAMOLE_HOME</code>.</p></li><li class="listitem"><p>The 
directory <code class="filename">.guacamole</code>, located
+                    within the home directory of the user running the servlet
+                    container.</p></li></ol></div><p>This directory will be 
referred to as
+                <code class="varname">GUACAMOLE_HOME</code> elsewhere in the
+            documentation.</p><p>Guacamole uses <code 
class="varname">GUACAMOLE_HOME</code> as the primary search location for
+            configuration file like <code 
class="filename">guacamole.properties</code>. The structure of
+                <code class="varname">GUACAMOLE_HOME</code> is rigorously 
defined, and consists of the
+            following optional files:</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term"><code 
class="filename">guacamole.properties</code></span></dt><dd><p>The main 
Guacamole configuration file. Properties within this file dictate
+                        how Guacamole will connect to <span 
class="package">guacd</span>, and may configure
+                        the behavior of installed authentication 
extensions.</p></dd><dt><span class="term"><code 
class="filename">logback.xml</code></span></dt><dd><p>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.</p></dd><dt><span class="term"><code 
class="filename">extensions/</code></span></dt><dd><p>The install location for 
all Guacamole extensions. Guacamole will
+                        automatically load all <code 
class="filename">.jar</code> files within this directory
+                        on startup.</p></dd><dt><span class="term"><code 
class="filename">lib/</code></span></dt><dd><p>The search directory for 
libraries required by any Guacamole extensions.
+                        Guacamole will make the <code 
class="filename">.jar</code> 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.</p></dd></dl></div></div><div 
class="section"><div class="titlepage"><div><div><h2 class="title" 
style="clear: both"><a id="initial-setup"></a><code 
class="filename">guacamole.properties</code></h2></div></div></div><a 
id="idm140352910209312" class="indexterm"></a><a id="idm140352910208144" 
class="indexterm"></a><p>The Guacamole web application uses one main 
configuration file called
+                <code class="filename">guacamole.properties</code>. This file 
is the common location for all
+            configuration properties read by Guacamole or any extension of 
Guacamole, including
+            authentication providers.</p><p>In previous releases, this file 
had to be in the classpath of your servlet container.
+            Now, the location of <code 
class="filename">guacamole.properties</code> can be explicitly defined
+            with environment variables or system properties, and the classpath 
is only used as a
+            last resort. When searching for <code 
class="filename">guacamole.properties</code>, Guacamole
+            will check, in order:</p><div class="orderedlist"><ol 
class="orderedlist" type="1"><li class="listitem"><p>Within <code 
class="varname">GUACAMOLE_HOME</code>, as defined above.</p></li><li 
class="listitem"><p>The classpath of the servlet 
container.</p></li></ol></div><p>The <code 
class="filename">guacamole.properties</code> 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:</p><div 
class="variablelist"><dl class="variablelist"><dt><span class="term"><a 
id="idm140352911272784" class="indexterm"></a><em 
class="parameter"><code>api-session-timeout</code></em></span></dt><dd><p>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.</p></dd><dt><span class="term"><a id="idm140352911269744" 
class="indexterm"></a><em 
class="parameter"><code>available-languages</code></em></span></dt><dd><p>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:</p><div 
class="informalexample"><pre class="programlisting">available-languages: en, 
de</pre></div><p>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.</p><p>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.</p></dd><dt><span class="term"><a id="idm140352911264320" 
class="indexterm"></a><em 
class="parameter"><code>guacd-host</code></em></span></dt><dd><p>The host the 
Guacamole proxy daemon (<span class="package">guacd</span>) is
+                        listening on. If omitted, Guacamole will assume <span 
class="package">guacd</span> is
+                        listening on localhost.</p></dd><dt><span 
class="term"><a id="idm140352909515696" class="indexterm"></a><em 
class="parameter"><code>guacd-port</code></em></span></dt><dd><p>The port the 
Guacamole proxy daemon (<span class="package">guacd</span>) is
+                        listening on. If omitted, Guacamole will assume <span 
class="package">guacd</span> is
+                        listening on port 4822.</p></dd><dt><span 
class="term"><a id="idm140352909511872" class="indexterm"></a><em 
class="parameter"><code>guacd-ssl</code></em></span></dt><dd><p>If set to 
"true", Guacamole will require SSL/TLS encryption between the
+                        web application and <span 
class="package">guacd</span>. By default, communication
+                        between the web application and <span 
class="package">guacd</span> will be
+                        unencrypted.</p><p>Note that if you enable this 
option, you must also configure
+                            <span class="package">guacd</span> to use SSL via 
command line options. These
+                        options are documented in the manpage of <span 
class="package">guacd</span>. You will
+                        need an SSL certificate and private 
key.</p></dd></dl></div><div class="example"><a id="idm140352909506640"></a><p 
class="title"><strong>Example 5.1. Example <code 
class="filename">guacamole.properties</code></strong></p><div 
class="example-contents"><a id="guacamole.properties"></a><pre xml:lang="en" 
class="programlisting" lang="en"># Hostname and port of guacamole proxy
+guacd-hostname: localhost
+guacd-port:     4822</pre></div></div><br class="example-break" /></div><div 
class="section"><div class="titlepage"><div><div><h2 class="title" 
style="clear: both"><a id="webapp-logging"></a>Logging within the web 
application</h2></div></div></div><a id="idm140352909502688" 
class="indexterm"></a><p>By default, Guacamole logs all messages to the 
console. Servlet containers like Tomcat
+            will automatically redirect these messages to a log file,
+                <code class="filename">catalina.out</code> 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:</p><div class="variablelist"><dl 
class="variablelist"><dt><span class="term"><a id="idm140352909499856" 
class="indexterm"></a><code 
class="constant">error</code></span></dt><dd><p>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.</p></dd><dt><span class="term"><a id="idm140352909496496" 
class="indexterm"></a><code 
class="constant">warn</code></span></dt><dd><p>Warnings are generally non-fatal 
conditions. The operation continued, but
+                        encountered noteworthy problems.</p></dd><dt><span 
class="term"><a id="idm140352909493248" class="indexterm"></a><code 
class="constant">info</code></span></dt><dd><p>"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.</p></dd><dt><span 
class="term"><a id="idm140352909489904" class="indexterm"></a><code 
class="constant">debug</code></span></dt><dd><p>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.</p></dd></dl></div><p>Guacamole logs messages using a logging framework 
called <a class="link" href="http://logback.qos.ch/"; target="_top">Logback</a> 
and, by default, will only log messages at the
+                "<code class="constant">info</code>" 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
+                <code class="filename">logback.xml</code> file within <code 
class="varname">GUACAMOLE_HOME</code>. For
+            example, to log all messages to the console, even "<code 
class="constant">debug</code>" messages,
+            you might use the following <code 
class="filename">logback.xml</code>:</p><div class="informalexample"><pre 
class="programlisting">&lt;configuration&gt;
+
+    &lt;!-- Appender for debugging --&gt;
+    &lt;appender name="GUAC-DEBUG" 
class="ch.qos.logback.core.ConsoleAppender"&gt;
+        &lt;encoder&gt;
+            &lt;pattern&gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - 
%msg%n&lt;/pattern&gt;
+        &lt;/encoder&gt;
+    &lt;/appender&gt;
+
+    &lt;!-- Log at DEBUG level --&gt;
+    &lt;root level="debug"&gt;
+        &lt;appender-ref ref="GUAC-DEBUG"/&gt;
+    &lt;/root&gt;
+
+&lt;/configuration&gt;</pre></div><p>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.</p><p>More thorough <a 
class="link" href="http://logback.qos.ch/manual/configuration.html"; 
target="_top">documentation on
+                configuring Logback</a> is provided on the Logback project's 
web site.</p></div><div class="section"><div class="titlepage"><div><div><h2 
class="title" style="clear: both"><a id="basic-auth"></a>Using the default 
authentication</h2></div></div></div><a id="idm140352909478256" 
class="indexterm"></a><p>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.</p><p>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,
+                <span class="package">guacamole-ext</span>.</p><div 
class="section"><div class="titlepage"><div><div><h3 class="title"><a 
id="user-mapping"></a><code 
class="filename">user-mapping.xml</code></h3></div></div></div><a 
id="idm140352909474032" class="indexterm"></a><p>The default authentication 
provider used by Guacamole reads all username,
+                password, and configuration information from a file called the 
"user mapping". By
+                default, Guacamole will look for this file at
+                    <code 
class="filename">GUACAMOLE_HOME/user-mapping.xml</code>, but this can be 
overridden
+                by specifying the location with the <span 
class="property">user-mapping</span> property
+                within <code 
class="filename">guacamole.properties</code>:</p><div 
class="informalexample"><pre class="programlisting">user-mapping: <em 
class="replaceable"><code>/path/to/user-mapping.xml</code></em></pre></div><p>An
 example of a user mapping file is included with Guacamole, and looks something
+                like this:</p><pre class="programlisting">&lt;user-mapping&gt;
+       
+    &lt;!-- Per-user authentication and config information --&gt;
+    &lt;authorize username="USERNAME" password="PASSWORD"&gt;
+        &lt;protocol&gt;vnc&lt;/protocol&gt;
+        &lt;param name="hostname"&gt;localhost&lt;/param&gt;
+        &lt;param name="port"&gt;5900&lt;/param&gt;
+        &lt;param name="password"&gt;VNCPASS&lt;/param&gt;
+    &lt;/authorize&gt;
+
+    &lt;!-- Another user, but using md5 to hash the password
+         (example below uses the md5 hash of "PASSWORD") --&gt;
+    &lt;authorize 
+            username="USERNAME2"
+            password="319f4d26e3c536b5dd871bb2c52e3178"
+            encoding="md5"&gt;
+
+        &lt;!-- First authorized connection --&gt;
+        &lt;connection name="localhost"&gt;
+            &lt;protocol&gt;vnc&lt;/protocol&gt;
+            &lt;param name="hostname"&gt;localhost&lt;/param&gt;
+            &lt;param name="port"&gt;5901&lt;/param&gt;
+            &lt;param name="password"&gt;VNCPASS&lt;/param&gt;
+        &lt;/connection&gt;
+
+        &lt;!-- Second authorized connection --&gt;
+        &lt;connection name="otherhost"&gt;
+            &lt;protocol&gt;vnc&lt;/protocol&gt;
+            &lt;param name="hostname"&gt;otherhost&lt;/param&gt;
+            &lt;param name="port"&gt;5900&lt;/param&gt;
+            &lt;param name="password"&gt;VNCPASS&lt;/param&gt;
+        &lt;/connection&gt;
+
+    &lt;/authorize&gt;
+
+&lt;/user-mapping&gt;</pre><p>Each user is specified with a corresponding
+                    <code class="code">&lt;authorize&gt;</code> tag. This tag 
contains all
+                authorized connections for that user, each denoted with a
+                    <code class="code">&lt;connection&gt;</code> tag. Each
+                    <code class="code">&lt;connection&gt;</code> tag contains 
a corresponding
+                protocol and set of protocol-specific parameters, specified 
with
+                the <code class="code">&lt;protocol&gt;</code> and <code 
class="code">&lt;param&gt;</code> tags
+                respectively.</p><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a id="user-setup"></a>Adding 
users</h4></div></div></div><a id="idm140352909463552" 
class="indexterm"></a><p>When using
+                        <code 
class="classname">BasicFileAuthenticationProvider</code>,
+                    username/password pairs are specified with
+                        <code class="code">&lt;authorize&gt;</code> tags, 
which each have a
+                        <code class="code">username</code> and <code 
class="code">password</code>
+                    attribute. Each <code 
class="code">&lt;authorize&gt;</code> tag authorizes a
+                    specific username/password pair to access all connections
+                    within the tag:</p><pre 
class="programlisting">&lt;authorize username="<em 
class="replaceable"><code>USER</code></em>" password="<em 
class="replaceable"><code>PASS</code></em>"&gt;
+    ...
+&lt;/authorize&gt;</pre><p>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:</p><pre 
class="programlisting">&lt;authorize username="<em 
class="replaceable"><code>USER</code></em>"
+           password="<em 
class="replaceable"><code>319f4d26e3c536b5dd871bb2c52e3178</code></em>"
+           encoding="md5"&gt;
+    ...
+&lt;/authorize&gt;</pre><p>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.</p></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="connection-setup"></a>Adding connections to a user</h4></div></div></div><a 
id="idm140352909453808" class="indexterm"></a><p>To specify a connection within 
an
+                        <code class="code">&lt;authorize&gt;</code> tag, you 
can either list a
+                    single protocol and set of parameters (specified with a
+                        <code class="code">&lt;protocol&gt;</code> tag and any 
number of
+                        <code class="code">&lt;param&gt;</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 class="code">&lt;connection&gt;</code> tags, 
each of which can be
+                    named and contains a <code 
class="code">&lt;protocol&gt;</code> tag and any
+                    number of <code class="code">&lt;param&gt;</code> 
tags.</p></div></div></div><div class="section"><div 
class="titlepage"><div><div><h2 class="title" style="clear: both"><a 
id="connection-configuration"></a>Configuring 
connections</h2></div></div></div><p>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.</p><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
id="vnc"></a>VNC</h3></div></div></div><a id="idm140352909444816" 
class="indexterm"></a><p>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.</p><p>VNC support for Guacamole is provided by the 
<span class="package">libguac-client-vnc</span>
+                library, which will be installed as part of guacamole-server 
if the required
+                dependencies are present during the build.</p><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-network-parameters"></a>Network 
parameters</h4></div></div></div><p>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.</p><div 
class="informaltable"><a id="vnc-parameters"></a><a id="idm140352909439344" 
class="indexterm"></a><table border="1"><colgroup><col class="c1" /><col 
class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>hostname</code></em></td><td>
+                                    <p><a id="idm140352909431680" 
class="indexterm"></a>The hostname or IP address of the VNC server
+                                        Guacamole should connect to.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>port</code></em></td><td>
+                                    <p><a id="idm140352909428288" 
class="indexterm"></a>The port the VNC server is listening on, usually
+                                        5900 or 5900 + <em 
class="replaceable"><code>display number</code></em>.
+                                        For example, if your VNC server is 
serving display number 1
+                                        (sometimes written as <code 
class="constant">:1</code>), your port
+                                        number here would be 5901.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>autoretry</code></em></td><td>
+                                    <p><a id="idm140352909423792" 
class="indexterm"></a>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.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-authentication"></a>Authentication</h4></div></div></div><p>The VNC 
standard defines only password based authentication. Other
+                    authentication mechanisms exist, but are non-standard or 
proprietary. Guacamole
+                    supports only the password method.</p><div 
class="informaltable"><a id="idm140352909418560" class="indexterm"></a><table 
border="1"><colgroup><col class="c1" /><col class="c2" 
/></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>password</code></em></td><td>
+                                    <p><a id="idm140352909410848" 
class="indexterm"></a>The password to use when attempting
+                                        authentication, if any. This parameter 
is optional.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-display-settings"></a>Display settings</h4></div></div></div><p>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.</p><p>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.</p><div 
class="informaltable"><a id="idm140352909404512" class="indexterm"></a><table 
border="1"><colgroup><col class="c1" /><col class="c2" 
/></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>color-depth</code></em></td><td>
+                                    <p><a id="idm140352909396800" 
class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>swap-red-blue</code></em></td><td>
+                                    <p>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>cursor</code></em></td><td>
+                                    <p><a id="idm140352909390528" 
class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>encodings</code></em></td><td>
+                                    <p><a id="idm140352909386752" 
class="indexterm"></a>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
+                                            <span 
class="package">libguac-client-vnc</span> will use any
+                                        supported encoding by default.</p>
+                                    <p>Beware that this parameter is intended 
to be replaced with
+                                        individual, encoding-specific 
parameters in a future
+                                        release.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>read-only</code></em></td><td>
+                                    <p><a id="idm140352909381936" 
class="indexterm"></a>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.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-recording"></a>Session recording</h4></div></div></div><p>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 <span 
class="command"><strong>guacenc</strong></span> utility provided with
+                    guacamole-server.</p><p>For example, to produce a video 
called "<em class="replaceable"><code>NAME</code></em>.m4v"
+                    from the recording "<em 
class="replaceable"><code>NAME</code></em>", you would run:</p><div 
class="informalexample"><pre class="screen"><code class="prompt">$</code> 
<strong class="userinput"><code>guacenc <em 
class="replaceable"><code>/path/to/recording/NAME</code></em></code></strong></pre></div><p>The
 <span class="command"><strong>guacenc</strong></span> utility has additional 
options for overriding
+                    default behavior, including tweaking the output format, 
which are documented in
+                    detail within the manpage:</p><div 
class="informalexample"><pre class="screen"><code class="prompt">$</code> 
<strong class="userinput"><code>man guacenc</code></strong></pre></div><div 
class="important"><h3 class="title">Important</h3><p>Guacamole will never 
overwrite an existing recording. If necessary, a
+                        numeric suffix like ".1", ".2", ".3", etc. will be 
appended to
+                            <em class="replaceable"><code>NAME</code></em> to 
avoid overwriting an existing
+                        recording. If even appending a numeric suffix does not 
help, the session
+                        will simply not be recorded.</p></div><div 
class="informaltable"><a id="idm140352909368608" class="indexterm"></a><table 
border="1"><colgroup><col class="c1" /><col class="c2" 
/></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>recording-path</code></em></td><td>
+                                    <p><a id="idm140352909360896" 
class="indexterm"></a>The directory in which screen recording files
+                                        should be created. <span 
class="emphasis"><em>If a graphical recording needs
+                                            to be created, then this parameter 
is
+                                            required.</em></span> Specifying 
this parameter enables
+                                        graphical screen recording. If this 
parameter is omitted, no
+                                        graphical recording will be 
created.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>create-recording-path</code></em></td><td>
+                                    <p>If set to "true", the directory 
specified by the
+                                            <em 
class="parameter"><code>recording-path</code></em> 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.</p>
+                                    <p><span class="emphasis"><em>This 
parameter is optional.</em></span> By
+                                        default, the directory specified by the
+                                            <em 
class="parameter"><code>recording-path</code></em> parameter will not
+                                        automatically be created, and attempts 
to create recordings
+                                        within a non-existent directory will 
be logged as
+                                        errors.</p>
+                                    <p>This parameter only has an effect if 
graphical recording
+                                        is enabled. If the <em 
class="parameter"><code>recording-path</code></em> is
+                                        not specified, graphical session 
recording will be disabled,
+                                        and this parameter will be ignored.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>recording-name</code></em></td><td>
+                                    <p>The filename to use for any created 
recordings.
+                                            <span class="emphasis"><em>This 
parameter is optional.</em></span> If
+                                        omitted, the value "recording" will be 
used instead.</p>
+                                    <p>This parameter only has an effect if 
graphical recording
+                                        is enabled. If the <em 
class="parameter"><code>recording-path</code></em> is
+                                        not specified, graphical session 
recording will be disabled,
+                                        and this parameter will be ignored.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-sftp"></a>File transfer (via SFTP)</h4></div></div></div><p>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 
<a class="xref" href="using-guacamole.html" title="Chapter 10. Using 
Guacamole">Chapter 10, <em>Using Guacamole</em></a>.</p><div 
class="informaltable"><a id="idm140352909344912" class="indexterm"></a><table 
border="1"><colgroup><col class="c1" /><col class="c2" 
/></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>enable-sftp</code></em></td><td>
+                                    <p><a id="idm140352909337200" 
class="indexterm"></a><a id="idm140352909335920" class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-hostname</code></em></td><td>
+                                    <p>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
+                                            <em 
class="parameter"><code>hostname</code></em> parameter will be
+                                        used.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-port</code></em></td><td>
+                                    <p>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-username</code></em></td><td>
+                                    <p>The username to authenticate as when 
connecting to the
+                                        specified SSH server for SFTP. This 
parameter is
+                                        required.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-password</code></em></td><td>
+                                    <p>The password to use when authenticating 
with the specified
+                                        SSH server for SFTP.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-private-key</code></em></td><td>
+                                    <p>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 <span 
class="command"><strong>ssh-keygen</strong></span> utility.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-passphrase</code></em></td><td>
+                                    <p>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>sftp-directory</code></em></td><td>
+                                    <p>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.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-repeater"></a>VNC Repeater</h4></div></div></div><p>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.</p><div class="informaltable"><a id="idm140352909314272" 
class="indexterm"></a><table border="1"><colgroup><col class="c1" /><col 
class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>dest-host</code></em></td><td><a 
id="idm140352909306864" class="indexterm"></a><a id="idm140352909305600" 
class="indexterm"></a><a id="idm140352909304336" class="indexterm"></a>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.</td></tr><tr><td><em 
class="parameter"><code>dest-port</code></em></td><td><a 
id="idm140352909301072" class="indexterm"></a><a id="idm140352909299808" 
class="indexterm"></a>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.</td></tr></tbody></table></div></div><div class="section"><div 
class="titlepage"><div><div><h4 class="title"><a 
id="vnc-reverse-connections"></a>Reverse VNC 
connections</h4></div></div></div><p>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.</p><div class="informaltable"><a id="idm140352909294384" 
class="indexterm"></a><table border="1"><colgroup><col class="c1" /><col 
class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>reverse-connect</code></em></td><td>
+                                    <p><a id="idm140352909286672" 
class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>listen-timeout</code></em></td><td>
+                                    <p><a id="idm140352909283072" 
class="indexterm"></a>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).</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-audio"></a>Audio support (via PulseAudio)</h4></div></div></div><p>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.</p><p>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.</p><p>Configuring PulseAudio for network connections requires an 
additional line
+                    within the PulseAudio configuration file, usually
+                        <code 
class="filename">/etc/pulse/default.pa</code>:</p><div 
class="informalexample"><pre class="programlisting">load-module 
module-native-protocol-tcp auth-ip-acl=<em 
class="replaceable"><code>192.168.1.0/24</code></em> 
auth-anonymous=1</pre></div><p>This loads the TCP module for PulseAudio, 
configuring it to accept connections
+                    without authentication and <span 
class="emphasis"><em>only</em></span> from the
+                        <em 
class="replaceable"><code>192.168.1.0/24</code></em> 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:</p><div class="informalexample"><pre 
class="programlisting">load-module module-native-protocol-tcp 
auth-anonymous=1</pre></div><p>In either case, the <code 
class="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.</p><p>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 <span 
class="command"><strong>netstat</strong></span>:</p><div 
class="informalexample"><pre class="screen"><code class="prompt">$</code> 
<strong class="userinput"><code>netstat -ln | grep 4713</code></strong>
+<code class="computeroutput">tcp        0      0 0.0.0.0:4713            
0.0.0.0:*               LISTEN
+tcp6       0      0 :::4713                 :::*                    
LISTEN</code>
+<code class="prompt">$</code></pre></div><p>The following parameters are 
available for configuring the audio support for
+                    VNC:</p><div class="informaltable"><a 
id="idm140352909266416" class="indexterm"></a><table border="1"><colgroup><col 
class="c1" /><col class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>enable-audio</code></em></td><td>
+                                    <p><a id="idm140352909258704" 
class="indexterm"></a><a id="idm140352909257424" class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>audio-servername</code></em></td><td>
+                                    <p>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 <em 
class="parameter"><code>hostname</code></em>
+                                        parameter.</p>
+                                    <p>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.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="vnc-clipboard-encoding"></a>Clipboard 
encoding</h4></div></div></div><p>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
+                        <em 
class="parameter"><code>clipboard-encoding</code></em> parameter.</p><div 
class="important"><h3 class="title">Important</h3><p><span 
class="emphasis"><em>The only clipboard encoding guaranteed to be supported by 
VNC
+                            servers is ISO 8859-1.</em></span> You should only 
override the clipboard
+                        encoding using the <em 
class="parameter"><code>clipboard-encoding</code></em> parameter of
+                        you are absolutely positive your VNC server supports 
other encodings.</p></div><div class="informaltable"><a id="idm140352909246192" 
class="indexterm"></a><table border="1"><colgroup><col class="c1" /><col 
class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>clipboard-encoding</code></em></td><td>
+                                    <p><a id="idm140352909238480" 
class="indexterm"></a><a id="idm140352909237680" class="indexterm"></a>The 
encoding to assume for the VNC clipboard.
+                                        This parameter is optionl. By default, 
the standard encoding
+                                        ISO 8859-1 will be used. <span 
class="emphasis"><em>Only use this parameter
+                                            if you are sure your VNC server 
supports other encodings
+                                            beyond the standard ISO 
8859-1.</em></span></p>
+                                    <p>Possible values are:</p>
+                                    <div class="variablelist"><dl 
class="variablelist"><dt><span class="term"><code 
class="constant">ISO8859-1</code></span></dt><dd><p>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.</p></dd><dt><span class="term"><code 
class="constant">UTF-8</code></span></dt><dd><p>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.</p></dd><dt><span 
class="term"><code class="constant">UTF-16</code></span></dt><dd><p>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.</p></dd><dt><span class="term"><code 
class="constant">CP1252</code></span></dt><dd><p>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.</p></dd></dl></div>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="adding-vnc"></a>Adding a VNC connection</h4></div></div></div><a 
id="idm140352909221824" class="indexterm"></a><p>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 class="code">&lt;authorize&gt;</code> section 
for that user within your
+                        <code class="filename">user-mapping.xml</code>, and 
add a section like the following
+                    within it:</p><pre class="programlisting">&lt;connection 
name="<em class="replaceable"><code>Unique Name</code></em>"&gt;
+    &lt;protocol&gt;vnc&lt;/protocol&gt;
+    &lt;param name="hostname"&gt;<em 
class="replaceable"><code>localhost</code></em>&lt;/param&gt;
+    &lt;param name="port"&gt;<em 
class="replaceable"><code>5901</code></em>&lt;/param&gt;
+&lt;/connection&gt;</pre><p>If added exactly as above, a new connection named 
"<em class="replaceable"><code>Unique
+                        Name</code></em>" will be available to the user 
associated with the
+                        <code class="code">&lt;authorize&gt;</code> section 
containing it. The connection will use
+                    VNC to connect to <em 
class="replaceable"><code>localhost</code></em> at port
+                        <em class="replaceable"><code>5901</code></em>. 
Naturally, you will want to change some or
+                    all of these values.</p><p>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 class="code">&lt;param&gt;</code> 
tags accordingly.</p><p>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.</p></div><div class="section"><div class="titlepage"><div><div><h4 
class="title"><a id="vnc-servers"></a>Which VNC 
server?</h4></div></div></div><a id="idm140352909211264" 
class="indexterm"></a><p>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.</p><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a id="realvnc"></a>RealVNC or TigerVNC</h5></div></div></div><a 
id="idm140352909208592" class="indexterm"></a><a id="idm140352909207680" 
class="indexterm"></a><p>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.</p></div><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a id="tightvnc"></a>TightVNC</h5></div></div></div><a 
id="idm140352909204576" class="indexterm"></a><p>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.</p></div><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
id="x11vnc"></a>x11vnc</h5></div></div></div><a id="idm140352909201248" 
class="indexterm"></a><p>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.</p></div><div 
class="section"><div class="titlepage"><div><div><h5 class="title"><a 
id="vino"></a>vino</h5></div></div></div><a id="idm140352909198144" 
class="indexterm"></a><p>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.</p></div><div class="section"><div class="titlepage"><div><div><h5 
class="title"><a id="qemu"></a>QEMU or KVM</h5></div></div></div><a 
id="idm140352909194896" class="indexterm"></a><a id="idm140352909193984" 
class="indexterm"></a><p>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.</p><p>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.</p></div></div></div><div class="section"><div 
class="titlepage"><div><div><h3 class="title"><a 
id="rdp"></a>RDP</h3></div></div></div><a id="idm140352909189744" 
class="indexterm"></a><p>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.</p><p>RDP 
support for Guacamole is provided by the <span 
class="package">libguac-client-rdp</span>
+                library, which will be installed as part of guacamole-server 
if the required
+                dependencies are present during the build.</p><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="rdp-network-parameters"></a>Network parameters</h4></div></div></div><p>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.</p><div class="informaltable"><a 
id="idm140352909184720" class="indexterm"></a><table border="1"><colgroup><col 
class="c1" /><col class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>hostname</code></em></td><td>
+                                    <p><a id="idm140352909177008" 
class="indexterm"></a>The hostname or IP address of the RDP server
+                                        Guacamole should connect to.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>port</code></em></td><td>
+                                    <p><a id="idm140352909173616" 
class="indexterm"></a>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.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="rdp-authentication"></a>Authentication and 
security</h4></div></div></div><p>RDP provides authentication through the use 
of a username, password, and
+                    optional domain.</p><p>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 <span class="emphasis"><em>must</em></span> provide a 
username and password.</p><p>All RDP connections are encrypted. Higher-grade 
encryption is available in the
+                    form of TLS, another possible security mode.</p><div 
class="informaltable"><a id="idm140352909166608" class="indexterm"></a><table 
border="1"><colgroup><col class="c1" /><col class="c2" 
/></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>username</code></em></td><td>
+                                    <p><a id="idm140352909158896" 
class="indexterm"></a>The username to use to authenticate, if any.
+                                        This parameter is optional.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>password</code></em></td><td>
+                                    <p><a id="idm140352909155504" 
class="indexterm"></a>The password to use when attempting
+                                        authentication, if any. This parameter 
is optional.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>domain</code></em></td><td>
+                                    <p><a id="idm140352909152096" 
class="indexterm"></a>The domain to use when attempting
+                                        authentication, if any. This parameter 
is optional.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>security</code></em></td><td>
+                                    <p><a id="idm140352909148688" 
class="indexterm"></a><a id="idm140352909147408" class="indexterm"></a><a 
id="idm140352909146128" class="indexterm"></a>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.</p>
+                                    <p>Possible values are:</p>
+                                    <div class="variablelist"><dl 
class="variablelist"><dt><span class="term"><code 
class="constant">rdp</code></span></dt><dd><p>Standard RDP encryption. <span 
class="emphasis"><em>This is the
+                                                  default</em></span> and 
should be supported by all
+                                                  RDP 
servers.</p></dd><dt><span class="term"><code 
class="constant">nla</code></span></dt><dd><p>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.</p></dd><dt><span 
class="term"><code class="constant">tls</code></span></dt><dd><p>TLS 
encryption. TLS (Transport Layer Security)
+                                                  is the successor to 
SSL.</p></dd><dt><span class="term"><code 
class="constant">any</code></span></dt><dd><p>Allow the server to choose the 
type of
+                                                  security.</p></dd></dl></div>
+                                </td></tr><tr><td><em 
class="parameter"><code>ignore-cert</code></em></td><td>
+                                    <p><a id="idm140352909131808" 
class="indexterm"></a>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).</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>disable-auth</code></em></td><td>
+                                    <p><a id="idm140352909128016" 
class="indexterm"></a>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.</p>
+                                    <p>If you are using NLA, authentication 
must be enabled by
+                                        definition.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="rdp-session-settings"></a>Session settings</h4></div></div></div><p>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.</p><p>Although Guacamole is independent of keyboard 
layout, RDP is not. This is
+                    because Guacamole represents keys based on what they <span 
class="emphasis"><em>do</em></span>
+                    ("press the <span 
class="keycap"><strong>Enter</strong></span> 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.</p><p>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 <a class="link" 
href="https://glyptodon.org/jira/"; target="_top">opening an issue in
+                    JIRA</a>.</p><div class="informaltable"><a 
id="idm140352909118368" class="indexterm"></a><table border="1"><colgroup><col 
class="c1" /><col class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>client-name</code></em></td><td>
+                                    <p><a id="idm140352909110656" 
class="indexterm"></a>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.</p>
+                                    <p>On Windows RDP servers, this value is 
exposed within the
+                                        session as the <code 
class="envar">CLIENTNAME</code> environment
+                                        variable.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>console</code></em></td><td>
+                                    <p><a id="idm140352909106016" 
class="indexterm"></a>If set to "true", you will be connected to the
+                                        console (admin) session of the RDP 
server.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>initial-program</code></em></td><td>
+                                    <p><a id="idm140352909102608" 
class="indexterm"></a>The full path to the program to run immediately
+                                        upon connecting. This parameter is 
optional.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>server-layout</code></em></td><td>
+                                    <p><a id="idm140352909099200" 
class="indexterm"></a><a id="idm140352909098400" class="indexterm"></a>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. 
<span class="emphasis"><em>The
+                                            Guacamole client is independent of 
keyboard
+                                            layout.</em></span> The RDP 
protocol, however, is
+                                            <span 
class="emphasis"><em>not</em></span> 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.</p>
+                                    <p>Possible values are:</p>
+                                    <div class="variablelist"><dl 
class="variablelist"><dt><span class="term"><code 
class="constant">en-us-qwerty</code></span></dt><dd><p>English (US) 
keyboard</p></dd><dt><span class="term"><code 
class="constant">de-de-qwertz</code></span></dt><dd><p>German keyboard 
(qwertz)</p></dd><dt><span class="term"><code 
class="constant">fr-fr-azerty</code></span></dt><dd><p>French keyboard 
(azerty)</p></dd><dt><span class="term"><code 
class="constant">it-it-qwerty</code></span></dt><dd><p>Italian 
keyboard</p></dd><dt><span class="term"><code 
class="constant">ja-jp-qwerty</code></span></dt><dd><p>Japanese 
keyboard</p></dd><dt><span class="term"><code 
class="constant">sv-se-qwerty</code></span></dt><dd><p>Swedish 
keyboard</p></dd><dt><span class="term"><code 
class="constant">failsafe</code></span></dt><dd><p>Unknown keyboard - this 
option sends only
+                                                  Unicode events and should 
work for any keyboard,
+                                                  though not necessarily all 
RDP servers or
+                                                  applications.</p><p>If your 
server's keyboard layout is not yet
+                                                  supported, this option 
should work in the
+                                                  meantime.</p></dd></dl></div>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="rdp-display-settings"></a>Display 
settings</h4></div></div></div><p>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.</p><p>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.</p><div class="informaltable"><a 
id="idm140352909074336" class="indexterm"></a><table border="1"><colgroup><col 
class="c1" /><col class="c2" /></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>color-depth</code></em></td><td>
+                                    <p><a id="idm140352909066624" 
class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>width</code></em></td><td>
+                                    <p><a id="idm140352909062864" 
class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>height</code></em></td><td>
+                                    <p>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>dpi</code></em></td><td>
+                                    <p><a id="idm140352909057008" 
class="indexterm"></a>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.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>resize-method</code></em></td><td>
+                                    <p><a id="idm140352909053296" 
class="indexterm"></a>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.</p>
+                                    <p>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.</p>
+                                    <p>Possible values are:</p>
+                                    <div class="variablelist"><dl 
class="variablelist"><dt><span class="term"><code 
class="constant">display-update</code></span></dt><dd><p>Uses the "Display 
Update" channel added with
+                                                  RDP 8.1 to signal the server 
when the client
+                                                  display size has 
changed.</p></dd><dt><span class="term"><code 
class="constant">reconnect</code></span></dt><dd><p>Automatically disconnects 
the RDP session when
+                                                  the client display size has 
changed, and
+                                                  reconnects with the new 
size.</p></dd></dl></div>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="rdp-recording"></a>Session recording</h4></div></div></div><p>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 <span 
class="command"><strong>guacenc</strong></span> utility provided with
+                    guacamole-server.</p><p>For example, to produce a video 
called "<em class="replaceable"><code>NAME</code></em>.m4v"
+                    from the recording "<em 
class="replaceable"><code>NAME</code></em>", you would run:</p><div 
class="informalexample"><pre class="screen"><code class="prompt">$</code> 
<strong class="userinput"><code>guacenc <em 
class="replaceable"><code>/path/to/recording/NAME</code></em></code></strong></pre></div><p>The
 <span class="command"><strong>guacenc</strong></span> utility has additional 
options for overriding
+                    default behavior, including tweaking the output format, 
which are documented in
+                    detail within the manpage:</p><div 
class="informalexample"><pre class="screen"><code class="prompt">$</code> 
<strong class="userinput"><code>man guacenc</code></strong></pre></div><div 
class="important"><h3 class="title">Important</h3><p>Guacamole will never 
overwrite an existing recording. If necessary, a
+                        numeric suffix like ".1", ".2", ".3", etc. will be 
appended to
+                            <em class="replaceable"><code>NAME</code></em> to 
avoid overwriting an existing
+                        recording. If even appending a numeric suffix does not 
help, the session
+                        will simply not be recorded.</p></div><div 
class="informaltable"><a id="idm140352909033456" class="indexterm"></a><table 
border="1"><colgroup><col class="c1" /><col class="c2" 
/></colgroup><thead><tr><th>Parameter 
name</th><th>Description</th></tr></thead><tbody><tr><td><em 
class="parameter"><code>recording-path</code></em></td><td>
+                                    <p><a id="idm140352909025744" 
class="indexterm"></a>The directory in which screen recording files
+                                        should be created. <span 
class="emphasis"><em>If a graphical recording needs
+                                            to be created, then this parameter 
is
+                                            required.</em></span> Specifying 
this parameter enables
+                                        graphical screen recording. If this 
parameter is omitted, no
+                                        graphical recording will be 
created.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>create-recording-path</code></em></td><td>
+                                    <p>If set to "true", the directory 
specified by the
+                                            <em 
class="parameter"><code>recording-path</code></em> 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.</p>
+                                    <p><span class="emphasis"><em>This 
parameter is optional.</em></span> By
+                                        default, the directory specified by the
+                                            <em 
class="parameter"><code>recording-path</code></em> parameter will not
+                                        automatically be created, and attempts 
to create recordings
+                                        within a non-existent directory will 
be logged as
+                                        errors.</p>
+                                    <p>This parameter only has an effect if 
graphical recording
+                                        is enabled. If the <em 
class="parameter"><code>recording-path</code></em> is
+                                        not specified, graphical session 
recording will be disabled,
+                                        and this parameter will be ignored.</p>
+                                </td></tr><tr><td><em 
class="parameter"><code>recording-name</code></em></td><td>
+                                    <p>The filename to use for any created 
recordings.
+                                            <span class="emphasis"><em>This 
parameter is optional.</em></span> If
+                                        omitted, the value "recording" will be 
used instead.</p>
+                                    <p>This parameter only has an effect if 
graphical recording
+                                        is enabled. If the <em 
class="parameter"><code>recording-path</code></em> is
+                                        not specified, graphical session 
recording will be disabled,
+                                        and this parameter will be ignored.</p>
+                                </td></tr></tbody></table></div></div><div 
class="section"><div class="titlepage"><div><div><h4 class="title"><a 
id="rdp-device-redirection"></a>Device 
redirection</h4></div></div></div><p>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.</p><p>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.</p><p>Printing requires <span 
class="application">GhostScript</span> to be installed on
+                    the Guacamole server, and allows users to print arbitrary 
documents directly to
+                    PDF. When documents are printed to the 

<TRUNCATED>

Reply via email to