doc/1.5.1/gug/configuring-guacamole.html [356:2105]: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - To change this order, set the "extension-priority" property or rename the extension files. The default priority of extensions is dictated by the sort order of their filenames. ...
guacd-hostname
The host the Guacamole proxy daemon (guacd) is listening on. If omitted, Guacamole will assume guacd is listening on localhost.
guacd-port
The port the Guacamole proxy daemon (guacd) is listening on. If omitted, Guacamole will assume guacd is listening on port 4822.
guacd-ssl
If set to “true”, Guacamole will require SSL/TLS encryption between the web application and guacd. By default, communication between the web application and guacd will be unencrypted.
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.
skip-if-unavailable
A comma-separated list of the identifiers of authentication providers that should be allowed to fail internally without aborting the authentication process. For example, to request that Guacamole ignore failures due to the LDAP directory or MySQL server being unexpectedly down, allowing other authentication providers to continue functioning:
skip-if-unavailable: mysql, ldap
By default, Guacamole takes a conservative approach to internal failures,
aborting the authentication process if an internal error occurs within any
authentication provider. Depending on the nature of the error, this may
mean that no users can log in until the cause of the failure is dealt
with. The skip-if-unavailable
property may be used to explicitly inform
Guacamole that one or more underlying systems are expected to occasionally
experience failures, and that other functioning systems should be relied
upon if they do fail.
A typical guacamole.properties
that defines explicit values for the
guacd-hostname
and guacd-port
properties would look like:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
By default, Guacamole logs all messages to the console. Servlet containers like
Tomcat will automatically redirect these messages to a log file, catalina.out
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:
error
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.
warn
Warnings are generally non-fatal conditions. The operation continued, but encountered noteworthy problems.
info
“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.
debug
Debug messages are highly detailed and oriented toward development. Most debug messages will contain stack traces and internal information that is useful when investigating problems within code. It is expected that debug messages, though verbose, will not affect performance.
trace
Trace messages are similar to debug messages in intent and verbosity, but are so low-level that they may affect performance due to their frequency. Trace-level logging is rarely necessary, and is mainly useful in providing highly detailed context around issues being investigated.
Guacamole logs messages using a logging framework called
Logback and, by default, will only log messages at
the “info
” 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
logback.xml
file within GUACAMOLE_HOME
. For example, to log all messages
to the console, even “debug
” messages, you might use the following
logback.xml
:
<configuration>
<!-- Appender for debugging -->
<appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Log at DEBUG level -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
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.
More thorough documentation on configuring Logback is provided on the Logback project’s web site.
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.
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, guacamole-ext.
user-mapping.xml
The default authentication provider used by Guacamole reads all username,
password, and configuration information from a file called the “user mapping”
located at GUACAMOLE_HOME/user-mapping.xml
. An example of a user mapping file
is included with Guacamole, and looks something like this:
<user-mapping>
<!-- Per-user authentication and config information -->
<authorize username="USERNAME" password="PASSWORD">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</authorize>
<!-- Another user, but using md5 to hash the password
(example below uses the md5 hash of "PASSWORD") -->
<authorize
username="USERNAME2"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
<!-- First authorized connection -->
<connection name="localhost">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">VNCPASS</param>
</connection>
<!-- Second authorized connection -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
</authorize>
</user-mapping>
Each user is specified with a corresponding <authorize>
tag. This tag
contains all authorized connections for that user, each denoted with a
<connection>
tag. Each <connection>
tag contains a corresponding protocol
and set of protocol-specific parameters, specified with the <protocol>
and
<param>
tags respectively.
When using user-mapping.xml
, username/password pairs are specified with
<authorize>
tags, which each have a username
and password
attribute. Each
<authorize>
tag authorizes a specific username/password pair to access all
connections within the tag:
<authorize username="USER" password="PASS">
...
</authorize>
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:
<authorize username="USER"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
...
</authorize>
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.
To specify a connection within an <authorize>
tag, you can either list a
single protocol and set of parameters (specified with a <protocol>
tag and
any number of <param>
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 <connection>
tags, each of which can be named and contains a
<protocol>
tag and any number of <param>
tags.
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.
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.
VNC support for Guacamole is provided by the libguac-client-vnc library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the VNC-specific parameters below, Guacamole’s VNC support also accepts the parameters of several features that Guacamole provides for multiple protocols:
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.
hostname
The hostname or IP address of the VNC server Guacamole should connect to.
port
The port the VNC server is listening on, usually 5900 or 5900 + display
number. For example, if your VNC server is serving display number 1
(sometimes written as :1
), your port number here would be 5901.
autoretry
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.
The VNC standard defines only password based authentication. Other authentication mechanisms exist, but are non-standard or proprietary. Guacamole currently supports both standard password-only based authentication, as well as username and password authentication.
username
The username to use when attempting authentication, if any. This parameter is optional.
password
The password to use when attempting authentication, if any. This parameter is optional.
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.
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.
color-depth
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.
swap-red-blue
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.
cursor
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.
encodings
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 libguac-client-vnc will use any supported encoding by default.
Beware that this parameter is intended to be replaced with individual, encoding-specific parameters in a future release.
read-only
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.
force-lossless
Whether this connection should only use lossless compression for graphical updates. If set to “true”, lossy compression will not be used. This parameter is optional. By default, lossy compression will be used when heuristics determine that it would likely outperform lossless compression.
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.
dest-host
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.
dest-port
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.
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.
reverse-connect
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.
listen-timeout
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).
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.
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.
Configuring PulseAudio for network connections requires an additional line
within the PulseAudio configuration file, usually /etc/pulse/default.pa
:
load-module module-native-protocol-tcp auth-ip-acl=192.168.1.0/24 auth-anonymous=1
This loads the TCP module for PulseAudio, configuring it to accept connections
without authentication and only from the 192.168.1.0/24
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:
load-module module-native-protocol-tcp auth-anonymous=1
In either case, the auth-anonymous=1
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.
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 netstat:
$ netstat -ln | grep 4713
tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN
tcp6 0 0 :::4713 :::* LISTEN
$
The following parameters are available for configuring the audio support for VNC:
enable-audio
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.
audio-servername
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 hostname
parameter.
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.
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 clipboard-encoding
parameter.
Important
The only clipboard encoding guaranteed to be supported by VNC servers is ISO
8859-1. You should only override the clipboard encoding using the
clipboard-encoding
parameter of you are absolutely positive your VNC server
supports other encodings.
clipboard-encoding
The encoding to assume for the VNC clipboard. This parameter is optional. By default, the standard encoding ISO 8859-1 will be used. Only use this parameter if you are sure your VNC server supports other encodings beyond the standard ISO 8859-1.
Possible values are:
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.
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.
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.
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.
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 <authorize>
section for that user within your user-mapping.xml
, and add
a section like the following within it:
<connection name="Unique Name">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use VNC to connect to localhost at port 5901. Naturally,
you will want to change some or all of these values.
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 <param>
tags accordingly.
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.
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.
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.
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.
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.
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.
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.
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.
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.
RDP support for Guacamole is provided by the libguac-client-rdp library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the RDP-specific parameters below, Guacamole’s RDP support also accepts the parameters of several features that Guacamole provides for multiple protocols:
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.
hostname
The hostname or IP address of the RDP server Guacamole should connect to.
port
The port the RDP server is listening on. This parameter is optional. If this is not specified, the standard port for RDP (3389) or Hyper-V’s default port for VMConnect (2179) will be used, depending on the security mode selected.
RDP provides authentication through the use of a username, password, and optional domain. All RDP connections are encrypted.
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.
Servers that require NLA can be handled by Guacamole in one of two ways. The first is to provide the username and password within the connection configuration, either via static values or by passing through the Guacamole credentials with parameter tokens and LDAP authentication. Alternatively, if credentials are not configured within the connection configuration, Guacamole will attempt to prompt the user for the credentials interactively, if the versions of both guacd and Guacamole Client in use support it. If either component does not support prompting and the credentials are not configured, NLA-based connections will fail.
username
The username to use to authenticate, if any. This parameter is optional.
password
The password to use when attempting authentication, if any. This parameter is optional.
domain
The domain to use when attempting authentication, if any. This parameter is optional.
security
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, a security mode is selected based on a negotiation process which determines what both the client and the server support.
Possible values are:
Automatically select the security mode based on the security protocols supported by both the client and the server. This is the default.
Network Level Authentication, sometimes also referred to as “hybrid” or CredSSP (the protocol that drives NLA). This mode uses TLS encryption and requires the username and password to be given in advance. Unlike RDP mode, the authentication step is performed before the remote desktop session actually starts, avoiding the need for the Windows server to allocate significant resources for users that may not be authorized.
If the versions of guacd and Guacamole Client in use support prompting and the username, password, and domain are not specified, the user will be interactively prompted to enter credentials to complete NLA and continue the connection. Otherwise, when prompting is not supported and credentials are not provided, NLA connections will fail.
Extended Network Level Authentication. This mode is identical to NLA except that an additional “Early User Authorization Result” is required to be sent from the server to the client immediately after the NLA handshake is completed.
RDP authentication and encryption implemented via TLS (Transport Layer Security). Also referred to as RDSTLS, the TLS security mode is primarily used in load balanced configurations where the initial RDP server may redirect the connection to a different RDP server.
Automatically select the security mode based on the security protocols supported by both the client and the server, limiting that negotiation to only the protocols known to be supported by Hyper-V / VMConnect.
Legacy RDP encryption. This mode is generally only used for older Windows servers or in cases where a standard Windows login screen is desired. Newer versions of Windows have this mode disabled by default and will only accept NLA unless explicitly configured otherwise.
ignore-cert
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).
disable-auth
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.
If you are using NLA, authentication must be enabled by definition.
Windows uses a different sequence of characters at the end of each line compared to other operating systems. As RDP preserves the format of line endings within the clipboard, this can cause trouble when using a non-Windows machine to access Windows or vice versa.
If clipboard normalization is used, Guacamole will automatically translate the line endings within clipboard data to compensate for the expectations of the remote system.
normalize-clipboard
The type of line ending normalization to apply to text within the clipboard, if any. By default, line ending normalization is not applied.
Possible values are:
Preserve all line endings within the clipboard exactly as they are, performing no normalization whatsoever. This is the default.
Automatically transform all line endings within the clipboard to Unix-style line endings (LF). This format of line ending is the format used by both Linux and Mac.
Automatically transform all line endings within the clipboard to Windows-style line endings (CRLF).
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.
Although Guacamole is independent of keyboard layout, RDP is not. This is because Guacamole represents keys based on what they do (“press the Enter 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.
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 opening an issue in JIRA.
client-name
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.
On Windows RDP servers, this value is exposed within the session as the
CLIENTNAME
environment variable.
console
If set to “true”, you will be connected to the console (admin) session of the RDP server.
initial-program
The full path to the program to run immediately upon connecting. This parameter is optional.
server-layout
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. The Guacamole client is independent of keyboard layout. The RDP protocol, however, is not 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.
Possible values are generally in the format
LANGUAGE-REGION-VARIANT
, where LANGUAGE
is the standard
two-letter language code for the primary language associated with the
layout, REGION
is a standard representation of the location that the
keyboard is used (the two-letter country code, when possible), and
VARIANT
is the specific keyboard layout variant (such as “qwerty”,
“qwertz”, or “azerty”):
Keyboard layout |
Parameter value |
---|---|
Brazilian (Portuguese) |
|
English (UK) |
|
English (US) |
|
French |
|
French (Belgian) |
|
French (Swiss) |
|
German |
|
German (Swiss) |
|
Hungarian |
|
Italian |
|
Japanese |
|
Norwegian |
|
Spanish |
|
Spanish (Latin American) |
|
Swedish |
|
Turkish-Q |
|
If you server’s keyboard layout is not yet supported, and it is not possible
to set your server to use a supported layout, the failsafe
layout may be used
to force Unicode events to be used for all input, however beware that doing so
may prevent keyboard shortcuts from working as expected.
timezone
The timezone that the client should send to the server for configuring the local time display of that server. The format of the timezone is in the standard IANA key zone format, which is the format used in UNIX/Linux. This will be converted by RDP into the correct format for Windows.
The timezone is detected and will be passed to the server during the handshake phase of the connection, and may used by protocols, like RDP, that support it. This parameter can be used to override the value detected and passed during the handshake, or can be used in situations where guacd does not support passing the timezone parameter during the handshake phase (guacd versions prior to 1.3.0).
Support for forwarding the client timezone varies by RDP server implementation. For example, with Windows, support for forwarding timezones is only present in Windows Server with Remote Desktop Services (RDS, formerly known as Terminal Services) installed. Windows Server installations in admin mode, along with Windows workstation versions, do not allow the timezone to be forwarded. Other server implementations, for example, xrdp, may not implement this feature at all. Consult the documentation for the RDP server to determine whether or not this feature is supported.
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.
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.
color-depth
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.
width
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.
height
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.
dpi
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.
resize-method
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.
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.
Possible values are:
Uses the “Display Update” channel added with RDP 8.1 to signal the server when the client display size has changed.
Automatically disconnects the RDP session when the client display size has changed, and reconnects with the new size.
force-lossless
Whether this connection should only use lossless compression for graphical updates. If set to “true”, lossy compression will not be used. This parameter is optional. By default, lossy compression will be used when heuristics determine that it would likely outperform lossless compression.
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.
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.
Printing requires GhostScript to be installed on the Guacamole server, and allows users to print arbitrary documents directly to PDF. When documents are printed to the redirected printer, the user will receive a PDF of that document within their web browser.
Guacamole provides support for file transfer over RDP by emulating a virtual disk drive. This drive will persist on the Guacamole server, confined within the drive path specified. If drive redirection is enabled on a Guacamole RDP connection, users will be able to upload and download files as described in Using Guacamole.
disable-audio
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”.
enable-audio-input
If set to “true”, audio input support (microphone) will be enabled,
leveraging the standard “AUDIO_INPUT
” channel of RDP. By default, audio
input support within RDP is disabled.
enable-touch
If set to “true”, support for multi-touch events will be enabled, leveraging
the standard “RDPEI
” channel of RDP. By default, direct RDP support for
multi-touch events is disabled.
Enabling support for multi-touch allows touch interaction with applications inside the RDP session, however the touch gestures available will depend on the level of touch support of those applications and the OS.
If multi-touch support is not enabled, pointer-type interaction with applications inside the RDP session will be limited to mouse or emulated mouse events.
enable-printing
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”.
Printing support requires GhostScript to be installed. If guacd cannot
find the gs
executable when printing, the print attempt will fail.
printer-name
The name of the redirected printer device that is passed through to the RDP session. This is the name that the user will see in, for example, the Devices and Printers control panel.
If printer redirection is not enabled, this option has no effect.
enable-drive
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”.
Files will be stored in the directory specified by the “drive-path
”
parameter, which is required if file transfer is enabled.
disable-download
If set to true downloads from the remote server to client (browser) will be disabled. This includes both downloads done via the hidden Guacamole menu, as well as using the special “Download” folder presented to the remote server. The default is false, which means that downloads will be allowed.
If file transfer is not enabled, this parameter is ignored.
disable-upload
If set to true, uploads from the client (browser) to the remote server location will be disabled. The default is false, which means uploads will be allowed if file transfer is enabled.
If file transfer is not enabled, this parameter is ignored.
drive-name
The name of the filesystem used when passed through to the RDP session.
This is the name that users will see in their Computer/My Computer area
along with client name (for example, “Guacamole on Guacamole RDP”), and is
also the name of the share when accessing the special \\tsclient
network
location.
If file transfer is not enabled, this parameter is ignored.
drive-path
The directory on the Guacamole server in which transferred files should be stored. This directory must be accessible by guacd and both readable and writable by the user that runs guacd. This parameter does not refer to a directory on the RDP server.
If file transfer is not enabled, this parameter is ignored.
create-drive-path
If set to “true”, and file transfer is enabled, the directory specified by
the drive-path
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.
By default, the directory specified by the drive-path
parameter will not
automatically be created, and attempts to transfer files to a non-existent
directory will be logged as errors.
If file transfer is not enabled, this parameter is ignored.
console-audio
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 console
parameter is also set to “true”.
static-channels
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.
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.
Some RDP servers host multiple logical RDP connections behind a single server listening on a single TCP port. To select between these logical connections, an RDP client must send the “preconnection PDU” - a message which contains values that uniquely identify the destination, referred to as the “RDP source”. This mechanism is defined by the “Session Selection Extension for the RDP protocol, and is implemented by Microsoft’s Hyper-V hypervisor.
If you are using Hyper-V, you will need to specify the ID of the destination
virtual machine within the preconnection-blob
parameter. This value can be
determined using PowerShell:
PS C:\> Get-VM VirtualMachineName | Select-Object Id
Id
--
ed272546-87bd-4db9-acba-e36e1a9ca20a
PS C:\>
The preconnection PDU is intentionally generic. While its primary use is as a means for selecting virtual machines behind Hyper-V, other RDP servers may use it as well. It is up to the RDP server itself to determine whether the preconnection ID, BLOB, or both will be used, and what their values mean.
If you do intend to use Hyper-V, beware that its built-in RDP server requires different parameters for authentication and Guacamole’s defaults will not work. In most cases, you will need to do the following when connecting to Hyper-V:
Specify both “username
” and “password
” appropriately, and set
“security
” to “vmconnect
”. Selecting the “vmconnect
” security mode
will configure Guacamole to automatically negotiate security modes known to
be supported by Hyper-V, and will automatically select Hyper-V’s default RDP
port (2179).
If necessary, set “ignore-cert
” to “true
”. Hyper-V may use a self-signed
certificate.
preconnection-id
The numeric ID of the RDP source. This is a non-negative integer value dictating which of potentially several logical RDP connections should be used. This parameter is optional, and is only required if the RDP server is documented as requiring it. If using Hyper-V, this should be left blank.
preconnection-blob
An arbitrary string which identifies the RDP source - one of potentially several logical RDP connections hosted by the same RDP server. This parameter is optional, and is only required if the RDP server is documented as requiring it, such as Hyper-V. In all cases, the meaning of this parameter is opaque to the RDP protocol itself and is dictated by the RDP server. For Hyper-V, this will be the ID of the destination virtual machine.
Microsoft’s remote desktop server provides an additional gateway service which allows external connections to be forwarded to internal RDP servers which are otherwise not accessible. If you will be using Guacamole to connect through such a gateway, you will need to provide additional parameters describing the connection to that gateway, as well as any required credentials.
gateway-hostname
The hostname of the remote desktop gateway that should be used as an intermediary for the remote desktop connection. If omitted, a gateway will not be used.
gateway-port
The port of the remote desktop gateway that should be used as an intermediary for the remote desktop connection. By default, this will be “443”.
gateway-username
The username of the user authenticating with the remote desktop gateway, if a gateway is being used. This is not necessarily the same as the user actually using the remote desktop connection.
gateway-password
The password to provide when authenticating with the remote desktop gateway, if a gateway is being used.
gateway-domain
The domain of the user authenticating with the remote desktop gateway, if a gateway is being used. This is not necessarily the same domain as the user actually using the remote desktop connection.
If your remote desktop servers are behind a load balancer, sometimes referred to as a “connection broker” or “TS session broker”, that balancer may require additional information during the connection process to determine how the incoming connection should be routed. RDP does not dictate the format of this information; it is specific to the balancer in use.
If you are using a load balancer and are unsure whether such information is
required, you will need to check the documentation for your balancer. If your
balancer provides .rdp
files for convenience, look through the contents of
those files for a string field called “loadbalanceinfo”, as that field is where
the required information/cookie would be specified.
load-balance-info
The load balancing information or cookie which should be provided to the connection broker. If no connection broker is being used, this should be left blank.
RDP provides several flags which control the availability of features that decrease performance and increase bandwidth for the sake of aesthetics, such as wallpaper, window theming, menu effects, and smooth fonts. These features are all disabled by default within Guacamole such that bandwidth usage is minimized, but you can manually re-enable them on a per-connection basis if desired.
enable-wallpaper
If set to “true”, enables rendering of the desktop wallpaper. By default, wallpaper will be disabled, such that unnecessary bandwidth need not be spent redrawing the desktop.
enable-theming
If set to “true”, enables use of theming of windows and controls. By default, theming within RDP sessions is disabled.
enable-font-smoothing
If set to “true”, text will be rendered with smooth edges. Text over RDP is rendered with rough edges by default, as this reduces the number of colors used by text, and thus reduces the bandwidth required for the connection.
enable-full-window-drag
If set to “true”, the contents of windows will be displayed as windows are moved. By default, the RDP server will only draw the window border while windows are being dragged.
enable-desktop-composition
If set to “true”, graphical effects such as transparent windows and shadows will be allowed. By default, such effects, if available, are disabled.
enable-menu-animations
If set to “true”, menu open and close animations will be allowed. Menu animations are disabled by default.
disable-bitmap-caching
In certain situations, particularly with RDP server implementations with known bugs, it is necessary to disable RDP’s built-in bitmap caching functionality. This parameter allows that to be controlled in a Guacamole session. If set to “true” the RDP bitmap cache will not be used.
disable-offscreen-caching
RDP normally maintains caches of regions of the screen that are currently not visible in the client in order to accelerate retrieval of those regions when they come into view. This parameter, when set to “true,” will disable caching of those regions. This is usually only useful when dealing with known bugs in RDP server implementations and should remain enabled in most circumstances.
disable-glyph-caching
In addition to screen regions, RDP maintains caches of frequently used symbols or fonts, collectively known as “glyphs.” As with bitmap and offscreen caching, certain known bugs in RDP implementations can cause performance issues with this enabled, and setting this parameter to “true” will disable that glyph caching in the RDP session.
Glyph caching is currently universally disabled, regardless of the value of this parameter, as glyph caching support is not considered stable by FreeRDP as of the FreeRDP 2.0.0 release. See: GUACAMOLE-1191.
Recent versions of Windows provide a feature called RemoteApp which allows individual applications to be used over RDP, without providing access to the full desktop environment. If your RDP server has this feature enabled and configured, you can configure Guacamole connections to use those individual applications.
remote-app
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.
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
notepad.exe
and have assigned it the name “notepad”, you would set this
parameter to: “||notepad
”.
remote-app-dir
The working directory, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
remote-app-args
The command-line arguments, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
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 <authorize>
section for that user within your user-mapping.xml
, and add
a section like the following within it:
<connection name="Unique Name">
<protocol>rdp</protocol>
<param name="hostname">localhost</param>
<param name="port">3389</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use RDP to connect to localhost at port 3389. Naturally,
you will want to change some or all of these values.
If you want to login automatically rather than receive a login prompt upon
connecting, you can specify a username and password with additional <param>
tags. Other options are available for controlling the color depth, size of the
screen, etc.
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.
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.
SSH support for Guacamole is provided by the libguac-client-ssh library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the SSH-specific parameters below, Guacamole’s SSH support also accepts the parameters of several features that Guacamole provides for multiple protocols:
By default, Guacamole does not do any verification of host identity before establishing SSH connections. While this may be safe for private and trusted networks, it is not ideal for large networks with unknown/untrusted systems, or for SSH connections that traverse the Internet. The potential exists for Man-in-the-Middle (MitM) attacks when connecting to these hosts.
Guacamole includes two methods for verifying SSH (and SFTP) server identity
that can be used to make sure that the host you are connecting to is a host
that you know and trust. The first method is by reading a file in
GUACAMOLE_HOME
called ssh_known_hosts
. This file should be in the format of
a standard OpenSSH known_hosts
file. If the file is not present, no
verification is done. If the file is present, it is read in at connection time
and remote host identities are verified against the keys present in the file.
The second method for verifying host identity is by passing a connection
parameter that contains an OpenSSH known hosts entry for that specific host.
The host-key
parameter is used for SSH connections, while the SFTP
connections associated with RDP and VNC use the sftp-host-key
parameter. If
these parameters are not present on their respective connections no host
identity verification is performed. If the parameter is present then the
identity of the remote host is verified against the identity provided in the
parameter before a connection is established.
SSH connections require a hostname or IP address defining the destination machine. SSH is standardized to use port 22 and this will be the proper value in most cases. You only need to specify the SSH port if you are not using the standard port.
hostname
The hostname or IP address of the SSH server Guacamole should connect to.
port
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.
host-key
The known hosts entry for the SSH server. This parameter is optional, and, if not provided, no verification of host identity will be done. If the parameter is provided the identity of the server will be checked against the data.
The format of this parameter is that of a single entry from an OpenSSH
known_hosts
file.
For more information, please see SSH Host Verification.
server-alive-interval
By default the SSH client does not send keepalive requests to the server. This parameter allows you to configure the the interval in seconds at which the client connection sends keepalive packets to the server. The default is 0, which disables sending the packets. The minimum value is 2.
SSH provides authentication through passwords and public key authentication, and also supports the “NONE” method.
SSH “NONE” authentication is seen occasionally in appliances and items like network or SAN fabric switches. Generally for this authentication method you need only provide a username.
For Guacamole to use public key authentication, it must have access to your private key and, if applicable, its passphrase. If the private key requires a passphrase, but no passphrase is provided, you will be prompted for the passphrase upon connecting.
If no private key is provided, Guacamole will attempt to authenticate using a password, reading that password from the connection parameters, if provided, or by prompting the user directly.
username
The username to use to authenticate, if any. This parameter is optional. If not specified, you will be prompted for the username upon connecting.
password
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.
private-key
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 ssh-keygen utility.
passphrase
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.
By default, SSH sessions will start an interactive shell. The shell which will
be used is determined by the SSH server, normally by reading the user’s default
shell previously set with chsh
or within /etc/passwd
. If you wish to
override this and instead run a specific command, you can do so by specifying
that command in the configuration of the Guacamole SSH connection.
command
The command to execute over the SSH session, if any. This parameter is optional. If not specified, the SSH session will use the user’s default shell.
The language of the session is normally set by the SSH server. If the SSH server allows the relevant environment variable to be set, the language can be overridden on a per-connection basis.
locale
The specific locale to request for the SSH session. This parameter is
optional and may be any value accepted by the LANG
environment variable
of the SSH server. If not specified, the SSH server’s default locale will
be used.
As this parameter is sent to the SSH server using the LANG
environment
variable, the parameter will only have an effect if the SSH server allows
the LANG
environment variable to be set by SSH clients.
timezone
This parameter allows you to control the timezone that is sent to the server over the SSH connection, which will change the way local time is displayed on the server.
The mechanism used to do this over SSH connections is by setting the TZ
variable on the SSH connection to the timezone specified by this
parameter. This means that the SSH server must allow the TZ
variable to
be set/overriden - many SSH server implementations have this disabled by
default. To get this to work, you may need to modify the configuration of
the SSH server and explicitly allow for TZ
to be set/overriden.
The available values of this parameter are standard IANA key zone format timezones, and the value will be sent directly to the server in this format.
Guacamole provides support for file transfer over SSH using SFTP, the file transfer protocol built into most SSH servers. If SFTP is enabled on a Guacamole SSH connection, users will be able to upload and download files as described in Using Guacamole
enable-sftp
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 guacctl utility which controls file downloads and uploads when run on the SSH server by the user over the SSH connection.
sftp-root-directory
The directory to expose to connected users via Guacamole’s file browser. If omitted, the root directory will be used by default.
sftp-disable-download
If set to true downloads from the remote system to the client (browser) will be disabled. The default is false, which means that downloads will be enabled.
If SFTP is not enabled, this parameter will be ignored.
sftp-disable-upload
If set to true uploads from the client (browser) to the remote system will be disabled. The default is false, which means that uploads will be enabled.
If SFTP is not enabled, this parameter will be ignored.
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 <authorize>
section for that user within your
user-mapping.xml
, and add a section like the following within it:
<connection name="Unique Name">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use SSH to connect to localhost at port 22. Naturally, you
will want to change some or all of these values.
If you want to login automatically rather than receive a login prompt upon
connecting, you can specify a username and password with additional <param>
tags. Other options are available for controlling the font.
Other authentication methods will provide documentation describing how to configure new connections.
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.
Telnet support for Guacamole is provided by the libguac-client-telnet library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the telnet-specific parameters below, Guacamole’s telnet support also accepts the parameters of several features that Guacamole provides for multiple protocols:
Telnet connections require a hostname or IP address defining the destination machine. Telnet is standardized to use port 23 and this will be the proper value in most cases. You only need to specify the telnet port if you are not using the standard port.
hostname
The hostname or IP address of the telnet server Guacamole should connect to.
port
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.
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.
The de-facto method for passing the username automatically via telnet is to
submit it via the USER
environment variable, sent using the NEW-ENVIRON
option. This is the mechanism used by most telnet clients, typically via the
-l
command-line option.
Passwords cannot typically be sent automatically - at least not as reliably as
the username. There is no PASSWORD
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 expect
. Guacamole
provides similar functionality by searching for the password prompt with a
regular expression.
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.
If the password prompt is not being detected properly, you can try using your
own regular expression by specifying it within the password-regex
parameter.
The regular expression must be written in the POSIX ERE dialect (the dialect
typically used by egrep
).
username
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 NEW-ENVIRON option, and the
telnet login process must pay attention to the USER
environment
variable. Most telnet servers satisfy this criteria.
password
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.
username-regex
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 egrep
).
password-regex
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 egrep
).
login-success-regex
The regular expression to use when detecting that the login attempt has
succeeded. This parameter is optional. If specified, the terminal display
will not be shown to the user until text matching this regular expression
has been received from the telnet server. The regular expression must be
written in the POSIX ERE dialect (the dialect typically used by egrep
).
login-failure-regex
The regular expression to use when detecting that the login attempt has
failed. This parameter is optional. If specified, the connection will be
closed with an explicit login failure error if text matching this regular
expression has been received from the telnet server. The regular
expression must be written in the POSIX ERE dialect (the dialect typically
used by egrep
).
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 <authorize>
section for that user within your user-mapping.xml
, and add
a section like the following within it:
<connection name="Unique Name">
<protocol>telnet</protocol>
<param name="hostname">localhost</param>
<param name="port">23</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use telnet to connect to localhost at port 23. Naturally,
you will want to change some or all of these values.
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 client 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.
Kubernetes provides an API for attaching to the console of a container over the network. As with SSH and telnet, Guacamole’s Kubernetes support emulates a terminal on the server side which renders to the Guacamole client’s display.
Kubernetes support for Guacamole is provided by the libguac-client-kubernetes library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the Kubernetes-specific parameters below, Guacamole’s Kubernetes support also accepts the parameters of several features that Guacamole provides for multiple protocols:
Attaching to a Kubernetes container requires the hostname or IP address of the Kubernetes server and the name of the pod containing the container in question. By default, Guacamole will attach to the first container in the pod. If there are multiple containers in the pod, you may wish to also specify the container name.
hostname
The hostname or IP address of the Kubernetes server that Guacamole should connect to.
port
The port the Kubernetes server is listening on for API connections. This parameter is optional. If omitted, port 8080 will be used by default.
namespace
The name of the Kubernetes namespace of the pod containing the container being attached to. This parameter is optional. If omitted, the namespace “default” will be used.
pod
The name of the Kubernetes pod containing with the container being attached to.
container
The name of the container to attach to. This parameter is optional. If omitted, the first container in the pod will be used.
exec-command
The command to run within the container, with input and output attached to this command’s process. This parameter is optional. If omitted, no command will be run, and input/output will instead be attached to the main process of the container.
When this parameter is specified, the behavior of the connection is analogous to running kubectl exec. When omitted, the behavior is analogous to running kubectl attach.
If enabled, Kubernetes uses SSL/TLS for both encryption and authentication. Standard SSL/TLS client authentication requires both a client certificate and client key, which Guacamole will use to identify itself to the Kubernetes server. If the certificate used by Kubernetes is self-signed or signed by a non-standard certificate authority, the certificate for the certificate authority will also be needed.
use-ssl
If set to “true”, SSL/TLS will be used to connect to the Kubernetes server. This parameter is optional. By default, SSL/TLS will not be used.
client-cert
The certificate to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.
client-key
The key to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.
ca-cert
The certificate of the certificate authority that signed the certificate of the Kubernetes server, in PEM format. This parameter is optional. If omitted, verification of the Kubernetes server certificate will use only system-wide certificate authorities.
ignore-cert
If set to “true”, the validity of the SSL/TLS certificate used by the Kubernetes server will be ignored if it cannot be validated. This parameter is optional. By default, SSL/TLS certificates are validated.
If you are using the default authentication built into Guacamole, and you wish
to grant access to a Kubernetes connection to a particular user, you need to
locate the <authorize>
section for that user within your user-mapping.xml
,
and add a section like the following within it:
<connection name="Unique Name">
<protocol>kubernetes</protocol>
<param name="hostname">localhost</param>
<param name="pod">mypod</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will connect to the Kubernetes server running on localhost and
attach to the first container of the pod “mypod”.
Guacamole provides bidirectional access to the clipboard by default for all
supported protocols. For protocols that don’t inherently provide a clipboard,
Guacamole implements its own clipboard. This behavior can be overridden on a
per-connection basis with the disable-copy
and disable-paste
parameters.
disable-copy
If set to “true”, text copied within the remote desktop session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. This parameter is optional. By default, the user will be given access to the copied text.
disable-paste
If set to “true”, text copied at the browser side of the Guacamole session will not be accessible within the remote ddesktop session. This parameter is optional. By default, the user will be able to paste data from outside the browser within the remote desktop session.
Guacamole can provide file transfer over SFTP even when the remote desktop is otherwise being accessed through a different protocol, like VNC or RDP. If SFTP is enabled on a Guacamole RDP connection, users will be able to upload and download files as described in Using Guacamole.
This support is independent of the file transfer that may be provided by the protocol in use, like RDP’s own “drive redirection” (RDPDR), and is particularly useful for remote desktop servers which do not support file transfer features.
enable-sftp
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.
sftp-hostname
The hostname or IP address of the server hosting SFTP. This parameter is optional. If omitted, the hostname of the remote desktop server associated with the connection will be used.
sftp-port
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.
sftp-host-key
The known hosts entry for the SFTP server. This parameter is optional, and, if not provided, no verification of SFTP host identity will be done. If the parameter is provided the identity of the server will be checked against the data.
The format of this parameter is that of a single entry from an OpenSSH
known_hosts
file.
For more information, please see SSH Host Verification.
sftp-username
The username to authenticate as when connecting to the specified SSH server for SFTP. This parameter is optional if a username is specified for the remote desktop connection. If omitted, the username specified for the remote desktop connection will be used.
sftp-password
The password to use when authenticating with the specified SSH server for SFTP.
sftp-private-key
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 ssh-keygen utility.
sftp-passphrase
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.
sftp-directory
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.
sftp-root-directory
The directory to expose to connected users via Guacamole’s Using the file browser. If omitted, the root directory will be used by default.
sftp-server-alive-interval
The interval in seconds at which to send keepalive packets to the SSH server for the SFTP connection. This parameter is optional. If omitted, the default of 0 will be used, disabling sending keepalive packets. The minimum value is 2.
sftp-disable-download
If set to true downloads from the remote system to the client (browser) will be disabled. The default is false, which means that downloads will be enabled.
If sftp is not enabled, this parameter will be ignored.
sftp-disable-upload
If set to true uploads from the client (browser) to the remote system will be disabled. The default is false, which means that uploads will be enabled.
If sftp is not enabled, this parameter will be ignored.
Sessions of all supported protocols 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 played back directly in the browser from the connection history screen or translated to a normal video stream using the guacenc utility provided with guacamole-server.
For example, to produce a video called NAME.m4v
from the recording
“NAME
”, you would run:
$ guacenc /path/to/recording/NAME
The guacenc utility has additional options for overriding default behavior, including tweaking the output format, which are documented in detail within the manpage:
$ man guacenc
If recording of key events is explicitly enabled using the
recording-include-keys
parameter, recordings can also be translated into
human-readable interpretations of the keys pressed during the session using the
guaclog utility. The usage of guaclog is analogous to
guacenc, and results in the creation of a new text file containing
the interpreted events:
$ guaclog /path/to/recording/NAME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
doc/1.5.2/gug/configuring-guacamole.html [356:2105]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
23:32:06.468 [main] INFO o.a.g.extension.ExtensionModule - To change this order, set the "extension-priority" property or rename the extension files. The default priority of extensions is dictated by the sort order of their filenames.
...
guacd-hostname
The host the Guacamole proxy daemon (guacd) is listening on. If omitted, Guacamole will assume guacd is listening on localhost.
guacd-port
The port the Guacamole proxy daemon (guacd) is listening on. If omitted, Guacamole will assume guacd is listening on port 4822.
guacd-ssl
If set to “true”, Guacamole will require SSL/TLS encryption between the web application and guacd. By default, communication between the web application and guacd will be unencrypted.
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.
skip-if-unavailable
A comma-separated list of the identifiers of authentication providers that should be allowed to fail internally without aborting the authentication process. For example, to request that Guacamole ignore failures due to the LDAP directory or MySQL server being unexpectedly down, allowing other authentication providers to continue functioning:
skip-if-unavailable: mysql, ldap
By default, Guacamole takes a conservative approach to internal failures,
aborting the authentication process if an internal error occurs within any
authentication provider. Depending on the nature of the error, this may
mean that no users can log in until the cause of the failure is dealt
with. The skip-if-unavailable
property may be used to explicitly inform
Guacamole that one or more underlying systems are expected to occasionally
experience failures, and that other functioning systems should be relied
upon if they do fail.
A typical guacamole.properties
that defines explicit values for the
guacd-hostname
and guacd-port
properties would look like:
# Hostname and port of guacamole proxy
guacd-hostname: localhost
guacd-port: 4822
By default, Guacamole logs all messages to the console. Servlet containers like
Tomcat will automatically redirect these messages to a log file, catalina.out
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:
error
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.
warn
Warnings are generally non-fatal conditions. The operation continued, but encountered noteworthy problems.
info
“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.
debug
Debug messages are highly detailed and oriented toward development. Most debug messages will contain stack traces and internal information that is useful when investigating problems within code. It is expected that debug messages, though verbose, will not affect performance.
trace
Trace messages are similar to debug messages in intent and verbosity, but are so low-level that they may affect performance due to their frequency. Trace-level logging is rarely necessary, and is mainly useful in providing highly detailed context around issues being investigated.
Guacamole logs messages using a logging framework called
Logback and, by default, will only log messages at
the “info
” 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
logback.xml
file within GUACAMOLE_HOME
. For example, to log all messages
to the console, even “debug
” messages, you might use the following
logback.xml
:
<configuration>
<!-- Appender for debugging -->
<appender name="GUAC-DEBUG" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- Log at DEBUG level -->
<root level="debug">
<appender-ref ref="GUAC-DEBUG"/>
</root>
</configuration>
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.
More thorough documentation on configuring Logback is provided on the Logback project’s web site.
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.
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, guacamole-ext.
user-mapping.xml
The default authentication provider used by Guacamole reads all username,
password, and configuration information from a file called the “user mapping”
located at GUACAMOLE_HOME/user-mapping.xml
. An example of a user mapping file
is included with Guacamole, and looks something like this:
<user-mapping>
<!-- Per-user authentication and config information -->
<authorize username="USERNAME" password="PASSWORD">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</authorize>
<!-- Another user, but using md5 to hash the password
(example below uses the md5 hash of "PASSWORD") -->
<authorize
username="USERNAME2"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
<!-- First authorized connection -->
<connection name="localhost">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
<param name="password">VNCPASS</param>
</connection>
<!-- Second authorized connection -->
<connection name="otherhost">
<protocol>vnc</protocol>
<param name="hostname">otherhost</param>
<param name="port">5900</param>
<param name="password">VNCPASS</param>
</connection>
</authorize>
</user-mapping>
Each user is specified with a corresponding <authorize>
tag. This tag
contains all authorized connections for that user, each denoted with a
<connection>
tag. Each <connection>
tag contains a corresponding protocol
and set of protocol-specific parameters, specified with the <protocol>
and
<param>
tags respectively.
When using user-mapping.xml
, username/password pairs are specified with
<authorize>
tags, which each have a username
and password
attribute. Each
<authorize>
tag authorizes a specific username/password pair to access all
connections within the tag:
<authorize username="USER" password="PASS">
...
</authorize>
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:
<authorize username="USER"
password="319f4d26e3c536b5dd871bb2c52e3178"
encoding="md5">
...
</authorize>
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.
To specify a connection within an <authorize>
tag, you can either list a
single protocol and set of parameters (specified with a <protocol>
tag and
any number of <param>
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 <connection>
tags, each of which can be named and contains a
<protocol>
tag and any number of <param>
tags.
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.
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.
VNC support for Guacamole is provided by the libguac-client-vnc library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the VNC-specific parameters below, Guacamole’s VNC support also accepts the parameters of several features that Guacamole provides for multiple protocols:
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.
hostname
The hostname or IP address of the VNC server Guacamole should connect to.
port
The port the VNC server is listening on, usually 5900 or 5900 + display
number. For example, if your VNC server is serving display number 1
(sometimes written as :1
), your port number here would be 5901.
autoretry
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.
The VNC standard defines only password based authentication. Other authentication mechanisms exist, but are non-standard or proprietary. Guacamole currently supports both standard password-only based authentication, as well as username and password authentication.
username
The username to use when attempting authentication, if any. This parameter is optional.
password
The password to use when attempting authentication, if any. This parameter is optional.
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.
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.
color-depth
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.
swap-red-blue
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.
cursor
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.
encodings
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 libguac-client-vnc will use any supported encoding by default.
Beware that this parameter is intended to be replaced with individual, encoding-specific parameters in a future release.
read-only
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.
force-lossless
Whether this connection should only use lossless compression for graphical updates. If set to “true”, lossy compression will not be used. This parameter is optional. By default, lossy compression will be used when heuristics determine that it would likely outperform lossless compression.
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.
dest-host
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.
dest-port
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.
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.
reverse-connect
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.
listen-timeout
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).
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.
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.
Configuring PulseAudio for network connections requires an additional line
within the PulseAudio configuration file, usually /etc/pulse/default.pa
:
load-module module-native-protocol-tcp auth-ip-acl=192.168.1.0/24 auth-anonymous=1
This loads the TCP module for PulseAudio, configuring it to accept connections
without authentication and only from the 192.168.1.0/24
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:
load-module module-native-protocol-tcp auth-anonymous=1
In either case, the auth-anonymous=1
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.
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 netstat:
$ netstat -ln | grep 4713
tcp 0 0 0.0.0.0:4713 0.0.0.0:* LISTEN
tcp6 0 0 :::4713 :::* LISTEN
$
The following parameters are available for configuring the audio support for VNC:
enable-audio
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.
audio-servername
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 hostname
parameter.
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.
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 clipboard-encoding
parameter.
Important
The only clipboard encoding guaranteed to be supported by VNC servers is ISO
8859-1. You should only override the clipboard encoding using the
clipboard-encoding
parameter of you are absolutely positive your VNC server
supports other encodings.
clipboard-encoding
The encoding to assume for the VNC clipboard. This parameter is optional. By default, the standard encoding ISO 8859-1 will be used. Only use this parameter if you are sure your VNC server supports other encodings beyond the standard ISO 8859-1.
Possible values are:
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.
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.
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.
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.
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 <authorize>
section for that user within your user-mapping.xml
, and add
a section like the following within it:
<connection name="Unique Name">
<protocol>vnc</protocol>
<param name="hostname">localhost</param>
<param name="port">5901</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use VNC to connect to localhost at port 5901. Naturally,
you will want to change some or all of these values.
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 <param>
tags accordingly.
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.
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.
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.
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.
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.
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.
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.
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.
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.
RDP support for Guacamole is provided by the libguac-client-rdp library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the RDP-specific parameters below, Guacamole’s RDP support also accepts the parameters of several features that Guacamole provides for multiple protocols:
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.
hostname
The hostname or IP address of the RDP server Guacamole should connect to.
port
The port the RDP server is listening on. This parameter is optional. If this is not specified, the standard port for RDP (3389) or Hyper-V’s default port for VMConnect (2179) will be used, depending on the security mode selected.
RDP provides authentication through the use of a username, password, and optional domain. All RDP connections are encrypted.
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.
Servers that require NLA can be handled by Guacamole in one of two ways. The first is to provide the username and password within the connection configuration, either via static values or by passing through the Guacamole credentials with parameter tokens and LDAP authentication. Alternatively, if credentials are not configured within the connection configuration, Guacamole will attempt to prompt the user for the credentials interactively, if the versions of both guacd and Guacamole Client in use support it. If either component does not support prompting and the credentials are not configured, NLA-based connections will fail.
username
The username to use to authenticate, if any. This parameter is optional.
password
The password to use when attempting authentication, if any. This parameter is optional.
domain
The domain to use when attempting authentication, if any. This parameter is optional.
security
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, a security mode is selected based on a negotiation process which determines what both the client and the server support.
Possible values are:
Automatically select the security mode based on the security protocols supported by both the client and the server. This is the default.
Network Level Authentication, sometimes also referred to as “hybrid” or CredSSP (the protocol that drives NLA). This mode uses TLS encryption and requires the username and password to be given in advance. Unlike RDP mode, the authentication step is performed before the remote desktop session actually starts, avoiding the need for the Windows server to allocate significant resources for users that may not be authorized.
If the versions of guacd and Guacamole Client in use support prompting and the username, password, and domain are not specified, the user will be interactively prompted to enter credentials to complete NLA and continue the connection. Otherwise, when prompting is not supported and credentials are not provided, NLA connections will fail.
Extended Network Level Authentication. This mode is identical to NLA except that an additional “Early User Authorization Result” is required to be sent from the server to the client immediately after the NLA handshake is completed.
RDP authentication and encryption implemented via TLS (Transport Layer Security). Also referred to as RDSTLS, the TLS security mode is primarily used in load balanced configurations where the initial RDP server may redirect the connection to a different RDP server.
Automatically select the security mode based on the security protocols supported by both the client and the server, limiting that negotiation to only the protocols known to be supported by Hyper-V / VMConnect.
Legacy RDP encryption. This mode is generally only used for older Windows servers or in cases where a standard Windows login screen is desired. Newer versions of Windows have this mode disabled by default and will only accept NLA unless explicitly configured otherwise.
ignore-cert
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).
disable-auth
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.
If you are using NLA, authentication must be enabled by definition.
Windows uses a different sequence of characters at the end of each line compared to other operating systems. As RDP preserves the format of line endings within the clipboard, this can cause trouble when using a non-Windows machine to access Windows or vice versa.
If clipboard normalization is used, Guacamole will automatically translate the line endings within clipboard data to compensate for the expectations of the remote system.
normalize-clipboard
The type of line ending normalization to apply to text within the clipboard, if any. By default, line ending normalization is not applied.
Possible values are:
Preserve all line endings within the clipboard exactly as they are, performing no normalization whatsoever. This is the default.
Automatically transform all line endings within the clipboard to Unix-style line endings (LF). This format of line ending is the format used by both Linux and Mac.
Automatically transform all line endings within the clipboard to Windows-style line endings (CRLF).
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.
Although Guacamole is independent of keyboard layout, RDP is not. This is because Guacamole represents keys based on what they do (“press the Enter 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.
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 opening an issue in JIRA.
client-name
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.
On Windows RDP servers, this value is exposed within the session as the
CLIENTNAME
environment variable.
console
If set to “true”, you will be connected to the console (admin) session of the RDP server.
initial-program
The full path to the program to run immediately upon connecting. This parameter is optional.
server-layout
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. The Guacamole client is independent of keyboard layout. The RDP protocol, however, is not 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.
Possible values are generally in the format
LANGUAGE-REGION-VARIANT
, where LANGUAGE
is the standard
two-letter language code for the primary language associated with the
layout, REGION
is a standard representation of the location that the
keyboard is used (the two-letter country code, when possible), and
VARIANT
is the specific keyboard layout variant (such as “qwerty”,
“qwertz”, or “azerty”):
Keyboard layout |
Parameter value |
---|---|
Brazilian (Portuguese) |
|
English (UK) |
|
English (US) |
|
French |
|
French (Belgian) |
|
French (Swiss) |
|
German |
|
German (Swiss) |
|
Hungarian |
|
Italian |
|
Japanese |
|
Norwegian |
|
Spanish |
|
Spanish (Latin American) |
|
Swedish |
|
Turkish-Q |
|
If you server’s keyboard layout is not yet supported, and it is not possible
to set your server to use a supported layout, the failsafe
layout may be used
to force Unicode events to be used for all input, however beware that doing so
may prevent keyboard shortcuts from working as expected.
timezone
The timezone that the client should send to the server for configuring the local time display of that server. The format of the timezone is in the standard IANA key zone format, which is the format used in UNIX/Linux. This will be converted by RDP into the correct format for Windows.
The timezone is detected and will be passed to the server during the handshake phase of the connection, and may used by protocols, like RDP, that support it. This parameter can be used to override the value detected and passed during the handshake, or can be used in situations where guacd does not support passing the timezone parameter during the handshake phase (guacd versions prior to 1.3.0).
Support for forwarding the client timezone varies by RDP server implementation. For example, with Windows, support for forwarding timezones is only present in Windows Server with Remote Desktop Services (RDS, formerly known as Terminal Services) installed. Windows Server installations in admin mode, along with Windows workstation versions, do not allow the timezone to be forwarded. Other server implementations, for example, xrdp, may not implement this feature at all. Consult the documentation for the RDP server to determine whether or not this feature is supported.
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.
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.
color-depth
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.
width
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.
height
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.
dpi
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.
resize-method
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.
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.
Possible values are:
Uses the “Display Update” channel added with RDP 8.1 to signal the server when the client display size has changed.
Automatically disconnects the RDP session when the client display size has changed, and reconnects with the new size.
force-lossless
Whether this connection should only use lossless compression for graphical updates. If set to “true”, lossy compression will not be used. This parameter is optional. By default, lossy compression will be used when heuristics determine that it would likely outperform lossless compression.
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.
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.
Printing requires GhostScript to be installed on the Guacamole server, and allows users to print arbitrary documents directly to PDF. When documents are printed to the redirected printer, the user will receive a PDF of that document within their web browser.
Guacamole provides support for file transfer over RDP by emulating a virtual disk drive. This drive will persist on the Guacamole server, confined within the drive path specified. If drive redirection is enabled on a Guacamole RDP connection, users will be able to upload and download files as described in Using Guacamole.
disable-audio
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”.
enable-audio-input
If set to “true”, audio input support (microphone) will be enabled,
leveraging the standard “AUDIO_INPUT
” channel of RDP. By default, audio
input support within RDP is disabled.
enable-touch
If set to “true”, support for multi-touch events will be enabled, leveraging
the standard “RDPEI
” channel of RDP. By default, direct RDP support for
multi-touch events is disabled.
Enabling support for multi-touch allows touch interaction with applications inside the RDP session, however the touch gestures available will depend on the level of touch support of those applications and the OS.
If multi-touch support is not enabled, pointer-type interaction with applications inside the RDP session will be limited to mouse or emulated mouse events.
enable-printing
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”.
Printing support requires GhostScript to be installed. If guacd cannot
find the gs
executable when printing, the print attempt will fail.
printer-name
The name of the redirected printer device that is passed through to the RDP session. This is the name that the user will see in, for example, the Devices and Printers control panel.
If printer redirection is not enabled, this option has no effect.
enable-drive
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”.
Files will be stored in the directory specified by the “drive-path
”
parameter, which is required if file transfer is enabled.
disable-download
If set to true downloads from the remote server to client (browser) will be disabled. This includes both downloads done via the hidden Guacamole menu, as well as using the special “Download” folder presented to the remote server. The default is false, which means that downloads will be allowed.
If file transfer is not enabled, this parameter is ignored.
disable-upload
If set to true, uploads from the client (browser) to the remote server location will be disabled. The default is false, which means uploads will be allowed if file transfer is enabled.
If file transfer is not enabled, this parameter is ignored.
drive-name
The name of the filesystem used when passed through to the RDP session.
This is the name that users will see in their Computer/My Computer area
along with client name (for example, “Guacamole on Guacamole RDP”), and is
also the name of the share when accessing the special \\tsclient
network
location.
If file transfer is not enabled, this parameter is ignored.
drive-path
The directory on the Guacamole server in which transferred files should be stored. This directory must be accessible by guacd and both readable and writable by the user that runs guacd. This parameter does not refer to a directory on the RDP server.
If file transfer is not enabled, this parameter is ignored.
create-drive-path
If set to “true”, and file transfer is enabled, the directory specified by
the drive-path
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.
By default, the directory specified by the drive-path
parameter will not
automatically be created, and attempts to transfer files to a non-existent
directory will be logged as errors.
If file transfer is not enabled, this parameter is ignored.
console-audio
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 console
parameter is also set to “true”.
static-channels
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.
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.
Some RDP servers host multiple logical RDP connections behind a single server listening on a single TCP port. To select between these logical connections, an RDP client must send the “preconnection PDU” - a message which contains values that uniquely identify the destination, referred to as the “RDP source”. This mechanism is defined by the “Session Selection Extension for the RDP protocol, and is implemented by Microsoft’s Hyper-V hypervisor.
If you are using Hyper-V, you will need to specify the ID of the destination
virtual machine within the preconnection-blob
parameter. This value can be
determined using PowerShell:
PS C:\> Get-VM VirtualMachineName | Select-Object Id
Id
--
ed272546-87bd-4db9-acba-e36e1a9ca20a
PS C:\>
The preconnection PDU is intentionally generic. While its primary use is as a means for selecting virtual machines behind Hyper-V, other RDP servers may use it as well. It is up to the RDP server itself to determine whether the preconnection ID, BLOB, or both will be used, and what their values mean.
If you do intend to use Hyper-V, beware that its built-in RDP server requires different parameters for authentication and Guacamole’s defaults will not work. In most cases, you will need to do the following when connecting to Hyper-V:
Specify both “username
” and “password
” appropriately, and set
“security
” to “vmconnect
”. Selecting the “vmconnect
” security mode
will configure Guacamole to automatically negotiate security modes known to
be supported by Hyper-V, and will automatically select Hyper-V’s default RDP
port (2179).
If necessary, set “ignore-cert
” to “true
”. Hyper-V may use a self-signed
certificate.
preconnection-id
The numeric ID of the RDP source. This is a non-negative integer value dictating which of potentially several logical RDP connections should be used. This parameter is optional, and is only required if the RDP server is documented as requiring it. If using Hyper-V, this should be left blank.
preconnection-blob
An arbitrary string which identifies the RDP source - one of potentially several logical RDP connections hosted by the same RDP server. This parameter is optional, and is only required if the RDP server is documented as requiring it, such as Hyper-V. In all cases, the meaning of this parameter is opaque to the RDP protocol itself and is dictated by the RDP server. For Hyper-V, this will be the ID of the destination virtual machine.
Microsoft’s remote desktop server provides an additional gateway service which allows external connections to be forwarded to internal RDP servers which are otherwise not accessible. If you will be using Guacamole to connect through such a gateway, you will need to provide additional parameters describing the connection to that gateway, as well as any required credentials.
gateway-hostname
The hostname of the remote desktop gateway that should be used as an intermediary for the remote desktop connection. If omitted, a gateway will not be used.
gateway-port
The port of the remote desktop gateway that should be used as an intermediary for the remote desktop connection. By default, this will be “443”.
gateway-username
The username of the user authenticating with the remote desktop gateway, if a gateway is being used. This is not necessarily the same as the user actually using the remote desktop connection.
gateway-password
The password to provide when authenticating with the remote desktop gateway, if a gateway is being used.
gateway-domain
The domain of the user authenticating with the remote desktop gateway, if a gateway is being used. This is not necessarily the same domain as the user actually using the remote desktop connection.
If your remote desktop servers are behind a load balancer, sometimes referred to as a “connection broker” or “TS session broker”, that balancer may require additional information during the connection process to determine how the incoming connection should be routed. RDP does not dictate the format of this information; it is specific to the balancer in use.
If you are using a load balancer and are unsure whether such information is
required, you will need to check the documentation for your balancer. If your
balancer provides .rdp
files for convenience, look through the contents of
those files for a string field called “loadbalanceinfo”, as that field is where
the required information/cookie would be specified.
load-balance-info
The load balancing information or cookie which should be provided to the connection broker. If no connection broker is being used, this should be left blank.
RDP provides several flags which control the availability of features that decrease performance and increase bandwidth for the sake of aesthetics, such as wallpaper, window theming, menu effects, and smooth fonts. These features are all disabled by default within Guacamole such that bandwidth usage is minimized, but you can manually re-enable them on a per-connection basis if desired.
enable-wallpaper
If set to “true”, enables rendering of the desktop wallpaper. By default, wallpaper will be disabled, such that unnecessary bandwidth need not be spent redrawing the desktop.
enable-theming
If set to “true”, enables use of theming of windows and controls. By default, theming within RDP sessions is disabled.
enable-font-smoothing
If set to “true”, text will be rendered with smooth edges. Text over RDP is rendered with rough edges by default, as this reduces the number of colors used by text, and thus reduces the bandwidth required for the connection.
enable-full-window-drag
If set to “true”, the contents of windows will be displayed as windows are moved. By default, the RDP server will only draw the window border while windows are being dragged.
enable-desktop-composition
If set to “true”, graphical effects such as transparent windows and shadows will be allowed. By default, such effects, if available, are disabled.
enable-menu-animations
If set to “true”, menu open and close animations will be allowed. Menu animations are disabled by default.
disable-bitmap-caching
In certain situations, particularly with RDP server implementations with known bugs, it is necessary to disable RDP’s built-in bitmap caching functionality. This parameter allows that to be controlled in a Guacamole session. If set to “true” the RDP bitmap cache will not be used.
disable-offscreen-caching
RDP normally maintains caches of regions of the screen that are currently not visible in the client in order to accelerate retrieval of those regions when they come into view. This parameter, when set to “true,” will disable caching of those regions. This is usually only useful when dealing with known bugs in RDP server implementations and should remain enabled in most circumstances.
disable-glyph-caching
In addition to screen regions, RDP maintains caches of frequently used symbols or fonts, collectively known as “glyphs.” As with bitmap and offscreen caching, certain known bugs in RDP implementations can cause performance issues with this enabled, and setting this parameter to “true” will disable that glyph caching in the RDP session.
Glyph caching is currently universally disabled, regardless of the value of this parameter, as glyph caching support is not considered stable by FreeRDP as of the FreeRDP 2.0.0 release. See: GUACAMOLE-1191.
Recent versions of Windows provide a feature called RemoteApp which allows individual applications to be used over RDP, without providing access to the full desktop environment. If your RDP server has this feature enabled and configured, you can configure Guacamole connections to use those individual applications.
remote-app
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.
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
notepad.exe
and have assigned it the name “notepad”, you would set this
parameter to: “||notepad
”.
remote-app-dir
The working directory, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
remote-app-args
The command-line arguments, if any, for the remote application. This parameter has no effect if RemoteApp is not in use.
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 <authorize>
section for that user within your user-mapping.xml
, and add
a section like the following within it:
<connection name="Unique Name">
<protocol>rdp</protocol>
<param name="hostname">localhost</param>
<param name="port">3389</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use RDP to connect to localhost at port 3389. Naturally,
you will want to change some or all of these values.
If you want to login automatically rather than receive a login prompt upon
connecting, you can specify a username and password with additional <param>
tags. Other options are available for controlling the color depth, size of the
screen, etc.
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.
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.
SSH support for Guacamole is provided by the libguac-client-ssh library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the SSH-specific parameters below, Guacamole’s SSH support also accepts the parameters of several features that Guacamole provides for multiple protocols:
By default, Guacamole does not do any verification of host identity before establishing SSH connections. While this may be safe for private and trusted networks, it is not ideal for large networks with unknown/untrusted systems, or for SSH connections that traverse the Internet. The potential exists for Man-in-the-Middle (MitM) attacks when connecting to these hosts.
Guacamole includes two methods for verifying SSH (and SFTP) server identity
that can be used to make sure that the host you are connecting to is a host
that you know and trust. The first method is by reading a file in
GUACAMOLE_HOME
called ssh_known_hosts
. This file should be in the format of
a standard OpenSSH known_hosts
file. If the file is not present, no
verification is done. If the file is present, it is read in at connection time
and remote host identities are verified against the keys present in the file.
The second method for verifying host identity is by passing a connection
parameter that contains an OpenSSH known hosts entry for that specific host.
The host-key
parameter is used for SSH connections, while the SFTP
connections associated with RDP and VNC use the sftp-host-key
parameter. If
these parameters are not present on their respective connections no host
identity verification is performed. If the parameter is present then the
identity of the remote host is verified against the identity provided in the
parameter before a connection is established.
SSH connections require a hostname or IP address defining the destination machine. SSH is standardized to use port 22 and this will be the proper value in most cases. You only need to specify the SSH port if you are not using the standard port.
hostname
The hostname or IP address of the SSH server Guacamole should connect to.
port
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.
host-key
The known hosts entry for the SSH server. This parameter is optional, and, if not provided, no verification of host identity will be done. If the parameter is provided the identity of the server will be checked against the data.
The format of this parameter is that of a single entry from an OpenSSH
known_hosts
file.
For more information, please see SSH Host Verification.
server-alive-interval
By default the SSH client does not send keepalive requests to the server. This parameter allows you to configure the the interval in seconds at which the client connection sends keepalive packets to the server. The default is 0, which disables sending the packets. The minimum value is 2.
SSH provides authentication through passwords and public key authentication, and also supports the “NONE” method.
SSH “NONE” authentication is seen occasionally in appliances and items like network or SAN fabric switches. Generally for this authentication method you need only provide a username.
For Guacamole to use public key authentication, it must have access to your private key and, if applicable, its passphrase. If the private key requires a passphrase, but no passphrase is provided, you will be prompted for the passphrase upon connecting.
If no private key is provided, Guacamole will attempt to authenticate using a password, reading that password from the connection parameters, if provided, or by prompting the user directly.
username
The username to use to authenticate, if any. This parameter is optional. If not specified, you will be prompted for the username upon connecting.
password
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.
private-key
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 ssh-keygen utility.
passphrase
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.
By default, SSH sessions will start an interactive shell. The shell which will
be used is determined by the SSH server, normally by reading the user’s default
shell previously set with chsh
or within /etc/passwd
. If you wish to
override this and instead run a specific command, you can do so by specifying
that command in the configuration of the Guacamole SSH connection.
command
The command to execute over the SSH session, if any. This parameter is optional. If not specified, the SSH session will use the user’s default shell.
The language of the session is normally set by the SSH server. If the SSH server allows the relevant environment variable to be set, the language can be overridden on a per-connection basis.
locale
The specific locale to request for the SSH session. This parameter is
optional and may be any value accepted by the LANG
environment variable
of the SSH server. If not specified, the SSH server’s default locale will
be used.
As this parameter is sent to the SSH server using the LANG
environment
variable, the parameter will only have an effect if the SSH server allows
the LANG
environment variable to be set by SSH clients.
timezone
This parameter allows you to control the timezone that is sent to the server over the SSH connection, which will change the way local time is displayed on the server.
The mechanism used to do this over SSH connections is by setting the TZ
variable on the SSH connection to the timezone specified by this
parameter. This means that the SSH server must allow the TZ
variable to
be set/overriden - many SSH server implementations have this disabled by
default. To get this to work, you may need to modify the configuration of
the SSH server and explicitly allow for TZ
to be set/overriden.
The available values of this parameter are standard IANA key zone format timezones, and the value will be sent directly to the server in this format.
Guacamole provides support for file transfer over SSH using SFTP, the file transfer protocol built into most SSH servers. If SFTP is enabled on a Guacamole SSH connection, users will be able to upload and download files as described in Using Guacamole
enable-sftp
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 guacctl utility which controls file downloads and uploads when run on the SSH server by the user over the SSH connection.
sftp-root-directory
The directory to expose to connected users via Guacamole’s file browser. If omitted, the root directory will be used by default.
sftp-disable-download
If set to true downloads from the remote system to the client (browser) will be disabled. The default is false, which means that downloads will be enabled.
If SFTP is not enabled, this parameter will be ignored.
sftp-disable-upload
If set to true uploads from the client (browser) to the remote system will be disabled. The default is false, which means that uploads will be enabled.
If SFTP is not enabled, this parameter will be ignored.
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 <authorize>
section for that user within your
user-mapping.xml
, and add a section like the following within it:
<connection name="Unique Name">
<protocol>ssh</protocol>
<param name="hostname">localhost</param>
<param name="port">22</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use SSH to connect to localhost at port 22. Naturally, you
will want to change some or all of these values.
If you want to login automatically rather than receive a login prompt upon
connecting, you can specify a username and password with additional <param>
tags. Other options are available for controlling the font.
Other authentication methods will provide documentation describing how to configure new connections.
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.
Telnet support for Guacamole is provided by the libguac-client-telnet library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the telnet-specific parameters below, Guacamole’s telnet support also accepts the parameters of several features that Guacamole provides for multiple protocols:
Telnet connections require a hostname or IP address defining the destination machine. Telnet is standardized to use port 23 and this will be the proper value in most cases. You only need to specify the telnet port if you are not using the standard port.
hostname
The hostname or IP address of the telnet server Guacamole should connect to.
port
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.
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.
The de-facto method for passing the username automatically via telnet is to
submit it via the USER
environment variable, sent using the NEW-ENVIRON
option. This is the mechanism used by most telnet clients, typically via the
-l
command-line option.
Passwords cannot typically be sent automatically - at least not as reliably as
the username. There is no PASSWORD
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 expect
. Guacamole
provides similar functionality by searching for the password prompt with a
regular expression.
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.
If the password prompt is not being detected properly, you can try using your
own regular expression by specifying it within the password-regex
parameter.
The regular expression must be written in the POSIX ERE dialect (the dialect
typically used by egrep
).
username
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 NEW-ENVIRON option, and the
telnet login process must pay attention to the USER
environment
variable. Most telnet servers satisfy this criteria.
password
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.
username-regex
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 egrep
).
password-regex
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 egrep
).
login-success-regex
The regular expression to use when detecting that the login attempt has
succeeded. This parameter is optional. If specified, the terminal display
will not be shown to the user until text matching this regular expression
has been received from the telnet server. The regular expression must be
written in the POSIX ERE dialect (the dialect typically used by egrep
).
login-failure-regex
The regular expression to use when detecting that the login attempt has
failed. This parameter is optional. If specified, the connection will be
closed with an explicit login failure error if text matching this regular
expression has been received from the telnet server. The regular
expression must be written in the POSIX ERE dialect (the dialect typically
used by egrep
).
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 <authorize>
section for that user within your user-mapping.xml
, and add
a section like the following within it:
<connection name="Unique Name">
<protocol>telnet</protocol>
<param name="hostname">localhost</param>
<param name="port">23</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will use telnet to connect to localhost at port 23. Naturally,
you will want to change some or all of these values.
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 client 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.
Kubernetes provides an API for attaching to the console of a container over the network. As with SSH and telnet, Guacamole’s Kubernetes support emulates a terminal on the server side which renders to the Guacamole client’s display.
Kubernetes support for Guacamole is provided by the libguac-client-kubernetes library, which will be installed as part of guacamole-server if the required dependencies are present during the build.
Note
In addition to the Kubernetes-specific parameters below, Guacamole’s Kubernetes support also accepts the parameters of several features that Guacamole provides for multiple protocols:
Attaching to a Kubernetes container requires the hostname or IP address of the Kubernetes server and the name of the pod containing the container in question. By default, Guacamole will attach to the first container in the pod. If there are multiple containers in the pod, you may wish to also specify the container name.
hostname
The hostname or IP address of the Kubernetes server that Guacamole should connect to.
port
The port the Kubernetes server is listening on for API connections. This parameter is optional. If omitted, port 8080 will be used by default.
namespace
The name of the Kubernetes namespace of the pod containing the container being attached to. This parameter is optional. If omitted, the namespace “default” will be used.
pod
The name of the Kubernetes pod containing with the container being attached to.
container
The name of the container to attach to. This parameter is optional. If omitted, the first container in the pod will be used.
exec-command
The command to run within the container, with input and output attached to this command’s process. This parameter is optional. If omitted, no command will be run, and input/output will instead be attached to the main process of the container.
When this parameter is specified, the behavior of the connection is analogous to running kubectl exec. When omitted, the behavior is analogous to running kubectl attach.
If enabled, Kubernetes uses SSL/TLS for both encryption and authentication. Standard SSL/TLS client authentication requires both a client certificate and client key, which Guacamole will use to identify itself to the Kubernetes server. If the certificate used by Kubernetes is self-signed or signed by a non-standard certificate authority, the certificate for the certificate authority will also be needed.
use-ssl
If set to “true”, SSL/TLS will be used to connect to the Kubernetes server. This parameter is optional. By default, SSL/TLS will not be used.
client-cert
The certificate to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.
client-key
The key to use if performing SSL/TLS client authentication to authenticate with the Kubernetes server, in PEM format. This parameter is optional. If omitted, SSL client authentication will not be performed.
ca-cert
The certificate of the certificate authority that signed the certificate of the Kubernetes server, in PEM format. This parameter is optional. If omitted, verification of the Kubernetes server certificate will use only system-wide certificate authorities.
ignore-cert
If set to “true”, the validity of the SSL/TLS certificate used by the Kubernetes server will be ignored if it cannot be validated. This parameter is optional. By default, SSL/TLS certificates are validated.
If you are using the default authentication built into Guacamole, and you wish
to grant access to a Kubernetes connection to a particular user, you need to
locate the <authorize>
section for that user within your user-mapping.xml
,
and add a section like the following within it:
<connection name="Unique Name">
<protocol>kubernetes</protocol>
<param name="hostname">localhost</param>
<param name="pod">mypod</param>
</connection>
If added exactly as above, a new connection named “Unique Name
” will be
available to the user associated with the <authorize>
section containing it.
The connection will connect to the Kubernetes server running on localhost and
attach to the first container of the pod “mypod”.
Guacamole provides bidirectional access to the clipboard by default for all
supported protocols. For protocols that don’t inherently provide a clipboard,
Guacamole implements its own clipboard. This behavior can be overridden on a
per-connection basis with the disable-copy
and disable-paste
parameters.
disable-copy
If set to “true”, text copied within the remote desktop session will not be accessible by the user at the browser side of the Guacamole session, and will be usable only within the remote desktop. This parameter is optional. By default, the user will be given access to the copied text.
disable-paste
If set to “true”, text copied at the browser side of the Guacamole session will not be accessible within the remote ddesktop session. This parameter is optional. By default, the user will be able to paste data from outside the browser within the remote desktop session.
Guacamole can provide file transfer over SFTP even when the remote desktop is otherwise being accessed through a different protocol, like VNC or RDP. If SFTP is enabled on a Guacamole RDP connection, users will be able to upload and download files as described in Using Guacamole.
This support is independent of the file transfer that may be provided by the protocol in use, like RDP’s own “drive redirection” (RDPDR), and is particularly useful for remote desktop servers which do not support file transfer features.
enable-sftp
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.
sftp-hostname
The hostname or IP address of the server hosting SFTP. This parameter is optional. If omitted, the hostname of the remote desktop server associated with the connection will be used.
sftp-port
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.
sftp-host-key
The known hosts entry for the SFTP server. This parameter is optional, and, if not provided, no verification of SFTP host identity will be done. If the parameter is provided the identity of the server will be checked against the data.
The format of this parameter is that of a single entry from an OpenSSH
known_hosts
file.
For more information, please see SSH Host Verification.
sftp-username
The username to authenticate as when connecting to the specified SSH server for SFTP. This parameter is optional if a username is specified for the remote desktop connection. If omitted, the username specified for the remote desktop connection will be used.
sftp-password
The password to use when authenticating with the specified SSH server for SFTP.
sftp-private-key
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 ssh-keygen utility.
sftp-passphrase
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.
sftp-directory
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.
sftp-root-directory
The directory to expose to connected users via Guacamole’s Using the file browser. If omitted, the root directory will be used by default.
sftp-server-alive-interval
The interval in seconds at which to send keepalive packets to the SSH server for the SFTP connection. This parameter is optional. If omitted, the default of 0 will be used, disabling sending keepalive packets. The minimum value is 2.
sftp-disable-download
If set to true downloads from the remote system to the client (browser) will be disabled. The default is false, which means that downloads will be enabled.
If sftp is not enabled, this parameter will be ignored.
sftp-disable-upload
If set to true uploads from the client (browser) to the remote system will be disabled. The default is false, which means that uploads will be enabled.
If sftp is not enabled, this parameter will be ignored.
Sessions of all supported protocols 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 played back directly in the browser from the connection history screen or translated to a normal video stream using the guacenc utility provided with guacamole-server.
For example, to produce a video called NAME.m4v
from the recording
“NAME
”, you would run:
$ guacenc /path/to/recording/NAME
The guacenc utility has additional options for overriding default behavior, including tweaking the output format, which are documented in detail within the manpage:
$ man guacenc
If recording of key events is explicitly enabled using the
recording-include-keys
parameter, recordings can also be translated into
human-readable interpretations of the keys pressed during the session using the
guaclog utility. The usage of guaclog is analogous to
guacenc, and results in the creation of a new text file containing
the interpreted events:
$ guaclog /path/to/recording/NAME
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -