| Configuring Guacamole |
| ===================== |
| |
| After installing Guacamole, you need to configure users and connections before |
| Guacamole will work. This chapter covers general configuration of Guacamole and |
| the use of its default authentication method. |
| |
| Guacamole's default authentication method reads all users and connections from |
| a single file called `user-mapping.xml`. This authentication method is intended |
| to be: |
| |
| 1. Sufficient for small deployments of Guacamole. |
| |
| 2. A relatively-easy means of verifying that Guacamole has been properly set |
| up. |
| |
| Other, more complex authentication methods which use backend databases, LDAP, |
| etc. are discussed in a separate, dedicated chapters. |
| |
| Regardless of the authentication method you use, Guacamole's configuration |
| always consists of two main pieces: a directory referred to as |
| `GUACAMOLE_HOME`, which is the primary search location for configuration files, |
| and `guacamole.properties`, the main configuration file used by Guacamole and |
| its extensions. |
| |
| (guacamole-home)= |
| |
| `GUACAMOLE_HOME` (`/etc/guacamole`) |
| --------------------------------------- |
| |
| `GUACAMOLE_HOME` is the name given to Guacamole's configuration directory, |
| which is located at `/etc/guacamole` by default. All configuration files, |
| extensions, etc. reside within this directory. The structure of |
| `GUACAMOLE_HOME` is rigorously defined, and consists of the following optional |
| files: |
| |
| `guacamole.properties` |
| : The main Guacamole configuration file. Properties within this file dictate |
| how Guacamole will connect to guacd, and may configure the behavior of |
| installed authentication extensions. |
| |
| `logback.xml` |
| : Guacamole uses a logging system called Logback for all messages. By |
| default, Guacamole will log to the console only, but you can change this |
| by providing your own Logback configuration file. |
| |
| `extensions/` |
| : The install location for all Guacamole extensions. Guacamole will |
| automatically load all `.jar` files within this directory on startup. |
| |
| `lib/` |
| : The search directory for libraries required by any Guacamole extensions. |
| Guacamole will make the `.jar` files within this directory available to |
| all extensions. If your extensions require additional libraries, such as |
| database drivers, this is the proper place to put them. |
| |
| (overriding-guacamole-home)= |
| |
| ### Overriding `GUACAMOLE_HOME` |
| |
| If you cannot or do not wish to use `/etc/guacamole` for `GUACAMOLE_HOME`, the |
| location can be overridden through any of the following methods: |
| |
| 1. Creating a directory named `.guacamole`, within the home directory of *the |
| user running the servlet container*. This directory will automatically be |
| used for `GUACAMOLE_HOME` if it exists. |
| |
| 2. Specifying the full path to an alternative directory with the environment |
| variable `GUACAMOLE_HOME`. *Be sure to consult the documentation for your |
| servlet container to determine how to properly set environment variables.* |
| |
| 3. Specifying the full path to an alternative directory with the system |
| property guacamole.home. |
| |
| (initial-setup)= |
| |
| `guacamole.properties` |
| ------------------------ |
| |
| The Guacamole web application uses one main configuration file called |
| `guacamole.properties`. This file is the common location for all configuration |
| properties read by Guacamole or any extension of Guacamole, including |
| authentication providers. |
| |
| In previous releases, this file had to be in the classpath of your servlet |
| container. Now, the location of `guacamole.properties` can be explicitly |
| defined with environment variables or system properties, and the classpath is |
| only used as a last resort. When searching for `guacamole.properties`, |
| Guacamole will check, in order: |
| |
| 1. Within `GUACAMOLE_HOME`, as defined above. |
| |
| 2. The classpath of the servlet container. |
| |
| The `guacamole.properties` file is optional and is used to configure Guacamole |
| in situations where the defaults are insufficient, or to provide additional |
| configuration information for extensions. There are several standard properties |
| that are always available for use: |
| |
| `api-session-timeout` |
| : The amount of time, in minutes, to allow Guacamole sessions |
| (authentication tokens) to remain valid despite inactivity. If omitted, |
| Guacamole sessions will expire after 60 minutes of inactivity. |
| |
| `api-max-request-size` |
| : The maximum number of bytes to accept within the entity body of any |
| particular HTTP request, where 0 indicates that no limit should be |
| applied. If omitted, requests will be limited to 2097152 bytes (2 MB) by |
| default. This limit does not apply to file uploads. |
| |
| If using a reverse proxy for SSL termination, *keep in mind that reverse |
| proxies may enforce their own limits independently of this*. For example, |
| [Nginx will enforce a 1 MB request size limit by |
| default](nginx-file-upload-size). |
| |
| `allowed-languages` |
| : A comma-separated whitelist of language keys to allow as display language |
| choices within the Guacamole interface. For example, to restrict Guacamole |
| to only English and German, you would specify: |
| |
| ``` |
| allowed-languages: en, de |
| ``` |
| |
| As English is the fallback language, used whenever a translation key is |
| missing from the chosen language, English should only be omitted from this |
| list if you are absolutely positive that no strings are missing. |
| |
| The corresponding JSON of any built-in languages not listed here will |
| still be available over HTTP, but the Guacamole interface will not use |
| them, nor will they be used automatically based on local browser language. |
| If omitted, all defined languages will be available. |
| |
| `enable-environment-properties` |
| : If set to "true", Guacamole will first evaluate its environment to obtain |
| the value for any given configuration property, before using a value |
| specified in `guacamole.properties` or falling back to a default value. By |
| enabling this option, you can easily override any other configuration |
| property using an environment variable. |
| |
| ``` |
| enable-environment-properties: true |
| ``` |
| |
| When searching for a configuration property in the environment, the name |
| of the property is first transformed by converting all lower case |
| characters to their upper case equivalents, and by replacing all hyphen |
| characters (`-`) with underscore characters (`_`). For example, the |
| `guacd-hostname` property would be transformed to `GUACD_HOSTNAME` when |
| searching the environment. |
| |
| `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 |
| ``` |
| |
| (webapp-logging)= |
| |
| Logging within the web application |
| ---------------------------------- |
| |
| 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](http://logback.qos.ch/) 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`: |
| |
| ```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](http://logback.qos.ch/manual/configuration.html) is provided on the |
| Logback project's web site. |
| |
| (basic-auth)= |
| |
| Using the default authentication |
| -------------------------------- |
| |
| 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)= |
| |
| ### `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: |
| |
| ```xml |
| <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. |
| |
| (user-setup)= |
| |
| #### Adding users |
| |
| 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: |
| |
| ```xml |
| <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: |
| |
| ```xml |
| <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. |
| |
| (connection-setup)= |
| |
| #### Adding connections to a user |
| |
| 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. |
| |
| (connection-configuration)= |
| |
| Configuring connections |
| ----------------------- |
| |
| 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. |
| |
| ### VNC |
| |
| 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: |
| |
| * [](disable-clipboard) |
| * [](common-sftp) |
| * [](graphical-recording) |
| * [](wake-on-lan) |
| ::: |
| |
| (vnc-network-parameters)= |
| |
| #### Network parameters |
| |
| 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. |
| |
| (vnc-authentication)= |
| |
| #### Authentication |
| |
| 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-display-settings)= |
| |
| #### Display settings |
| |
| 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. |
| |
| #### VNC Repeater |
| |
| 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. |
| |
| (vnc-reverse-connections)= |
| |
| #### Reverse VNC connections |
| |
| 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-audio)= |
| |
| #### Audio support (via PulseAudio) |
| |
| 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 {command}`netstat`: |
| |
| ```console |
| $ 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. |
| |
| (vnc-clipboard-encoding)= |
| |
| #### Clipboard encoding |
| |
| 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: |
| |
| ISO8859-1 |
| : 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 |
| : 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 |
| : 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. |
| |
| CP1252 |
| : 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. |
| |
| (adding-vnc)= |
| |
| #### Adding a VNC connection |
| |
| 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: |
| |
| ```xml |
| <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. |
| |
| (vnc-servers)= |
| |
| #### Which VNC server? |
| |
| 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)= |
| |
| ##### RealVNC or TigerVNC |
| |
| 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 |
| |
| 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. |
| |
| ##### x11vnc |
| |
| 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 |
| |
| 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)= |
| |
| ##### QEMU or KVM |
| |
| 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. |
| |
| ### RDP |
| |
| 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: |
| |
| * [](disable-clipboard) |
| * [](common-sftp) |
| * [](graphical-recording) |
| * [](wake-on-lan) |
| ::: |
| |
| (rdp-network-parameters)= |
| |
| #### Network parameters |
| |
| 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-authentication)= |
| |
| #### Authentication and security |
| |
| 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](parameter-tokens) and [](ldap-auth). |
| 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: |
| |
| any |
| : Automatically select the security mode based on the security protocols |
| supported by both the client and the server. *This is the default*. |
| |
| nla |
| : 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. |
| |
| nla-ext |
| : Extended Network Level Authentication. This mode is identical to NLA |
| except that an additional "[Early User Authorization |
| Result](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/d0e560a3-25cb-4563-8bdc-6c4cc625bbfc)" |
| is required to be sent from the server to the client immediately after the |
| NLA handshake is completed. |
| |
| tls |
| : 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. |
| |
| vmconnect |
| : 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](rdp-preconnection-pdu). |
| |
| rdp |
| : 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. |
| |
| (rdp-session-settings)= |
| |
| #### Session settings |
| |
| 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](https://issues.apache.org/jira/browse/GUACAMOLE). |
| |
| |
| `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 |
| {samp}`{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) | `pt-br-qwerty` | |
| | English (UK) | `en-gb-qwerty` | |
| | English (US) | `en-us-qwerty` | |
| | French | `fr-fr-azerty` | |
| | French (Belgian) | `fr-be-azerty` | |
| | French (Swiss) | `fr-ch-qwertz` | |
| | German | `de-de-qwertz` | |
| | German (Swiss) | `de-ch-qwertz` | |
| | Hungarian | `hu-hu-qwertz` | |
| | Italian | `it-it-qwerty` | |
| | Japanese | `ja-jp-qwerty` | |
| | Norwegian | `no-no-qwerty` | |
| | Spanish | `es-es-qwerty` | |
| | Spanish (Latin American) | `es-latam-qwerty` | |
| | Swedish | `sv-se-qwerty` | |
| | Turkish-Q | `tr-tr-qwerty` | |
| |
| 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. |
| |
| (rdp-display-settings)= |
| |
| #### Display settings |
| |
| 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: |
| |
| display-update |
| : Uses the "Display Update" channel added with RDP 8.1 to signal the |
| server when the client display size has changed. |
| |
| reconnect |
| : 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. |
| |
| (rdp-device-redirection)= |
| |
| #### Device redirection |
| |
| 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. |
| |
| (rdp-preconnection-pdu)= |
| |
| #### Preconnection PDU (Hyper-V / VMConnect) |
| |
| 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](https://msdn.microsoft.com/en-us/library/cc242359.aspx) 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: |
| |
| ```ps1con |
| 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: |
| |
| 1. 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). |
| |
| 2. 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.* |
| |
| (rdp-gateway)= |
| |
| #### Remote desktop gateway |
| |
| 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. |
| |
| (rdp-connection-broker)= |
| |
| #### Load balancing and RDP connection brokers |
| |
| 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-perf-flags)= |
| |
| #### Performance flags |
| |
| 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: {jira}`GUACAMOLE-1191`.** |
| |
| (rdp-remoteapp)= |
| |
| #### RemoteApp |
| |
| 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. |
| |
| (adding-rdp)= |
| |
| #### Adding an RDP connection |
| |
| 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: |
| |
| ```xml |
| <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. |
| |
| ### SSH |
| |
| 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: |
| |
| * [](disable-clipboard) |
| * [](graphical-recording) |
| * [](typescripts) |
| * [](stdin-pipe) |
| * [](terminal-behavior) |
| * [](terminal-display-settings) |
| * [](wake-on-lan) |
| ::: |
| |
| (ssh-host-verification)= |
| |
| #### SSH Host Verification |
| |
| 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-network-parameters)= |
| |
| #### Network parameters |
| |
| 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-authentication)= |
| |
| #### Authentication |
| |
| 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 {command}`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. |
| |
| (ssh-command)= |
| |
| #### Running a command (instead of a shell) |
| |
| 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. |
| |
| #### Internationalization/Locale settings |
| |
| 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. |
| |
| (ssh-sftp)= |
| |
| #### SFTP |
| |
| 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 {program}`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](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. |
| |
| (adding-ssh)= |
| |
| #### Adding an SSH connection |
| |
| 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: |
| |
| ```xml |
| <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 |
| |
| 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: |
| |
| * [](disable-clipboard) |
| * [](graphical-recording) |
| * [](typescripts) |
| * [](stdin-pipe) |
| * [](terminal-behavior) |
| * [](terminal-display-settings) |
| * [](wake-on-lan) |
| ::: |
| |
| (telnet-network-parameters)= |
| |
| #### Network parameters |
| |
| 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-authentication)= |
| |
| #### Authentication |
| |
| 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`). |
| |
| (adding-telnet)= |
| |
| #### Adding a telnet connection |
| |
| 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: |
| |
| ```xml |
| <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 |
| |
| 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: |
| |
| * [](disable-clipboard) |
| * [](graphical-recording) |
| * [](typescripts) |
| * [](stdin-pipe) |
| * [](terminal-behavior) |
| * [](terminal-display-settings) |
| * [](wake-on-lan) |
| ::: |
| |
| |
| (kubernetes-network-parameters)= |
| |
| #### Network/Container parameters |
| |
| 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 {command}`kubectl exec`. When omitted, the behavior |
| is analogous to running {command}`kubectl attach`. |
| |
| (kubernetes-authentication)= |
| |
| #### Authentication and SSL/TLS |
| |
| 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. |
| |
| (adding-kubernetes)= |
| |
| #### Adding a Kubernetes connection |
| |
| 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: |
| |
| ```xml |
| <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". |
| |
| ### Common configuration options |
| |
| (disable-clipboard)= |
| |
| #### Disabling clipboard access |
| |
| 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. |
| |
| (common-sftp)= |
| |
| #### File transfer via SFTP |
| |
| 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 {command}`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 |
| [](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. |
| |
| (graphical-recording)= |
| |
| #### Graphical session recording |
| |
| 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 |
| translated to a normal video stream using the {program}`guacenc` utility |
| provided with guacamole-server. |
| |
| For example, to produce a video called {samp}`{NAME}.m4v` from the recording |
| "`NAME`", you would run: |
| |
| ```console |
| $ guacenc /path/to/recording/NAME |
| ``` |
| |
| The {program}`guacenc` utility has additional options for overriding default |
| behavior, including tweaking the output format, which are documented in detail |
| within the manpage: |
| |
| ```console |
| $ 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 |
| {program}`guaclog` utility. The usage of {program}`guaclog` is analogous to |
| {program}`guacenc`, and results in the creation of a new text file containing |
| the interpreted events: |
| |
| ```console |
| $ guaclog /path/to/recording/NAME |
| guaclog: INFO: Guacamole input log interpreter (guaclog) version 1.4.0 |
| guaclog: INFO: 1 input file(s) provided. |
| guaclog: INFO: Writing input events from "/path/to/recording/NAME" to "/path/to/recording/NAME.txt" ... |
| guaclog: INFO: All files interpreted successfully. |
| $ |
| ``` |
| |
| :::{important} |
| Guacamole will never overwrite an existing recording. If necessary, a numeric |
| suffix like ".1", ".2", ".3", etc. will be appended to <NAME> to avoid |
| overwriting an existing recording. If even appending a numeric suffix does not |
| help, the session will simply not be recorded. |
| ::: |
| |
| `recording-path` |
| : The directory in which screen recording files should be created. *If a |
| graphical recording needs to be created, then this parameter is required.* |
| Specifying this parameter enables graphical screen recording. If this |
| parameter is omitted, no graphical recording will be created. |
| |
| `create-recording-path` |
| : If set to "true", the directory specified by the `recording-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. |
| |
| *This parameter is optional.* By default, the directory specified by the |
| `recording-path` parameter will not automatically be created, and attempts |
| to create recordings within a non-existent directory will be logged as |
| errors. |
| |
| This parameter only has an effect if graphical recording is enabled. If |
| the `recording-path` is not specified, graphical session recording will be |
| disabled, and this parameter will be ignored. |
| |
| `recording-name` |
| : The filename to use for any created recordings. *This parameter is |
| optional.* If omitted, the value "recording" will be used instead. |
| |
| This parameter only has an effect if graphical recording is enabled. If |
| the `recording-path` is not specified, graphical session recording will be |
| disabled, and this parameter will be ignored. |
| |
| `recording-exclude-output` |
| : If set to "true", graphical output and other data normally streamed from |
| server to client will be excluded from the recording, producing a |
| recording which contains only user input events. *This parameter is |
| optional.* If omitted, graphical output will be included in the recording. |
| |
| This parameter only has an effect if graphical recording is enabled. If |
| the `recording-path` is not specified, graphical session recording will be |
| disabled, and this parameter will be ignored. |
| |
| `recording-exclude-mouse` |
| : If set to "true", user mouse events will be excluded from the recording, |
| producing a recording which lacks a visible mouse cursor. *This parameter |
| is optional.* If omitted, mouse events will be included in the recording. |
| |
| This parameter only has an effect if graphical recording is enabled. If |
| the `recording-path` is not specified, graphical session recording will be |
| disabled, and this parameter will be ignored. |
| |
| `recording-include-keys` |
| : If set to "true", user key events will be included in the recording. The |
| recording can subsequently be passed through the {program}`guaclog` utility |
| to produce a human-readable interpretation of the keys pressed during the |
| session. *This parameter is optional.* If omitted, key events will be not |
| included in the recording. |
| |
| This parameter only has an effect if graphical recording is enabled. If |
| the `recording-path` is not specified, graphical session recording will be |
| disabled, and this parameter will be ignored. |
| |
| (typescripts)= |
| |
| #### Text session recording (typescripts) |
| |
| The full, raw text content of SSH sessions, including timing information, can |
| be recorded automatically to a specified directory. This recording, also known |
| as a "typescript", will be written to two files within the directory specified |
| by `typescript-path`: {samp}`{NAME}`, which contains the raw text data, and |
| {samp}`{NAME}.timing`, which contains timing information, where `NAME` is the |
| value provided for the `typescript-name` parameter. |
| |
| This format is compatible with the format used by the standard UNIX |
| {command}`script` command, and can be replayed using {command}`scriptreplay` |
| (if installed). For example, to replay a typescript called "`NAME`", you would |
| run: |
| |
| ```console |
| $ scriptreplay NAME.timing NAME |
| ``` |
| |
| :::{important} |
| Guacamole will never overwrite an existing recording. If necessary, a numeric |
| suffix like ".1", ".2", ".3", etc. will be appended to `NAME` to avoid |
| overwriting an existing recording. If even appending a numeric suffix does not |
| help, the session will simply not be recorded. |
| ::: |
| |
| `typescript-path` |
| : The directory in which typescript files should be created. *If a |
| typescript needs to be recorded, this parameter is required.* Specifying |
| this parameter enables typescript recording. If this parameter is omitted, |
| no typescript will be recorded. |
| |
| `create-typescript-path` |
| : If set to "true", the directory specified by the `typescript-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. |
| |
| *This parameter is optional.* By default, the directory specified by the |
| `typescript-path` parameter will not automatically be created, and |
| attempts to record typescripts in a non-existent directory will be logged |
| as errors. |
| |
| This parameter only has an effect if typescript recording is enabled. If |
| the `typescript-path` is not specified, recording of typescripts will be |
| disabled, and this parameter will be ignored. |
| |
| `typescript-name` |
| : The base filename to use when determining the names for the data and |
| timing files of the typescript. *This parameter is optional.* If omitted, |
| the value "typescript" will be used instead. |
| |
| Each typescript consists of two files which are created within the |
| directory specified by `typescript-path`: {samp}`{NAME}`, which contains |
| the raw text data, and {samp}`{NAME}.timing`, which contains timing |
| information, where `NAME` is the value provided for the `typescript-name` |
| parameter. |
| |
| This parameter only has an effect if typescript recording is enabled. If |
| the `typescript-path` is not specified, recording of typescripts will be |
| disabled, and this parameter will be ignored. |
| |
| (terminal-behavior)= |
| |
| #### Controlling terminal behavior |
| |
| In most cases, the default behavior for a terminal works without modification. |
| However, when connecting to certain systems, particularly operating systems |
| other than Linux, the terminal behavior may need to be tweaked to allow it to |
| operate properly. The settings in this section control that behavior. |
| |
| `backspace` |
| : This parameter controls the ASCII code that the backspace key sends to the |
| remote system. Under most circumstances this should not need to be |
| adjusted; however, if, when pressing the backspace key, you see control |
| characters (often either ^? or ^H) instead of seeing the text erased, you |
| may need to adjust this parameter. By default the terminal sends ASCII |
| code 127 (Delete) if this option is not set. |
| |
| `terminal-type` |
| : This parameter sets the terminal emulator type string that is passed to |
| the server. This parameter is optional. If not specified, "`linux`" is used |
| as the terminal emulator type by default. |
| |
| (stdin-pipe)= |
| |
| ##### Providing terminal input directly from JavaScript |
| |
| If Guacamole is being used in part to automate an SSH, telnet, or other |
| terminal session, it can be useful to provide input directly from JavaScript as |
| a raw stream of data, rather than attempting to translate data into keystrokes. |
| This can be done through opening a pipe stream named "STDIN" within the |
| connection using the [`createPipeStream()`](http://guacamole.apache.org/doc/guacamole-common-js/Guacamole.Client.html#createPipeStream) |
| function of [`Guacamole.Client`](http://guacamole.apache.org/doc/guacamole-common-js/Guacamole.Client.html): |
| |
| ```javascript |
| var outputStream = client.createPipeStream('text/plain', 'STDIN'); |
| ``` |
| |
| The resulting [`Guacamole.OutputStream`](http://guacamole.apache.org/doc/guacamole-common-js/Guacamole.OutputStream.html) |
| can then be used to stream data directly to the input of the terminal session, |
| as if typed by the user: |
| |
| ```javascript |
| // Wrap output stream in writer |
| var writer = new Guacamole.StringWriter(outputStream); |
| |
| // Send text |
| writer.sendText("hello"); |
| |
| // Send more text |
| writer.sendText("world"); |
| |
| // Close writer and stream |
| writer.sendEnd(); |
| ``` |
| |
| (terminal-display-settings)= |
| |
| #### Terminal display settings |
| |
| Guacamole's terminal emulator (used by SSH, telnet, and Kubernetes support) |
| provides options for configuring the font used and its size. In this case, *the |
| chosen font must be installed on the server*, as it is the server that will |
| handle rendering of characters to the terminal display, not the client. |
| |
| `color-scheme` |
| : The color scheme to use for the terminal session. It consists of a |
| semicolon-separated series of name-value pairs. Each name-value pair is |
| separated by a colon and assigns a value to a color in the terminal |
| emulator palette. For example, to use blue text on white background by |
| default, and change the red color to a purple shade, you would specify: |
| |
| ``` |
| foreground: rgb:00/00/ff; |
| background: rgb:ff/ff/ff; |
| color9: rgb:80/00/80 |
| ``` |
| |
| This format is similar to the color configuration format used by Xterm, so |
| Xterm color configurations can be easily adapted for Guacamole. This |
| parameter is optional. If not specified, Guacamole will render text as |
| gray over a black background. |
| |
| Possible color names are: |
| |
| `foreground` |
| : Set the default foreground color. |
| |
| `background` |
| : Set the default background color. |
| |
| {samp}`color{N}` |
| : Set the color at index `N` on the Xterm 256-color palette. For example, |
| `color9` refers to the red color. |
| |
| Possible color values are: |
| |
| {samp}`rgb:{RR}/{GG}/{BB}` |
| : Use the specified color in RGB format, with each component in |
| hexadecimal. For example, `rgb:ff/00/00` specifies the color red. Note |
| that each hexadecimal component can be one to four digits, but the |
| effective values are always zero-extended or truncated to two digits; |
| for example, `rgb:f/8/0`, `rgb:f0/80/00`, and `rgb:f0f/808/00f` all |
| refer to the same effective color. |
| |
| {samp}`color{N}` |
| : Use the color currently assigned to index `N` on the Xterm 256-color |
| palette. For example, `color9` specifies the current red color. Note |
| that the color value is used rather than the color reference, so if |
| `color9` is changed later in the color scheme configuration, that new |
| color will not be reflected in this assignment. |
| |
| For backward compatibility, Guacamole will also accept four special values as |
| the color scheme parameter: |
| |
| `black-white` |
| : Black text over a white background. |
| |
| `gray-black` |
| : Gray text over a black background. This is the default color scheme. |
| |
| `green-black` |
| : Green text over a black background. |
| |
| `white-black` |
| : White text over a black background. |
| |
| `font-name` |
| : The name of the font to use. This parameter is optional. If not specified, |
| the default of "monospace" will be used instead. |
| |
| `font-size` |
| : The size of the font to use, in points. This parameter is optional. If not |
| specified, the default of 12 will be used instead. |
| |
| `scrollback` |
| : The maximum number of rows to allow within the terminal scrollback buffer. |
| This parameter is optional. If not specified, the scrollback buffer will |
| be limited to a maximum of 1000 rows. |
| |
| (wake-on-lan)= |
| |
| #### Wake-on-LAN |
| |
| Guacamole implements the support to send a "magic wake-on-lan packet" to a |
| remote host prior to attempting to establish a connection with the host. The |
| below parameters control the behavior of this functionality, which is disabled |
| by default. |
| |
| :::{important} |
| There are several factors that can impact the ability of Wake-on-LAN (WoL) to |
| function correctly, many of which are outside the scope of Guacamole |
| configuration. If you are configuring WoL within Guacamole you should also be |
| familiar with the other components that need to be configured in order for it |
| to function correctly. |
| ::: |
| |
| `wol-send-packet` |
| : If set to "true", Guacamole will attempt to send the Wake-On-LAN packet |
| prior to establishing a connection. This parameter is optional. By |
| default, Guacamole will not send the WoL packet. Enabling this option |
| requires that the `wol-mac-addr` parameter also be configured, otherwise |
| the WoL packet will not be sent. |
| |
| `wol-mac-addr` |
| : This parameter configures the MAC address that Guacamole will use in the |
| magic WoL packet to attempt to wake the remote system. If |
| `wol-send-packet` is enabled, this parameter is required or else the WoL |
| packet will not be sent. |
| |
| `wol-broadcast-addr` |
| : This parameter configures the IPv4 broadcast address or IPv6 multicast |
| address that Guacamole will send the WoL packet to in order to wake the |
| host. This parameter is optional. If no value is provided, the default |
| local IPv4 broadcast address (255.255.255.255) will be used. |
| |
| `wol-udp-port` |
| : This parameter configures the UDP port that will be set in the WoL packet. |
| In most cases the UDP port isn't processed by the system that will be |
| woken up; however, there are certain cases where it is useful for the port |
| to be set, as in situations where a router is listening for the packet and |
| can make routing decisions depending upon the port that is used. If not |
| configured the default UDP port 9 will be used. |
| |
| `wol-wait-time` |
| : By default after the WoL packet is sent Guacamole will attempt immediately |
| to connect to the remote host. It may be desirable in certain scenarios to |
| have Guacamole wait before the initial connection in order to give the |
| remote system time to boot. Setting this parameter to a positive value |
| will cause Guacamole to wait the specified number of seconds before |
| attempting the initial connection. This parameter is optional. |
| |
| (parameter-tokens)= |
| |
| ### Parameter tokens |
| |
| The values of connection parameters can contain "tokens" which will be replaced |
| by Guacamole when used. These tokens allow the values of connection parameters |
| to vary dynamically by the user using the connection, and provide a simple |
| means of forwarding authentication information without storing that information |
| in the connection configuration itself, so long as the remote desktop |
| connection uses the same credentials as Guacamole. |
| |
| Each token is of the form {samp}`$\{{TOKEN_NAME}\}` or |
| {samp}`$\{{TOKEN_NAME}:{MODIFIER}\}`, where `TOKEN_NAME` is some descriptive |
| name for the value the token represents, and the optional `MODIFIER` is one of |
| the modifiers documented below to dynamically modify the token. Tokens with no |
| corresponding value will never be replaced, but should you need such text |
| within your connection parameters, and wish to guarantee that this text will |
| not be replaced with a token value, you can escape the token by adding an |
| additional leading "$", as in "{samp}`$$\{{TOKEN_NAME}\}`". |
| |
| `${GUAC_USERNAME}` |
| : The username of the current Guacamole user. When a user accesses a |
| connection, this token will be dynamically replaced with the username they |
| provided when logging in to Guacamole. |
| |
| `${GUAC_PASSWORD}` |
| : The password of the current Guacamole user. When a user accesses a |
| connection, this token will be dynamically replaced with the password they |
| used when logging in to Guacamole. |
| |
| `${GUAC_CLIENT_ADDRESS}` |
| : The IPv4 or IPv6 address of the current Guacamole user. This will be the |
| address of the client side of the HTTP connection to the Guacamole server |
| at the time the current user logged in. |
| |
| `${GUAC_CLIENT_HOSTNAME}` |
| : The hostname of the current Guacamole user. This will be the hostname of |
| the client side of the HTTP connection to the Guacamole server at the time |
| the current user logged in. If no such hostname can be determined, the |
| IPv4 or IPv6 address will be used instead, and this token will be |
| equivalent to `${GUAC_CLIENT_ADDRESS}`. |
| |
| `${GUAC_DATE}` |
| : The current date in the local time zone of the Guacamole server. This will |
| be written in "YYYYMMDD" format, where "YYYY" is the year, "MM" is the |
| month number, and "DD" is the day of the month, all zero-padded. When a |
| user accesses a connection, this token will be dynamically replaced with |
| the date that the connection began. |
| |
| `${GUAC_TIME}` |
| : The current time in the local time zone of the Guacamole server. This will |
| be written in "HHMMSS" format, where "HH" is hours in 24-hour time, "MM" |
| is minutes, and "SS" is seconds, all zero-padded. When a user accesses a |
| connection, this token will be dynamically replaced with the time that the |
| connection began. |
| |
| Note that these tokens are replaced dynamically each time a connection is used. |
| If two different users access the same connection at the same time, both users |
| will be connected independently of each other using different sets of |
| connection parameters. |
| |
| #### Token modifiers |
| |
| At times it can be useful to use the value provided by a token, but with slight |
| modifications. These modifers are optionally specified at the end of the token, |
| separated from the token name by a colon (`:`), in the format |
| {samp}`$\{{TOKEN_NAME}:{MODIFIER}\}`. The following modifiers are currently |
| supported: |
| |
| `LOWER` |
| : Convert the entire value of the token to lower-case. This can be useful in |
| situations where users log in to Guacamole with a mixed-case username, but |
| a remote system requires the username be lower-case. |
| |
| `UPPER` |
| : Convert the entire value of the token to upper-case. |
| |
| (extension-tokens)= |
| |
| #### Extension-specific tokens |
| |
| Each extension can also implement its own arbitrary tokens that can |
| dynamically fill in values provided by the extension. Within these |
| extensions, attribute names are canonicalized into a standard format |
| that consists of all capital letters separated by underscores. |
| |
| (cas-tokens)= |
| |
| ##### CAS Extension Tokens |
| |
| The CAS extension will read attributes provided by the CAS server when a user |
| is authenticated and will make those attributes available as tokens. The CAS |
| server must be specifically configured to release certain attributes to the |
| client (Guacamole), and configuration of that is outside the scope of this |
| document. Any attribute that the CAS server is configured to release should be |
| available to Guacamole as a token for use within a connection. The token name |
| will be prepended with the `CAS_` prefix. A CAS server configured to release |
| attributes `firstname`, `lastname`, `email`, and `mobile` would produce the |
| following tokens: |
| |
| * `${CAS_FIRSTNAME}` |
| * `${CAS_LASTNAME}` |
| * `${CAS_EMAIL}` |
| * `${CAS_MOBILE}` |
| |
| (ldap-tokens)= |
| |
| ##### LDAP Extension Tokens |
| |
| The LDAP extension will read user attributes provided by the LDAP server and |
| specified in the `guacamole.properties` file. The attributes retrieved for a |
| user are configured using the `ldap-user-attributes` parameter. The user must |
| be able to read the attribute values from their own LDAP object. The token name |
| will be prepended with the `LDAP_` prefix. As an example, configuring the |
| following line in `guacamole.properties`: |
| |
| ``` |
| ldap-user-attributes: cn, givenName, sn, mobile, mail |
| ``` |
| |
| will produce the below tokens that can be used in connection parameters: |
| |
| * `${LDAP_CN}` |
| * `${LDAP_GIVENNAME}` |
| * `${LDAP_SN}` |
| * `${LDAP_MOBILE}` |
| * `${LDAP_MAIL}` |
| |
| ### Parameter prompting |
| |
| In certain situations Guacamole may determine that additional information is |
| required in order to successfully open or continue a connection. In these |
| scenarios guacd will send an instruction back to the client to retrieve that |
| information, which will result in the user being prompted for those additional |
| parameters. |
| |
| Currently the only parameters that will trigger this prompt to the user are |
| authentication requests for the RDP and VNC protocols where authenticators were |
| not provided as part of the connection configuration. |
| |
| :::{important} |
| It is important to note that requests for parameters will only be generated in |
| the case where that information has not already been provided as part of the |
| connection. **The user will never be asked for parameters that replace or |
| override connection parameters where values have been provided**, including |
| authentication information. |
| |
| For example, if the configuration of a connection to a RDP server specifies a |
| username and password, and that username or password is incorrect and results |
| in an authentication failure, Guacamole will not prompt the user for additional |
| credentials. For RDP servers where NLA is enforced, this will result in a |
| connection failure. Other RDP servers may behave differently and give the user |
| the ability to try other credentials, but this is outside the control of |
| Guacamole - **Guacamole will not override pre-configured authentication values |
| with input from the user**. |
| ::: |
| |
| (guacd.conf)= |
| |
| Configuring guacd |
| ----------------- |
| |
| ### `guacd.conf` |
| |
| guacd is configured with a configuration file called `guacd.conf`, by |
| default located in `/etc/guacamole`. This file follows a simple, |
| INI-like format: |
| |
| ``` |
| # |
| # guacd configuration file |
| # |
| |
| [daemon] |
| |
| pid_file = /var/run/guacd.pid |
| log_level = info |
| |
| [server] |
| |
| bind_host = localhost |
| bind_port = 4822 |
| |
| # |
| # The following parameters are valid only if |
| # guacd was built with SSL support. |
| # |
| |
| [ssl] |
| |
| server_certificate = /etc/ssl/certs/guacd.crt |
| server_key = /etc/ssl/private/guacd.key |
| ``` |
| |
| Configuration options are given as parameter/value pairs, where the name of the |
| parameter is specified on the left side of an "`=`", and the value is specified |
| on the right. Each parameter must occur within a proper section, indicated by a |
| section name within brackets. The names of these sections are important; it is |
| the pairing of a section name with a parameter that constitutes the |
| fully-qualified parameter being set. |
| |
| For the sake of documentation and readability, comments can be added anywhere |
| within guacd.conf using "`#`" symbols. All text following a "`#`" until |
| end-of-line will be ignored. |
| |
| If you need to include special characters within the value of a parameter, such |
| as whitespace or any of the above symbols, you can do so by placing the |
| parameter within double quotes: |
| |
| ``` |
| [ssl] |
| |
| # Whitespace is legal within double quotes ... |
| server_certificate = "/etc/ssl/my certs/guacd.crt" |
| |
| # ... as are other special symbols |
| server_key = "/etc/ssl/#private/guacd.key" |
| ``` |
| |
| Note that even within double quotes, some characters still have special |
| meaning, such as the double quote itself or newline characters. If you need to |
| include these, they must be "escaped" with a backslash: |
| |
| ``` |
| # Parameter value containing a double quote |
| parameter = "some\"value" |
| |
| # Parameter value containing newline characters |
| parameter2 = "line1\ |
| line2\ |
| line3" |
| |
| # Parameter value containing backslashes |
| parameter3 = "c:\\windows\\path\\to\\file.txt" |
| ``` |
| |
| Don't worry too much about the more complex formatting examples - they are only |
| rarely necessary, and guacd will complain with parsing errors if the |
| configuration file is somehow invalid. To ensure parameter values are entered |
| correctly, just follow the following guidelines: |
| |
| 1. If the value contains no special characters, just include it as-is. |
| |
| 2. If the value contains any special characters (whitespace, newlines, `#`, |
| `\`, or `"`), enclose the entire value within double quotes. |
| |
| 3. If the value is enclosed within double quotes, escape newlines, `\`, and `"` |
| with a backslash. |
| |
| (guacd-conf-daemon)= |
| |
| #### `[daemon]` section |
| |
| `pid_file` |
| : The name of the file in which the PID of the main guacd process should be |
| written. This is mainly needed for startup scripts, which need to monitor |
| the state of guacd, killing it if necessary. If this parameter is |
| specified, the user running guacd must have sufficient permissions to |
| create or modify the specified file, or startup will fail. |
| |
| `log_level` |
| : The maximum level at which guacd will log messages to syslog and, if |
| running in the foreground, the console. If omitted, the default level of |
| `info` will be used. |
| |
| Legal values are `trace`, `debug`, `info`, `warning`, and `error`. |
| |
| (guacd-conf-server)= |
| |
| #### `[server]` section |
| |
| `bind_host` |
| : The host that guacd should bind to when listening for connections. If |
| unspecified, guacd will bind to localhost, and only connections from |
| within the server hosting guacd will succeed. |
| |
| `bind_port` |
| : The port that guacd should bind to when listening for connections. If |
| unspecified, port 4822 will be used. |
| |
| (guacd-conf-ssl)= |
| |
| #### `[ssl]` section |
| |
| `server_certificate` |
| : The filename of the certificate to use for SSL encryption of the Guacamole |
| protocol. If this option is specified, SSL encryption will be enabled, and |
| the Guacamole web application will need to be configured within |
| `guacamole.properties` to use SSL as well. |
| |
| `server_key` |
| : The filename of the private key to use for SSL encryption of the Guacamole |
| protocol. If this option is specified, SSL encryption will be enabled, and |
| the Guacamole web application will need to be configured within |
| `guacamole.properties` to use SSL as well. |
| |
| ### Command-line options |
| |
| You can also affect the configuration of guacd with command-line |
| options. If given, these options take precendence over the system-wide |
| configuration file: |
| |
| {samp}`-b {HOST}` |
| : Changes the host or address that guacd listens on. |
| |
| This corresponds to the `bind_host` parameter within the [`[server]` section |
| of `guacd.conf`](guacd-conf-server). |
| |
| {samp}`-l {PORT}` |
| : Changes the port that guacd listens on (the default is port 4822). |
| |
| This corresponds to the `bind_port` parameter within the [`[server]` section |
| of `guacd.conf`](guacd-conf-server). |
| |
| {samp}`-p {PIDFILE}` |
| : Causes guacd to write the PID of the daemon process to the specified file. |
| This is useful for init scripts and is used by the provided init script. |
| |
| This corresponds to the `pid_file` parameter within the [`[daemon]` section |
| of `guacd.conf`](guacd-conf-daemon). |
| |
| {samp}`-L {LEVEL}` |
| : Sets the maximum level at which guacd will log messages to syslog and, if |
| running in the foreground, the console. Legal values are `trace`, `debug`, |
| `info`, `warning`, and `error`. The default value is `info`. |
| |
| This corresponds to the `log_level` parameter within the [`[daemon]` section |
| of `guacd.conf`](guacd-conf-daemon). |
| |
| `-f` |
| : Causes guacd to run in the foreground, rather than automatically forking |
| into the background. |
| |
| If guacd was built with support for SSL, data sent via the Guacamole protocol |
| can be encrypted with SSL if an SSL certificate and private key are given with |
| the following options: |
| |
| {samp}`-C {CERTIFICATE}` |
| : The filename of the certificate to use for SSL encryption of the Guacamole |
| protocol. If this option is specified, SSL encryption will be enabled, and |
| the Guacamole web application will need to be configured within |
| `guacamole.properties` to use SSL as well. |
| |
| This corresponds to the `server_certificate` parameter within the [`[ssl]` |
| section of `guacd.conf`](guacd-conf-ssl). |
| |
| {samp}`-K {KEY}` |
| : The filename of the private key to use for SSL encryption of the Guacamole |
| protocol. If this option is specified, SSL encryption will be enabled, and |
| the Guacamole web application will need to be configured within |
| `guacamole.properties` to use SSL as well. |
| |
| This corresponds to the `server_key` parameter within the [`[ssl]` section of |
| `guacd.conf`](guacd-conf-ssl). |
| |