released: false title: 1.6.0 date: 2024-05-02 14:05:35 -0700 summary: > Improved rendering performance, improved Docker support, configurable case sensitivity, batch connection import, support for FreeRDP 3.x and Duo v4.
artifact-url: “https://dist.apache.org/repos/dist/dev/{}” checksum-url: “https://dist.apache.org/repos/dist/dev/{}” download-path: “guacamole/1.6.0-RC1/” checksum-suffixes: “PGP” : “.asc” “SHA-256” : “.sha256”
source-dist: - “source/guacamole-client-1.6.0.tar.gz” - “source/guacamole-server-1.6.0.tar.gz”
binary-dist: - “binary/guacamole-1.6.0.war” - “binary/guacamole-auth-duo-1.6.0.tar.gz” - “binary/guacamole-auth-header-1.6.0.tar.gz” - “binary/guacamole-auth-jdbc-1.6.0.tar.gz” - “binary/guacamole-auth-json-1.6.0.tar.gz” - “binary/guacamole-auth-ldap-1.6.0.tar.gz” - “binary/guacamole-auth-quickconnect-1.6.0.tar.gz” - “binary/guacamole-auth-sso-1.6.0.tar.gz” - “binary/guacamole-auth-totp-1.6.0.tar.gz” - “binary/guacamole-history-recording-storage-1.6.0.tar.gz” - “binary/guacamole-vault-1.6.0.tar.gz”
documentation: “Manual” : “/doc/1.6.0/gug” “guacamole-common” : “/doc/1.6.0/guacamole-common” “guacamole-common-js” : “/doc/1.6.0/guacamole-common-js” “guacamole-ext” : “/doc/1.6.0/guacamole-ext” “libguac” : “/doc/1.6.0/libguac” “libguac-terminal” : “/doc/1.6.0/libguac-terminal”
The 1.6.0 release features improved rendering performance, improved Docker support, configurable case sensitivity, and support for newer upstream library releases like Duo v4 and FreeRDP 3.x. For a full list of all changes in this release, please see the changelog below.
The 1.6.0 release is compatible with older 1.x components. You should upgrade older components to 1.6.0 when possible, however things should continue to work correctly in the interim:
Regardless of inter-component compatibility, there are changes in 1.6.0 which may affect downstream users of Guacamole's APIs. Please see the deprecation / compatibility notes section for more information.
This latest release of Guacamole includes a major rewrite of the established server-side protocol optimizer that has been part of guacd. Combined with corresponding enhancements to the web application, the new rendering pipeline is better able to leverage the server's processing power to increase responsiveness while reducing the required network bandwidth.
Guacamole has nearly always had a built-in optimizer that used cost estimation to rewrite and reorder graphical updates in a more efficient way. The new optimizer builds on that basis, adding real time detection of scrolling/movement, better heuristics for combining/splitting updates, and automatic parallelization of the encoding process:
These improvements have been incorporated into the public API of libguac as guac_display
and have been made without requiring the use of a GPU. Instead, they leverage a pool of worker threads, careful pipelining (to avoid encoding blocking further processing of data), and a 2D variant of Rabin-Karp combined with a purpose-built hash function.
The guacamole/guacamole
Docker image has historically required manual mapping of all environment variables that correspond to the configuration properties used by guacamole.properties
. This is now done automatically for all properties, including any properties defined by third-party extensions. Every property supported by Guacamole is now automatically pulled from an environment variable within the provided Docker image.
For cases where third-party extensions are used, the GUACAMOLE_HOME
environment variable supported by the Docker image has been made more flexible, with the standard /etc/guacamole
usable by default without requiring GUACAMOLE_HOME
to be set at all.
Builds of the Docker image have also been expanded to support ARM CPUs, not just x86.
For cases where otherwise unprivileged users must see the usage history for Guacamole without having full system-level administration permissions, a new AUDIT
permission has been added to cover read-only access to history. Granting this permission to a user allows them to see past usage without implying any other permissions.
To allow administrators to more easily see where interesting parts of session recordings might be, the in-browser session recording player now includes a histogram above the playback timeline/bar that represents areas of greater activity with peaks. If the recording contains key events, an additional histogram that shows areas of keyboard activity is also included.
Guacamole's administrative interface now includes an “Import” button within the “Connections” tab. Users with permission to create connections within Guacamole can now use this button to import a batch of connections from CSV, JSON, or YAML files that conform to the documented format, rather than manually create each connection.
Whether Guacamole handles usernames and group names in a case-sensitive or manner is now configurable globally using the case-sensitivity
property (or CASE_SENSITIVITY
environment variable). This is particularly aimed at cases where multiple authentication providers are involved that do not agree on whether usernames are case-sensitive, such as when combining LDAP (typically case-insensitive) with a PostgreSQL database (case-sensitive).
For sake of compatibility and not changing established behavior, Guacamole defaults to case-sensitive username and group name handling.
Similar to the access restrictions provided by the database support, a separate extension is now provided that allows time-based and host-based restrictions to be enforced on users, user groups, connections, and balancing connection groups. These restrictions can be used to determine the conditions required to log into Guacamole or to limit when specific connections may be accessed.
Duo ceased supporting the previous version of their Web SDK (v2) and implementations are required to migrate to the newer version (v4) or request continued access to v2 on a limited basis. Guacamole has now migrated to v4 of the Duo Web SDK.
This new version of Duo's service is fundamentally incompatible with Duo v2 and uses different configuration options. Users that have been using Guacamole with Duo by requesting continued access to v2 will need to move forward with switching to v4 and migrating their configuration. If necessary, it is possible to continue using the old version of the Duo extension to continue using Duo v2 until migration is possible.
To better serve cases where private data may be copied into the clipboard, the contents of the clipboard editor in the Guacamole menu are now hidden by default. Clicking the clipboard editor reveals its contents, which will remain visible until the Guacamole menu is closed.
The guacamole-server build now supports FreeRDP 3.x in addition to FreeRDP 2.x. While the FreeRDP 3.x release is incompatible with 2.x, it is not so different that support for 2.x needed to be dropped, and support for both is being maintained.
Each 1.x release of Apache Guacamole should be compatible with components of older 1.x releases. This compatibility is intended at the Guacamole protocol level and at the extension level, but not necessarily at the API level. This means:
As of 1.6.0, the following changes have been made which affect compatibility with past releases:
The new version of Duo's service uses different underlying mechanisms and requires different configuration options. If using Duo, you will need to take manual steps to update your configuration.
If you have been using the previous version of Guacamole's Duo integration, you can continue to use that integration until you can safely migrate.
When ready to migrate, please read through the updated documentation for using Duo with Guacamole. You will need to switch to new configuration options, and the proper values for the new options will need to be pulled from Duo's administrative interface. Do not rely on simply renaming the previous options without first checking whether the old values are still valid.
AUDIT
permission in database schemaThe new audit-specific permission requires a new entry in the guacamole_system_permission_type
enum used by the various Guacamole database implementations, which requires schema changes. To upgrade your database to the latest version, run the relevant upgrade-pre-1.6.0.sql
script against your database.
Schema upgrade scripts are included for each database within the guacamole-auth-jdbc-1.6.0.tar.gz
archive provided above in the list of downloads for this release.
The --link
flag previously supported by Docker is considered deprecated. Guacamole's Docker documentation has been updated to reflect this, and the environment variables that result from using --link
will now produce deprecation warnings. If you have been using Docker links, you should migrate away from that usage when possible.
GUACD_LOG_LEVEL
and LOGBACK_LEVEL
environment variablesThe environment variables used by the guacamole/guacd
and guacamole/guacamole
images were previously inconsistent with each other (GUACD_LOG_LEVEL
and LOGBACK_LEVEL
respectively). These variables are now both, simply, LOG_LEVEL
. Continuing to use the old variables will produce deprecation warnings.
Credentials
getters/setters related to HttpServletRequest
As it is not reliable to attempt to access an HttpServletRequest
outside the scope of the handling of that actual request, the getRequest()
and setRequest()
functions of the Credentials
object have been deprecated. Also deprecated are the setters that directly relate to HTTP request details: setRemoteAddress()
, setRemoteHostname()
, and setSession()
.
Extensions that use these functions of the Credentials
object should migrate to the getRequestDetails()
and setRequestDetails()
when possible.
guac_protocol_send_sync()
now requires an additional parameterRendered frames may sometimes be combined into a single frame to compensate for any client-side lag, such as a browser being unable to process a frame as quickly as it was generated. To allow remote frame rate to be tracked in addition to the client frame rate, a new parameter has been added to guac_protocol_send_sync()
which accepts the logical number of frames that went into the current frame.
guac_recording_create()
and guac_terminal_create_typescript()
now require an additional parameterTo serve use cases where session recordings or typescripts need to be written to files that already exist, such as a named pipe or FIFO, the guac_recording_create()
and guac_terminal_create_typescript()
functions have been updated to require an additional parameter dictating whether this is permitted. Previously, attempting to write to an existing file would result in a numeric suffix being appended to the filename to resolve the filename collision.
guac_client
structure size changeInternal members of the guac_client
structure have changed, affecting its overall size and offsets of established, non-internal structure members.
All code using guac_client
will need to be recompiled to be compatible.
guac_socket
structure size changeInternal members of the guac_socket
structure have changed, affecting its overall size. Offsets of established, non-internal structure members are not affected.
It is unlikely that any external code manually allocates instances of this structure and passes those instances back to libguac, but any such code would need to be rebuilt to be compatible.