blob: d152eb320a198e6fe41671185cc821cdfb49b915 [file] [log] [blame]
<?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 3. Configuring Guacamole</title><link rel="stylesheet" type="text/css" href="gug.css" /><meta name="generator" content="DocBook XSL 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="installing-guacamole.html" title="Chapter 2. Installing Guacamole" /><link rel="next" href="mysql-auth.html" title="Chapter 4. MySQL 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 3. Configuring Guacamole</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="installing-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="mysql-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 3. 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><dd><dl><dt><span class="section"><a href="configuring-guacamole.html#idm139993936183616">Should I use WebSocket?</a></span></dt></dl></dd><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#vnc">VNC</a></span></dt><dd><dl><dt><span class="section"><a href="configuring-guacamole.html#adding-vnc">Adding a VNC connection</a></span></dt><dt><span class="section"><a href="configuring-guacamole.html#idm139993936067440">Which VNC server?</a></span></dt></dl></dd><dt><span class="section"><a href="configuring-guacamole.html#rdp">RDP</a></span></dt><dd><dl><dt><span class="section"><a href="configuring-guacamole.html#idm139993936035520">Adding an RDP connection</a></span></dt></dl></dd><dt><span class="section"><a href="configuring-guacamole.html#ssh">SSH</a></span></dt><dd><dl><dt><span class="section"><a href="configuring-guacamole.html#idm139993935872944">Adding an SSH connection</a></span></dt></dl></dd><dt><span class="section"><a href="configuring-guacamole.html#telnet">Telnet</a></span></dt><dd><dl><dt><span class="section"><a href="configuring-guacamole.html#idm139993935825472">Adding a telnet connection</a></span></dt><dt><span class="section"><a href="configuring-guacamole.html#idm139993935818944">Authentication</a></span></dt></dl></dd><dt><span class="section"><a href="configuring-guacamole.html#idm139993935807904">Configuring guacd</a></span></dt></dl></div>
<p>After installing Guacamole, it will be minimally configured to use the default
authentication, which reads all users and connections from a single, monolithic
<code class="filename">user-mapping.xml</code> file. You can modify this configuration if you
need to use a different authentication module (such as the MySQL authentication, which is
discussed in a separate chapter) or if you need to veer from the defaults.</p>
<p>Guacamole's configuration 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="idm139993936238848" 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>.</p>
</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="idm139993936228656" class="indexterm"></a>
<a id="idm139993936227728" 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>At the bare minimum, the <code class="filename">guacamole.properties</code> file contains at
least three basic properties, required in all deployments of Guacamole: </p>
<div class="variablelist"><dl class="variablelist"><dt><span class="term"><a id="idm139993936219520" 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. This is most likely localhost. </p>
</dd><dt><span class="term"><a id="idm139993936216416" 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. This is port 4822 by default. </p>
</dd><dt><span class="term"><a id="idm139993936213280" class="indexterm"></a><em class="parameter"><code>auth-provider</code></em></span></dt><dd>
<p>The authentication provider to use when authenticating. Normally, this
will be set to <code class="classname">BasicFileAuthenticationProvider</code> which
is the default authentication provider provided with Guacamole. No
extensions are needed if you use the default authentication provider.</p>
</dd></dl></div>
<p>If you need custom authentication or wish to enable optional features of Guacamole,
such as WebSocket or HTTP Basic authentication support, you will need to specify
additional properties:</p>
<div class="variablelist"><dl class="variablelist"><dt><span class="term"><a id="idm139993936208656" class="indexterm"></a><em class="parameter"><code>guacd-ssl</code></em></span></dt><dd>
<p>If set to "true", requires SSL/TLS encryption between the web application
and guacd. This property is not required. By default, communication between
the web application and guacd will be unencrypted.</p>
<p>Note that if you enable this option, you must also configure guacd to use
SSL via command line options. These options are documented in the manpage of
guacd. You will need an SSL certificate and private key.</p>
</dd><dt><span class="term"><a id="idm139993936205024" class="indexterm"></a><em class="parameter"><code>lib-directory</code></em></span></dt><dd>
<p>The directory to load extensions to Guacamole from. If you wish to use a
custom authentication provider or custom hooks, the
<code class="filename">.jar</code> file and all dependencies must be placed in
the directory specified here. On most systems,
<code class="filename">/var/lib/guacamole/classpath</code> is an appropriate
choice.</p>
<p>Note that this property is only needed if you are using an
extension.</p>
</dd><dt><span class="term"><a id="idm139993936200592" class="indexterm"></a><em class="parameter"><code>event-listeners</code></em></span></dt><dd>
<p>A comma-delimited list of event listeners which should be loaded and
installed such that they are informed of Guacamole-related events. These
classes must be in the classpath, preferably by having their corresponding
<code class="filename">.jar</code> files placed within the directory specified by
the <span class="property">lib-directory</span> property.</p>
</dd><dt><span class="term"><a id="idm139993936196624" class="indexterm"></a><a id="idm139993936195888" class="indexterm"></a><em class="parameter"><code>enable-websocket</code></em></span></dt><dd>
<p><code class="constant">true</code> if WebSocket support should be enabled,
<code class="constant">false</code> (or simply leave the property out)
otherwise.</p>
<p>WebSocket is supported in Guacamole for Tomcat 7 and Jetty 8. Note that if
Tomcat is used, it must be version 7.0.37 or newer. Older versions of Tomcat
are only supported for HTTP. Guacamole does not yet support Tomcat 8 for
WebSocket.</p>
</dd><dt><span class="term"><a id="idm139993936191584" class="indexterm"></a><a id="idm139993936190816" class="indexterm"></a><em class="parameter"><code>enable-http-auth</code></em></span></dt><dd>
<p><code class="constant">true</code> if HTTP Basic authentication support should be
enabled, <code class="constant">false</code> (or simply leave the property out)
otherwise. This will <span class="emphasis"><em>not</em></span> cause Guacamole to require
HTTP Basic authentication; it simply tells Guacamole to inspect the HTTP
"Authorization" header when authenticating users, if present.</p>
<p>When HTTP Basic authentication is in use, the web browser submits the
username/password pair with each HTTP request in an "Authorization" header.
If you have an upstream authentication system or proxy which uses HTTP Basic
authentication, setting this property causes Guacamole to read and use these
credentials if the username and password are not given through other
means.</p>
</dd></dl></div>
<div class="example"><a id="idm139993936186272"></a><p class="title"><strong>Example 3.1. Minimal <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
# Authentication provider class
auth-provider: net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider
# Properties used by BasicFileAuthenticationProvider
basic-user-mapping: /etc/guacamole/user-mapping.xml</pre>
</div></div><br class="example-break" />
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm139993936183616"></a>Should I use WebSocket?</h3></div></div></div>
<a id="idm139993936182688" class="indexterm"></a>
<p>Yes, if you can.</p>
<p>WebSocket has performance benefits and a much lower overhead on the client, so
enabling WebSocket is beneficial if you know your servlet container supports it. In
the event that Guacamole cannot connect using WebSocket, it will immediately and
transparently fall back to using HTTP. If things are regularly not working as
expected, and you suspect it's the WebSocket support, you can always disable it by
editing <code class="filename">guacamole.properties</code>.</p>
<p>When eventually WebSocket is widely supported across servlet containers and
network hardware, it will likely be enabled by default.</p>
</div>
</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="idm139993936178224" 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. If you wish to use this authentication mechanism,
you must ensure the <span class="property">auth-provider</span> property is
set to the fully-qualified name of
<code class="classname">BasicFileAuthenticationProvider</code><a href="#ftn.idm139993936176208" class="footnote" id="idm139993936176208"><sup class="footnote">[1]</sup></a>This is the case within the example
<code class="filename">guacamole.properties</code> file shown above, and
in the <code class="filename">guacamole.properties</code> file included with
Guacamole. Unless you have already tried another authentication
module, you will not need to edit this value yourself if you are
using the configuration files that come with Guacamole.</p>
<p>There are other authentication modules available. The Guacamole
project now provides a MySQL-backed authentication module with extra
features (like 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="idm139993936171040" 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" (typically named
<code class="filename">user-mapping.xml</code>). An example of this
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="idm139993936163104" 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="idm139993936153504" 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="vnc"></a>VNC</h2></div></div></div>
<a id="idm139993936147072" 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, installed by default.</p>
<div class="table"><a id="vnc-parameters"></a><p class="title"><strong>Table 3.1. VNC configuration parameters</strong></p><div class="table-contents">
<a id="idm139993936143232" class="indexterm"></a>
<table summary="VNC configuration parameters" border="1"><colgroup><col class="c1" /><col class="c2" /></colgroup><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><em class="parameter"><code>hostname</code></em></td><td>
<p><a id="idm139993936135024" 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="idm139993936131840" 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>password</code></em></td><td>
<p><a id="idm139993936127520" 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>read-only</code></em></td><td>
<p><a id="idm139993936124208" 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><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>color-depth</code></em></td><td>
<p><a id="idm139993936118240" 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>cursor</code></em></td><td>
<p><a id="idm139993936114640" 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.</p>
</td></tr><tr><td><em class="parameter"><code>autoretry</code></em></td><td>
<p><a id="idm139993936111216" 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><tr><td><em class="parameter"><code>encodings</code></em></td><td>
<p><a id="idm139993936107712" 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>dest-host</code></em></td><td><a id="idm139993936103488" class="indexterm"></a><a id="idm139993936102192" class="indexterm"></a><a id="idm139993936100944" 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="idm139993936097888" class="indexterm"></a><a id="idm139993936096864" 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><tr><td><em class="parameter"><code>enable-audio</code></em></td><td>
<p><a id="idm139993936093328" class="indexterm"></a><a id="idm139993936091984" class="indexterm"></a>If set to "true", <span class="emphasis"><em>experimental</em></span>
sound support will be enabled. VNC does not support sound, but
Guacamole's VNC support can include sound using PulseAudio.</p>
<p>Most Linux systems provide audio through a service called
PulseAudio. This service is capable of communicating over the
network. 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>Beware that you must disable authentication within PulseAudio in
order to allow Guacamole to connect, as Guacamole does not yet
support this. The amount of latency you will see depends largely on
the network and how PulseAudio is configured.</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><tr><td><em class="parameter"><code>reverse-connect</code></em></td><td>
<p><a id="idm139993936083168" 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="idm139993936079664" 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><br class="table-break" />
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="adding-vnc"></a>Adding a VNC connection</h3></div></div></div>
<a id="idm139993936076272" 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><h3 class="title"><a id="idm139993936067440"></a>Which VNC server?</h3></div></div></div>
<a id="idm139993936066624" 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><h4 class="title"><a id="idm139993936064960"></a>RealVNC or TigerVNC</h4></div></div></div>
<a id="idm139993936064224" class="indexterm"></a>
<a id="idm139993936063168" 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><h4 class="title"><a id="idm139993936061328"></a>TightVNC</h4></div></div></div>
<a id="idm139993936060624" 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><h4 class="title"><a id="idm139993936058320"></a>x11vnc</h4></div></div></div>
<a id="idm139993936057680" 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><h4 class="title"><a id="idm139993936055680"></a>vino</h4></div></div></div>
<a id="idm139993936055040" 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><h4 class="title"><a id="idm139993936052848"></a>QEMU or KVM</h4></div></div></div>
<a id="idm139993936052032" class="indexterm"></a>
<a id="idm139993936051168" 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><h2 class="title" style="clear: both"><a id="rdp"></a>RDP</h2></div></div></div>
<a id="idm139993936048592" 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 depends on a recent version of FreeRDP (version 1.0 or higher). If your
distribution does not have a recent enough version of FreeRDP, the Guacamole project
will not build a <span class="package">libguac-client-rdp</span> package for you. You will need to
build and install a recent version of FreeRDP, and then build and install
<span class="package">libguac-client-rdp</span> from source.</p>
<div class="table"><a id="idm139993936043616"></a><p class="title"><strong>Table 3.2. RDP configuration parameters</strong></p><div class="table-contents">
<a id="idm139993936042496" class="indexterm"></a>
<table summary="RDP configuration parameters" border="1"><colgroup><col class="c1" /><col class="c2" /></colgroup><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><em class="parameter"><code>hostname</code></em></td><td>
<p><a id="idm139993936034032" 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="idm139993936030704" 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><tr><td><em class="parameter"><code>username</code></em></td><td>
<p><a id="idm139993936027152" 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="idm139993936023824" 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="idm139993936020496" 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>color-depth</code></em></td><td>
<p><a id="idm139993936017168" 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="idm139993936013552" 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>disable-audio</code></em></td><td><a id="idm139993936008176" class="indexterm"></a><a id="idm139993936007440" class="indexterm"></a><a id="idm139993936006656" class="indexterm"></a>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".</td></tr><tr><td><em class="parameter"><code>enable-printing</code></em></td><td>
<p><a id="idm139993936003264" class="indexterm"></a><a id="idm139993936002400" class="indexterm"></a><a id="idm139993936001712" class="indexterm"></a>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".</p>
<p><span class="emphasis"><em>Printing support requires
<span class="application">GhostScript</span> to be
installed.</em></span> If <span class="application">guacd</span> cannot
find the <code class="filename">gs</code> executable when printing, the print
attempt will fail.</p>
</td></tr><tr><td><em class="parameter"><code>enable-drive</code></em></td><td>
<p><a id="idm139993935995984" class="indexterm"></a><a id="idm139993935995072" class="indexterm"></a><a id="idm139993935994336" class="indexterm"></a>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".</p>
<p>Files will be stored in the directory specified by the
"<em class="parameter"><code>drive-path</code></em>" parameter, which is required
if file transfer is enabled.</p>
</td></tr><tr><td><em class="parameter"><code>drive-path</code></em></td><td>
<p>The directory on the Guacamole server in which transfered files
should be stored. This directory must be accessible by guacd and
both readable and writable by the user that runs guacd.
<span class="emphasis"><em>This parameter does not refer to a directory on the
RDP server.</em></span></p>
<p>If file transfer is not enabled, this parameter is ignored.</p>
</td></tr><tr><td><em class="parameter"><code>console</code></em></td><td>
<p><a id="idm139993935986560" 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>console-audio</code></em></td><td>
<p><a id="idm139993935983216" class="indexterm"></a>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 <em class="parameter"><code>console</code></em>
parameter is also set to "true".</p>
</td></tr><tr><td><em class="parameter"><code>initial-program</code></em></td><td>
<p><a id="idm139993935979296" 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="idm139993935975968" class="indexterm"></a><a id="idm139993935975136" 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">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><tr><td><em class="parameter"><code>security</code></em></td><td>
<p><a id="idm139993935960736" class="indexterm"></a><a id="idm139993935959392" class="indexterm"></a><a id="idm139993935958144" 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, the server is
allowed to control what type of security is used.</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. This mode 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. This
is the default.</p>
</dd></dl></div>
</td></tr><tr><td><em class="parameter"><code>ignore-cert</code></em></td><td>
<p><a id="idm139993935944800" 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="idm139993935941216" 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><tr><td><em class="parameter"><code>remote-app</code></em></td><td>
<p><a id="idm139993935936928" class="indexterm"></a>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.</p>
<p>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 <code class="filename">notepad.exe</code> and
have assigned it the name "notepad", you would set this parameter
to: "||notepad".</p>
</td></tr><tr><td><em class="parameter"><code>remote-app-dir</code></em></td><td>
<p>The working directory, if any, for the remote application. This
parameter has no effect if RemoteApp is not in use.</p>
</td></tr><tr><td><em class="parameter"><code>remote-app-args</code></em></td><td>
<p>The command-line arguments, if any, for the remote application.
This parameter has no effect if RemoteApp is not in use.</p>
</td></tr><tr><td><em class="parameter"><code>static-channels</code></em></td><td>
<p>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.</p>
<p>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.</p>
</td></tr></tbody></table>
</div></div><br class="table-break" />
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm139993936035520"></a>Adding an RDP connection</h3></div></div></div>
<a id="idm139993935926048" class="indexterm"></a>
<p>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 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;rdp&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>3389</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 RDP
to connect to <em class="replaceable"><code>localhost</code></em> at port
<em class="replaceable"><code>3389</code></em>. Naturally, you will want to change some or all
of these values.</p>
<p>If you want to login automatically rather than receive a login prompt upon
connecting, you can specify a username and password with additional
<code class="code">&lt;param&gt;</code> tags. Other options are available for controlling the
color depth, size of the screen, etc.</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 RDP
connection easily and intuitively using the administration interface built into
Guacamole. You will not need to edit configuration files.</p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="ssh"></a>SSH</h2></div></div></div>
<a id="idm139993935915680" class="indexterm"></a>
<p>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.</p>
<p>SSH support for Guacamole is provided by the <span class="package">libguac-client-ssh</span>
library, which depends on libssh2 and libssl.</p>
<div class="table"><a id="idm139993935913040"></a><p class="title"><strong>Table 3.3. SSH configuration parameters</strong></p><div class="table-contents">
<a id="idm139993935911808" class="indexterm"></a>
<table summary="SSH configuration parameters" border="1"><colgroup><col class="c1" /><col class="c2" /></colgroup><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><em class="parameter"><code>hostname</code></em></td><td>
<p><a id="idm139993935903712" class="indexterm"></a>The hostname or IP address of the SSH server Guacamole
should connect to.</p>
</td></tr><tr><td><em class="parameter"><code>port</code></em></td><td>
<p><a id="idm139993935900368" class="indexterm"></a>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.</p>
</td></tr><tr><td><em class="parameter"><code>username</code></em></td><td>
<p><a id="idm139993935896816" class="indexterm"></a>The username to use to authenticate, if any. This
parameter is optional. If not specified, you will be prompted for
the username upon connecting.</p>
</td></tr><tr><td><em class="parameter"><code>password</code></em></td><td>
<p><a id="idm139993935893392" class="indexterm"></a>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.</p>
</td></tr><tr><td><em class="parameter"><code>font-name</code></em></td><td>
<p><a id="idm139993935889952" class="indexterm"></a>The name of the font to use. This parameter is optional.
If not specified, the default of "monospace" will be used
instead.</p>
</td></tr><tr><td><em class="parameter"><code>font-size</code></em></td><td>
<p>The size of the font to use, in points. This parameter is
optional. If not specified, the default of 12 will be used
instead.</p>
</td></tr><tr><td><em class="parameter"><code>enable-sftp</code></em></td><td>
<p><a id="idm139993935884368" class="indexterm"></a><a id="idm139993935883072" 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 SSH server using SFTP. Guacamole includes the
<span class="command"><strong>guacctl</strong></span> utility which controls file downloads
and uploads when run on the SSH server by the user over the SSH
connection.</p>
</td></tr><tr><td><em class="parameter"><code>private-key</code></em></td><td>
<p><a id="idm139993935879520" class="indexterm"></a>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>passphrase</code></em></td><td>
<p><a id="idm139993935875472" class="indexterm"></a>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.</p>
</td></tr></tbody></table>
</div></div><br class="table-break" />
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm139993935872944"></a>Adding an SSH connection</h3></div></div></div>
<a id="idm139993935872128" class="indexterm"></a>
<p>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 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;ssh&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>22</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 SSH
to connect to <em class="replaceable"><code>localhost</code></em> at port
<em class="replaceable"><code>22</code></em>. Naturally, you will want to change some or all of
these values.</p>
<p>If you want to login automatically rather than receive a login prompt upon
connecting, you can specify a username and password with additional
<code class="code">&lt;param&gt;</code> tags. Other options are available for controlling the
font.</p>
<p>Other authentication methods will provide documentation describing how to
configure new connections.</p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="telnet"></a>Telnet</h2></div></div></div>
<a id="idm139993935861920" class="indexterm"></a>
<p>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.</p>
<p>Telnet support for Guacamole is provided by the
<span class="package">libguac-client-telnet</span> library, which depends on libtelnet.</p>
<div class="table"><a id="idm139993935859520"></a><p class="title"><strong>Table 3.4. Telnet configuration parameters</strong></p><div class="table-contents">
<a id="idm139993935858464" class="indexterm"></a>
<table summary="Telnet configuration parameters" border="1"><colgroup><col class="c1" /><col class="c2" /></colgroup><thead><tr><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><em class="parameter"><code>hostname</code></em></td><td>
<p><a id="idm139993935850336" class="indexterm"></a>The hostname or IP address of the telnet server
Guacamole should connect to.</p>
</td></tr><tr><td><em class="parameter"><code>port</code></em></td><td>
<p><a id="idm139993935846880" class="indexterm"></a>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.</p>
</td></tr><tr><td><em class="parameter"><code>username</code></em></td><td>
<p><a id="idm139993935843456" class="indexterm"></a>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 <code class="methodname">NEW-ENVIRON</code> option, and the
telnet login process must pay attention to the <code class="envar">USER</code>
environment variable. Most telnet servers satisfy this
criteria.</p>
</td></tr><tr><td><em class="parameter"><code>username-regex</code></em></td><td>
<p>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 <span class="command"><strong>egrep</strong></span>).</p>
</td></tr><tr><td><em class="parameter"><code>password</code></em></td><td>
<p><a id="idm139993935835952" class="indexterm"></a>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.</p>
</td></tr><tr><td><em class="parameter"><code>password-regex</code></em></td><td>
<p>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 <span class="command"><strong>egrep</strong></span>).</p>
</td></tr><tr><td><em class="parameter"><code>font-name</code></em></td><td>
<p><a id="idm139993935830032" class="indexterm"></a>The name of the font to use. This parameter is optional.
If not specified, the default of "monospace" will be used
instead.</p>
</td></tr><tr><td><em class="parameter"><code>font-size</code></em></td><td>
<p>The size of the font to use, in points. This parameter is
optional. If not specified, the default of 12 will be used
instead.</p>
</td></tr></tbody></table>
</div></div><br class="table-break" />
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm139993935825472"></a>Adding a telnet connection</h3></div></div></div>
<a id="idm139993935824656" class="indexterm"></a>
<p>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 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;telnet&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>23</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
telnet to connect to <em class="replaceable"><code>localhost</code></em> at port
<em class="replaceable"><code>23</code></em>. Naturally, you will want to change some or all of
these values.</p>
<p>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 <span class="emphasis"><em>client</em></span> 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.</p>
</div>
<div class="section"><div class="titlepage"><div><div><h3 class="title"><a id="idm139993935818944"></a>Authentication</h3></div></div></div>
<p>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.</p>
<p>The de-facto method for passing the username automatically via telnet is to submit
it via the <code class="envar">USER</code> environment variable, sent using the
<code class="methodname">NEW-ENVIRON</code> option. This is the mechanism used by most
telnet clients, typically via the <code class="option">-l</code> command-line option.</p>
<p>Passwords cannot typically be sent automatically - at least not as reliably as the
username. There is no <code class="envar">PASSWORD</code> 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 <span class="command"><strong>expect</strong></span>. Guacamole provides
similar functionality by searching for the password prompt with a regular
expression.</p>
<p>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.</p>
<p>If the password prompt is not being detected properly, you can try using your own
regular expression by specifying it within the <em class="parameter"><code>password-regex</code></em>
parameter. The regular expression must be written in the POSIX ERE dialect (the
dialect typically used by <span class="command"><strong>egrep</strong></span>).</p>
</div>
</div>
<div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idm139993935807904"></a>Configuring guacd</h2></div></div></div>
<p><a id="idm139993935806800" class="indexterm"></a>guacd is configured with a configuration file called
<code class="filename">guacd.conf</code>, by default located in
<code class="filename">/etc/guacamole</code>. This file follows a simple, INI-like
format:</p>
<div class="informalexample">
<pre class="programlisting">#
# guacd configuration file
#
[daemon]
pid_file = /var/run/guacd.pid
[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</pre>
</div>
<p>Configuration options are given as parameter/value pairs, where the name of the
parameter is specified on the left side of an "<code class="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.</p>
<p>For the sake of documentation and readability, comments can be added anywhere within
guacd.conf using "<code class="code">#</code>" symbols. All text following a "<code class="code">#</code>" until
end-of-line will be ignored.</p>
<p>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:</p>
<div class="informalexample">
<pre class="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"</pre>
</div>
<p>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:</p>
<div class="informalexample">
<pre class="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"</pre>
</div>
<p>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:</p>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<p>If the value contains no special characters, just include it as-is.</p>
</li><li class="listitem">
<p>If the value contains any special characters (whitespace, newlines,
<code class="code">#</code>, <code class="code">\</code>, or <code class="code">"</code>), enclose the entire value
within double quotes.</p>
</li><li class="listitem">
<p>If the value is enclosed within double quotes, escape newlines,
<code class="code">\</code>, and <code class="code">"</code> with a backslash.</p>
</li></ol></div>
<div class="table"><a id="idm139993935790400"></a><p class="title"><strong>Table 3.5. guacd.conf parameters</strong></p><div class="table-contents">
<a id="idm139993935789264" class="indexterm"></a>
<table summary="guacd.conf parameters" border="1"><colgroup><col class="c1" /><col class="c2" /><col class="c3" /></colgroup><thead><tr><th>Section</th><th>Name</th><th>Description</th></tr></thead><tbody><tr><td><em class="parameter"><code>daemon</code></em></td><td><em class="parameter"><code>pid_file</code></em></td><td>
<p><a id="idm139993935779264" class="indexterm"></a>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.</p>
</td></tr><tr><td><em class="parameter"><code>server</code></em></td><td><em class="parameter"><code>bind_host</code></em></td><td>
<p><a id="idm139993935775216" class="indexterm"></a>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.</p>
</td></tr><tr><td><em class="parameter"><code>server</code></em></td><td><em class="parameter"><code>bind_port</code></em></td><td>
<p><a id="idm139993935771456" class="indexterm"></a>The port that guacd should bind to when listening for
connections. If unspecified, port 4822 will be used.</p>
</td></tr><tr><td><em class="parameter"><code>ssl</code></em></td><td><em class="parameter"><code>server_certificate</code></em></td><td>
<p><a id="idm139993935767680" class="indexterm"></a>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
<code class="filename">guacamole.properties</code> to use SSL as
well.</p>
</td></tr><tr><td><em class="parameter"><code>ssl</code></em></td><td><em class="parameter"><code>server_key</code></em></td><td>
<p><a id="idm139993935763360" class="indexterm"></a>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
<code class="filename">guacamole.properties</code> to use SSL as
well.</p>
</td></tr></tbody></table>
</div></div><br class="table-break" />
<p>You can also affect the configuration of guacd with command-line options. If given,
these options take precendence over the system-wide configuration file:</p>
<div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">-b <em class="replaceable"><code>HOST</code></em></code></span></dt><dd>
<p>Changes the host or address that guacd listens on.</p>
<p>This corresponds to the <em class="parameter"><code>bind_host</code></em> parameter within
the <em class="parameter"><code>server</code></em> section of
<code class="filename">guacd.conf</code>.</p>
</dd><dt><span class="term"><code class="option">-l <em class="replaceable"><code>PORT</code></em></code></span></dt><dd>
<p>Changes the port that guacd listens on (the default is port 4822).</p>
<p>This corresponds to the <em class="parameter"><code>bind_port</code></em> parameter within
the <em class="parameter"><code>server</code></em> section of
<code class="filename">guacd.conf</code>.</p>
</dd><dt><span class="term"><code class="option">-p <em class="replaceable"><code>PIDFILE</code></em></code></span></dt><dd>
<p>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.</p>
<p>This corresponds to the <em class="parameter"><code>pid_file</code></em> parameter within
the <em class="parameter"><code>daemon</code></em> section of
<code class="filename">guacd.conf</code>.</p>
</dd><dt><span class="term"><code class="option">-f</code></span></dt><dd>
<p>Causes guacd to run in the foreground, rather than automatically forking
into the background.</p>
</dd></dl></div>
<p>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:</p>
<div class="variablelist"><dl class="variablelist"><dt><span class="term"><code class="option">-C <em class="replaceable"><code>CERTIFICATE</code></em></code></span></dt><dd>
<p>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
<code class="filename">guacamole.properties</code> to use SSL as well.</p>
<p>This corresponds to the <em class="parameter"><code>server_certificate</code></em>
parameter within the <em class="parameter"><code>ssl</code></em> section of
<code class="filename">guacd.conf</code>.</p>
</dd><dt><span class="term"><code class="option">-K <em class="replaceable"><code>KEY</code></em></code></span></dt><dd>
<p>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
<code class="filename">guacamole.properties</code> to use SSL as well.</p>
<p>This corresponds to the <em class="parameter"><code>server_key</code></em> parameter within
the <em class="parameter"><code>ssl</code></em> section of
<code class="filename">guacd.conf</code>.</p>
</dd></dl></div>
</div>
<div class="footnotes"><br /><hr style="width:100; text-align:left;margin-left: 0" /><div id="ftn.idm139993936176208" class="footnote">
<p><a href="#idm139993936176208" class="para"><sup class="para">[1] </sup></a><code class="classname">net.sourceforge.guacamole.net.basic.BasicFileAuthenticationProvider</code></p>
</div></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="installing-guacamole.html">Prev</a> </td><td width="20%" align="center"><a accesskey="u" href="users-guide.html">Up</a></td><td width="40%" align="right"> <a accesskey="n" href="mysql-auth.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top">Chapter 2. Installing Guacamole </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 4. MySQL authentication</td></tr></table></div>
</div></div>
<!-- Google Analytics -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-75289145-1', 'auto');
ga('send', 'pageview');
</script>
<!-- End Google Analytics -->
</body></html>