blob: 1d9e879143e74628790bc85f85cb5957372a486c [file] [log] [blame]
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" href="/styles/main.css?s=1714581448">
<link rel="icon" type="image/svg+xml" href="/images/logos/guac-classic-logo.svg"/>
<link rel="icon" type="image/png" href="/images/logos/guac-classic-logo-64.png"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, target-densitydpi=device-dpi"/>
<meta charset="UTF-8"/>
<title>Apache Guacamole™: 1.4.0</title>
</head>
<body class="">
<!-- Header -->
<div id="header">
<div class="readable-content">
<h1><a href="/">Apache Guacamole™</a></h1>
<ul id="navigation" class="menu">
<li>
<a href="/releases/"
class="releases"
>Release Archives</a>
</li>
<li class="dropdown">
<a class="dropdown-toggle "
href="#">Documentation</a>
<ul class="dropdown-menu">
<li>
<a href="/faq/"
>FAQ</a>
</li>
<li>
<a href="/api-documentation/"
>API / Development</a>
</li>
<li>
<a href="/doc/gug/"
>Guacamole Manual</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle "
href="#">Community</a>
<ul class="dropdown-menu">
<li>
<a href="/open-source/"
>Contributing to Guacamole</a>
</li>
<li>
<a href="/support/#mailing-lists"
>Mailing Lists</a>
</li>
<li>
<a href="https://issues.apache.org/jira/browse/GUACAMOLE/"
>Bug/Issue Tracker</a>
</li>
<li>
<a href="https://github.com/search?utf8=%E2%9C%93&q=repo%3Aapache%2Fguacamole-client+repo%3Aapache%2Fguacamole-server+repo%3Aapache%2Fguacamole-manual+repo%3Aapache%2Fguacamole-website&type=repositories&ref=searchresults"
>Source Code</a>
</li>
</ul>
</li>
<li>
<a href="/security/"
>Security Reports</a>
</li>
<li class="dropdown">
<a class="dropdown-toggle "
href="#">Support</a>
<ul class="dropdown-menu">
<li>
<a href="/support/#mailing-lists"
>Mailing Lists</a>
</li>
<li>
<a href="https://issues.apache.org/jira/browse/GUACAMOLE/"
>Bug/Issue Tracker</a>
</li>
<li>
<a href="/support/#commercial-support"
>Commercial Support</a>
</li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle apache"
href="#">ASF</a>
<ul class="dropdown-menu">
<li>
<a href="http://www.apache.org/"
>ASF Homepage</a>
</li>
<li>
<a href="http://www.apache.org/licenses/"
>License</a>
</li>
<li>
<a href="http://www.apache.org/foundation/thanks.html"
>Thanks</a>
</li>
<li>
<a href="http://www.apache.org/foundation/sponsorship.html"
>Sponsorship</a>
</li>
<li>
<a href="http://www.apache.org/foundation/policies/conduct.html"
>Code of Conduct</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- Content -->
<div class="fullwidth-content">
<h1 class="title">
Apache Guacamole 1.4.0
<span class="release-type">
(Archived)
</span>
</h1>
<div class="readable-content">
<div class="note">
<p>Apache Guacamole 1.4.0 is an archived release, and was
originally released on 2022-01-01. <strong>The
latest release of Apache Guacamole is <a href="/releases/1.5.5/">1.5.5</a>.</strong></p>
</div>
<div id="links">
<h2>Release documentation</h2>
<ul>
<li><a href="/doc/1.4.0/gug">Manual</a></li>
<li><a href="/doc/1.4.0/guacamole-common">guacamole-common</a></li>
<li><a href="/doc/1.4.0/guacamole-common-js">guacamole-common-js</a></li>
<li><a href="/doc/1.4.0/guacamole-ext">guacamole-ext</a></li>
<li><a href="/doc/1.4.0/libguac">libguac</a></li>
</ul>
</div>
<p>Apache Guacamole is split into two subprojects: "guacamole-client", the
HTML5 web application which serves the Guacamole client to users, and
"guacamole-server", the remote desktop proxy which the web application
communicates with. The source code for each of these may be downloaded
below.</p>
<p>You <strong>must</strong> <a href="https://www.apache.org/info/verification.html">
verify the integrity of any downloaded files</a> using the OpenPGP signatures
we provide with each release. The signatures should be verified against the
<a href="https://downloads.apache.org/guacamole/KEYS">KEYS</a>
file, which contains the OpenPGP keys of Apache Guacamole's Release Managers.
Checksums of each released file are also provided.</p>
<!-- Source archives -->
<div class="release-downloads">
<table>
<tr>
<th>Filename</th>
<th>Signatures / Hashes</th>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/source/guacamole-client-1.4.0.tar.gz">guacamole-client-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/source/guacamole-client-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/source/guacamole-client-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz">guacamole-server-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/source/guacamole-server-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
</table>
</div>
<p>If you do not wish to build Apache Guacamole entirely from source, pre-built
versions of the web application (.war) and all extensions are provided here in
binary form for convenience. <strong>Please note that guacamole-server must
still be built and installed from source.</strong></p>
<!-- All binaries -->
<div class="release-downloads">
<table>
<tr>
<th>Filename</th>
<th>Signatures / Hashes</th>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-1.4.0.war">guacamole-1.4.0.war</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-1.4.0.war.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-1.4.0.war.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-duo-1.4.0.tar.gz">guacamole-auth-duo-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-duo-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-duo-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-header-1.4.0.tar.gz">guacamole-auth-header-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-header-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-header-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz">guacamole-auth-jdbc-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-jdbc-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-json-1.4.0.tar.gz">guacamole-auth-json-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-json-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-json-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-ldap-1.4.0.tar.gz">guacamole-auth-ldap-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-ldap-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-ldap-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-quickconnect-1.4.0.tar.gz">guacamole-auth-quickconnect-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-quickconnect-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-quickconnect-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-sso-1.4.0.tar.gz">guacamole-auth-sso-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-sso-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-sso-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
<tr>
<td class="filename"><a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-totp-1.4.0.tar.gz">guacamole-auth-totp-1.4.0.tar.gz</a></td>
<td class="signatures">
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-totp-1.4.0.tar.gz.asc">PGP</a>
<a href="https://archive.apache.org/dist/guacamole/1.4.0/binary/guacamole-auth-totp-1.4.0.tar.gz.sha256">SHA-256</a>
</td>
</tr>
</table>
</div>
<!-- Release notes -->
<div id="release-notes">
<h1>Release notes</h1>
<p>The 1.4.0 release features support for connection tiling, broadcasting keyboard
events across multiple connections, and authentication with encrypted and
signed JSON. Established support for single sign-on has been improved,
multi-touch support for RDP has been added, and problems with audio input
support for RDP have been corrected. For a full list of all changes in this
release, please see the <a href="#changelog">changelog</a>.</p>
<p><strong>The 1.4.0 release is compatible with older 1.x components.</strong> You should
upgrade older components to 1.4.0 when possible, however things should continue
to work correctly in the interim:</p>
<ul>
<li>Extensions written for older 1.x releases can be used by 1.4.0.</li>
<li>Components written for the version of the Guacamole protocol used by older
1.x releases can be used with components of the 1.4.0 release.</li>
</ul>
<p>Regardless of inter-component compatibility, <strong>there are changes in 1.4.0 which
may affect downstream users of Guacamole’s APIs</strong>. Please see the <a href="#deprecation--compatibility-notes">deprecation
/ compatibility notes</a> section for more
information.</p>
<h2 id="connection-tiling-and-keyboard-broadcasting">Connection tiling and keyboard broadcasting</h2>
<p><a href="/doc/1.4.0/gug/using-guacamole.html#switching-and-tiling-connections">Multiple connections can now be displayed simultaneously within the same
browser tab</a>,
automatically arranged in an even, tiled layout:</p>
<p><img src="/doc/1.4.0/gug/_images/client-tiled.png" alt="Multiple client displays in a tiled arrangement" /></p>
<p>The currently-focused connection is indicated by a blue border, and the user
can choose to focus any number of these tiled connections at the same time.
<strong>If multiple connections are focused, keyboard interaction is broadcast across
each of those connections.</strong></p>
<h2 id="major-fixes-to-rdp-audio-input-support">Major fixes to RDP audio input support</h2>
<p>Depending on the application in use within the remote desktop, Guacamole’s
audio input support for RDP suffered from quality issues related to variability
in audio buffer behavior and size. If the audio backend used by the application
could not adjust for occasional bursts of audio packets, any audio packets
received by the remote desktop that exceeded the remaining buffer space would
be dropped, resulting in audible clicks/pops and faster-than-expected playback.</p>
<p>This has now been corrected. Guacamole will automatically throttle the amount
of data it sends to the remote desktop to avoid running out of remote buffer
space, ensuring the audio received by applications within the remote desktop is
identical to the audio received by Guacamole via the browser.</p>
<h2 id="rdp-support-for-passing-through-multi-touch-events">RDP support for passing through multi-touch events</h2>
<p>In addition to Guacamole’s established support for emulating a mouse on touch
devices, multi-touch events may now be passed through to the remote desktop
server when supported and enabled.</p>
<p>RDP supports multi-touch through its “RDPEI” channel. <a href="/doc/1.4.0/gug/configuring-guacamole.html#device-redirection">If touch is enabled on a
Guacamole RDP connection</a>,
touch interaction with the Guacamole display will directly affect touch-enabled
applications within the remote desktop session rather than being turned into
mouse events.</p>
<h2 id="support-for-secondary-sso-providers">Support for secondary SSO providers</h2>
<p>Guacamole’s support for single sign-on has historically been all-or-nothing,
with either <em>all</em> users using SSO to authenticate or none at all. This is no
longer the case: Guacamole may now be configured to allow normal
username/password authentication in addition to SSO, and multiple SSO providers
may be used at the same time.</p>
<p>Whether an SSO authentication extension automatically takes effect for all
users depends on whether that extension has priority, which can now be defined
using <a href="/doc/1.4.0/gug/configuring-guacamole.html#guacamole-properties">the <code class="language-plaintext highlighter-rouge">extension-priority</code> property</a>.
For example, to automatically require SAML for all users, you would give the
SAML extension priority above all others:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>extension-priority: saml
</code></pre></div></div>
<p>Or, to allow username/password authentication and simply provide the option for
users to use SAML, you would ensure that other extensions have priority:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>extension-priority: *, saml
</code></pre></div></div>
<p>More information on <a href="/doc/1.4.0/gug/configuring-guacamole.html#guacamole-properties">using the <code class="language-plaintext highlighter-rouge">extension-priority</code> property</a>
and controlling the behavior of the supported SSO extensions can be found in
the Guacamole manual:</p>
<ul>
<li><a href="/doc/1.4.0/gug/cas-auth.html">CAS Authentication</a></li>
<li><a href="/doc/1.4.0/gug/openid-auth.html">OpenID Connect Authentication</a></li>
<li><a href="/doc/1.4.0/gug/saml-auth.html">SAML Authentication</a></li>
</ul>
<h2 id="support-for-authentication-with-encrypted-signed-json">Support for authentication with encrypted, signed JSON</h2>
<p>The “guacamole-auth-json” authentication extension, <a href="https://github.com/glyptodon/guacamole-auth-json">formerly a third-party
project maintained by Glyptodon</a>,
has now been brought into Apache Guacamole as one of the project’s own
extensions.</p>
<p>guacamole-auth-json allows external software to automatically authenticate and
authorize users with an encrypted and signed JSON document. As long as the
received JSON has not expired and was encrypted and signed with the correct
key, it is accepted as sufficient verification that the user is authorized to
access the resources described by that JSON.</p>
<p>For more information, see the <a href="/doc/1.4.0/gug/json-auth.html">documentation covering guacamole-auth-json in
the Guacamole manual</a>.</p>
<h1 id="changelog">Changelog</h1>
<h3 id="user-interface--platform">User interface / platform</h3>
<ul>
<li>Control caching of extension JS/CSS (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-275">GUACAMOLE-275</a>)</li>
<li>Provide option for broadcasting input events across multiple connections (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-724">GUACAMOLE-724</a>)</li>
<li>Migrate away from including auth token within REST API URLs (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-956">GUACAMOLE-956</a>)</li>
<li class="bug">Users/groups with identifiers containing slashes cannot be modified (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1261">GUACAMOLE-1261</a>)</li>
<li>Automatically enforce request size limits independently of reverse proxy (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1298">GUACAMOLE-1298</a>)</li>
<li class="bug">Unexpected errors during session expiration may block further expirations (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1299">GUACAMOLE-1299</a>)</li>
<li class="bug">Connection-specific history sorted in wrong order (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1366">GUACAMOLE-1366</a>)</li>
<li class="bug">Login appears to succeed if the webapp is entirely down (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1384">GUACAMOLE-1384</a>)</li>
</ul>
<h3 id="docker-images">Docker images</h3>
<ul>
<li>Run Tomcat as reduced-privilege user (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-890">GUACAMOLE-890</a>)</li>
<li>Add account auto-create options to Docker (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1128">GUACAMOLE-1128</a>)</li>
<li>Add <code class="language-plaintext highlighter-rouge">OPENID_MAX_TOKEN_VALIDITY</code> environment variable (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1284">GUACAMOLE-1284</a>)</li>
<li class="bug">Correct non-fatal error in handling of OpenID configuration (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1316">GUACAMOLE-1316</a>)</li>
</ul>
<h3 id="authentication-integration-and-storage">Authentication, integration, and storage</h3>
<ul>
<li>Ensure logout works as expected when using SSO (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-680">GUACAMOLE-680</a>)</li>
<li>Allow for clearing TOTP Data in admin interface (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-770">GUACAMOLE-770</a>)</li>
<li class="bug">Non-DN usernames can no longer be used for search bind DN (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-944">GUACAMOLE-944</a>)</li>
<li>Provide configuration for filtering LDAP groups (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-996">GUACAMOLE-996</a>)</li>
<li>Allow QuickConnect extension to block certain parameters (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1025">GUACAMOLE-1025</a>)</li>
<li>Ignore non-relevant attributes for objects returned by LDAP queries (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1130">GUACAMOLE-1130</a>)</li>
<li class="bug">User profile information cleared after TOTP enrollment (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1199">GUACAMOLE-1199</a>)</li>
<li>Move guacamole-auth-json into the main project (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1218">GUACAMOLE-1218</a>)</li>
<li>Allow NAS IP address to be configured (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1252">GUACAMOLE-1252</a>)</li>
<li>Allow login with standard username/password when SSO is enabled (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1364">GUACAMOLE-1364</a>)</li>
<li>Add <code class="language-plaintext highlighter-rouge">user-mapping.xml</code> support for simple hashing with SHA-256 (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1391">GUACAMOLE-1391</a>)</li>
<li>Automatically focus TOTP field (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1397">GUACAMOLE-1397</a>)</li>
<li>Automatically detect MariaDB / MySQL driver (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1407">GUACAMOLE-1407</a>)</li>
</ul>
<h3 id="protocol-support--guacd">Protocol support / guacd</h3>
<ul>
<li class="bug">RDP clipboard uses incorrect newline characters (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-478">GUACAMOLE-478</a>)</li>
<li>Notify connecting client on unrecognized connection ID (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1047">GUACAMOLE-1047</a>)</li>
<li>Support server control instructions during handshake (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1048">GUACAMOLE-1048</a>)</li>
<li class="bug">VNC fails to connect to macOS (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1133">GUACAMOLE-1133</a>)</li>
<li>Add support for connecting to Kubernetes pods using exec (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1174">GUACAMOLE-1174</a>)</li>
<li class="bug">guacd cannot bind to IPv6 addresses (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1190">GUACAMOLE-1190</a>)</li>
<li>Disable caches that FreeRDP no longer considers supported (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1191">GUACAMOLE-1191</a>)</li>
<li class="bug">RDP audio input samples are dropped (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1201">GUACAMOLE-1201</a>)</li>
<li>Add support for RDP touch events (RDPEI) (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1204">GUACAMOLE-1204</a>)</li>
<li class="bug">Backslash not properly escaped in server-generated JSON (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1215">GUACAMOLE-1215</a>)</li>
<li>Add configuration option to specify WOL port (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1245">GUACAMOLE-1245</a>)</li>
<li>Support libuuid (util-linux) in addition to OSSP UUID (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1254">GUACAMOLE-1254</a>)</li>
<li>Correct double-free when built against FreeRDP 2.0.0-rc4 (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1259">GUACAMOLE-1259</a>)</li>
<li class="bug">Double-free may occur upon VNC disconnect (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1263">GUACAMOLE-1263</a>)</li>
<li class="bug">RDP file uploads may (still) be truncated to 32 bits (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1276">GUACAMOLE-1276</a>)</li>
<li class="bug">Legacy RDP encryption may fail with <code class="language-plaintext highlighter-rouge">ERRINFO_DECRYPT_FAILED</code> (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1283">GUACAMOLE-1283</a>)</li>
<li>Add support for forcing lossless compression of graphics (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1302">GUACAMOLE-1302</a>)</li>
<li class="bug"><code class="language-plaintext highlighter-rouge">leave_handler</code> is not correctly set (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1350">GUACAMOLE-1350</a>)</li>
<li>Map “meta” (Windows) key for RDP connections (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1386">GUACAMOLE-1386</a>)</li>
</ul>
<h3 id="internationalization">Internationalization</h3>
<ul>
<li>Update Russian on-screen keyboard to allow input of Latin characters (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1055">GUACAMOLE-1055</a>)</li>
<li>Add Norwegian keymap for RDP (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1064">GUACAMOLE-1064</a>)</li>
<li>Update/improve French translation (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1160">GUACAMOLE-1160</a>)</li>
<li>Add support for Portuguese language (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1207">GUACAMOLE-1207</a>)</li>
<li>Update/improve Japanese translation (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1265">GUACAMOLE-1265</a>)</li>
<li class="bug">Dash and underscore in <code class="language-plaintext highlighter-rouge">fr-be-azerty</code> layout are swapped (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1277">GUACAMOLE-1277</a>)</li>
<li>Add support for Korean language (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1291">GUACAMOLE-1291</a>)</li>
<li class="bug">”/” key in <code class="language-plaintext highlighter-rouge">pt-br-qwerty</code> layout incorrectly recognized as right Shift (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1305">GUACAMOLE-1305</a>)</li>
<li class="bug">Translation key for pending OpenID Connect redirect is mismatched (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1334">GUACAMOLE-1334</a>)</li>
<li>Update/improve Spanish translation (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1339">GUACAMOLE-1339</a>)</li>
</ul>
<h3 id="documentation">Documentation</h3>
<ul>
<li>Document branding process (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-747">GUACAMOLE-747</a>)</li>
<li>Add non-nullable modifiers to JSDoc parameter/return types where appropriate (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-986">GUACAMOLE-986</a>)</li>
<li>Document configuration of <code class="language-plaintext highlighter-rouge">client_max_body_size</code> for Nginx (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1060">GUACAMOLE-1060</a>)</li>
<li class="bug">Typo in documentation of <code class="language-plaintext highlighter-rouge">mimetype</code> parameter (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1185">GUACAMOLE-1185</a>)</li>
<li class="bug">“Verifying” repeatedly misspelled in libguac documentation (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1225">GUACAMOLE-1225</a>)</li>
<li>Migrate guacamole-manual away from DocBook (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1347">GUACAMOLE-1347</a>)</li>
<li class="bug">Usage documentation of <code class="language-plaintext highlighter-rouge">guacNotification</code> directive is incorrect (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1396">GUACAMOLE-1396</a>)</li>
</ul>
<h3 id="general-housekeeping-and-cleanup">General housekeeping and cleanup</h3>
<ul>
<li class="bug">Creation of source .tar.gz fails on platforms with large group IDs (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-503">GUACAMOLE-503</a>)</li>
<li>Update webapp dependencies to latest stable and compatible versions (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-773">GUACAMOLE-773</a>)</li>
<li class="bug">Build fails against libvncclient 0.9.7 (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1227">GUACAMOLE-1227</a>)</li>
<li>Implement <code class="language-plaintext highlighter-rouge">VerifyCertificateEx</code> rather than <code class="language-plaintext highlighter-rouge">VerifyCertificate</code> (FreeRDP 2.3.1) (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1307">GUACAMOLE-1307</a>)</li>
<li class="bug">guacamole-client build fails against newer versions of JDK (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1317">GUACAMOLE-1317</a>)</li>
<li class="bug">Translation files contain unnecessary trailing whitespace (<a href="https://issues.apache.org/jira/browse/GUACAMOLE-1337">GUACAMOLE-1337</a>)</li>
</ul>
<h1 id="deprecation--compatibility-notes">Deprecation / Compatibility notes</h1>
<p>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:</p>
<ul>
<li>Extensions from older 1.x releases should still work in binary form, but may
need code changes before their source will build against a newer version of
guacamole-ext.</li>
<li>Software which uses the Guacamole protocol of an older 1.x release should
still work.</li>
<li>Software which uses libguac from an older 1.x release should still work by
continuing to use the libguac from that release, as newer versions of
libguac may not be API/ABI compatible. In the case of third-party protocol
support plugins for guacd, this means that the guacd from that release must
also be used. Compatibility with respect to libguac is represented by the
<a href="https://en.wikipedia.org/wiki/Soname">soname</a>.</li>
<li>You should update to newer versions where applicable and when possible.</li>
</ul>
<p>As of 1.4.0, the following changes have been made which affect compatibility
with past releases:</p>
<h2 id="java-api-guacamole-common-changes">Java API (guacamole-common) changes</h2>
<h3 id="guacamolehttptunnelservlet-sessions-are-now-decoupled-from-the-guacamoletunnel-uuid"><code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet</code> sessions are now decoupled from the <code class="language-plaintext highlighter-rouge">GuacamoleTunnel</code> UUID</h3>
<p>The <code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet</code> internals have been improved to entirely
decouple the concept of the tunnel UUID (as returned by <code class="language-plaintext highlighter-rouge">getUUID()</code>) from the
concept of the HTTP tunnel session. The HTTP tunnel now instead generates its
own random session identifier that is independent of the UUID.</p>
<p>Internal, UUID-specific functions of <code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet</code> like
<code class="language-plaintext highlighter-rouge">registerTunnel()</code> and <code class="language-plaintext highlighter-rouge">deregisterTunnel()</code> have been deprecated in favor of
versions of these functions that do not assume the tunnel will be identified by
its UUID. It is not common to use these functions in subclasses of
<code class="language-plaintext highlighter-rouge">GuacamoleHTTPTunnelServlet</code>. Any such usages should continue to work, but
should be migrated to the new versions of these functions when possible.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-956">GUACAMOLE-956</a> - Migrate away from including auth token within REST API URLs</li>
</ul>
<h2 id="extension-api-guacamole-ext-changes">Extension API (guacamole-ext) changes</h2>
<h3 id="default-localenvironment-constructor-is-now-deprecated">Default <code class="language-plaintext highlighter-rouge">LocalEnvironment</code> constructor is now deprecated</h3>
<p>To facilitate automatic retrieval of <code class="language-plaintext highlighter-rouge">guacamole.properties</code> values from key
vaults, the <code class="language-plaintext highlighter-rouge">Environment</code> interface has been improved to allow arbitrary
sources of properties to be added, and the <code class="language-plaintext highlighter-rouge">LocalEnvironment</code> implementation
has been updated to be a singleton. New usages should invoke
<code class="language-plaintext highlighter-rouge">LocalEnvironment.getInstance()</code> instead of manually creating new instances.</p>
<p>Old usages of the default constructor will still work as expected, but will
produce a compile-time warning about deprecation. The old default constructor
will still create a new <code class="language-plaintext highlighter-rouge">LocalEnvironment</code> instance, however this new instance
will actually transparently delegate to the <code class="language-plaintext highlighter-rouge">LocalEnvironment.getInstance()</code>
singleton.</p>
<p>Note that while completion of vault support has been bumped to the next
release, this core API improvement is still present on 1.4.0.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-641">GUACAMOLE-641</a> - Support storage of sensitive data within key vaults</li>
</ul>
<h2 id="libguac-api-changes">libguac API changes</h2>
<h3 id="touch_handler-added-to-guac_user-structure"><code class="language-plaintext highlighter-rouge">touch_handler</code> added to <code class="language-plaintext highlighter-rouge">guac_user</code> structure</h3>
<p>To allow multi-touch events to be passed through from client to server where
supported, an additional <code class="language-plaintext highlighter-rouge">touch</code> instruction has been defined within the
Guacamole protocol to represent the state of an individual touch. A new
handler, <code class="language-plaintext highlighter-rouge">touch_handler</code>, is now present within the <code class="language-plaintext highlighter-rouge">guac_user</code> structure to
allow this instruction to be handled when received from the client. This change
affects the in-memory size of the <code class="language-plaintext highlighter-rouge">guac_user</code> structure.</p>
<p>Downstream usages of libguac which make use of <code class="language-plaintext highlighter-rouge">guac_user</code> will need to be
rebuilt to ensure that the structure sizes and memory offsets used are correct.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-1204">GUACAMOLE-1204</a> - Add support for RDP touch events (RDPEI)</li>
</ul>
<h3 id="guac_wol_wake-now-accepts-a-udp-port-parameter"><code class="language-plaintext highlighter-rouge">guac_wol_wake()</code> now accepts a UDP port parameter</h3>
<p>The <code class="language-plaintext highlighter-rouge">guac_wol_wake()</code> function now accepts an additional parameter defining the
UDP port to be used for the magic packet. This change affects the formal
arguments of <code class="language-plaintext highlighter-rouge">guac_wol_wake()</code>.</p>
<p>Downstream usages of libguac which make use of <code class="language-plaintext highlighter-rouge">guac_wol_wake()</code> will need to
be updated to include the port number and rebuilt. The UDP port used previously
for all calls to <code class="language-plaintext highlighter-rouge">guac_wol_wake()</code> was <code class="language-plaintext highlighter-rouge">9</code>, as defined by the <code class="language-plaintext highlighter-rouge">GUAC_WOL_PORT</code>
constant.</p>
<ul>
<li><a href="https://issues.apache.org/jira/browse/GUACAMOLE-1245">GUACAMOLE-1245</a> - Add configuration option to specify WOL port</li>
</ul>
</div>
</div>
</div>
<!-- Footer -->
<div id="footer">
<div class="readable-content">
<!-- Copyrights -->
<p class="copyright">
Copyright &copy; 2024 <a href="http://www.apache.org/">The Apache
Software Foundation</a>, Licensed under the <a
href="http://www.apache.org/licenses/LICENSE-2.0">Apache License,
Version 2.0</a>.
</p>
<!-- Trademarks -->
<p class="trademarks">
Apache Guacamole, Guacamole, Apache, the Apache feather logo, and the
Apache Guacamole project logo are trademarks of The Apache Software
Foundation.
</p>
</div>
</div>
<!-- jQuery -->
<script src="/scripts/jquery.min.js" type="text/javascript"></script>
<!-- Dropdown toggle -->
<script src="/scripts/dropdown.js" type="text/javascript"></script>
</body>
</html>