blob: 73ccac4137f45d772594817e0dcabe116dbe2acd [file] [log] [blame]
<!DOCTYPE html>
<html lang="en" data-content_root="./" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Introduction &#8212; Apache Guacamole Manual v1.6.0</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
</script>
<!-- Loaded before other Sphinx assets -->
<link href="_static/styles/theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link href="_static/styles/bootstrap.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link href="_static/styles/pydata-sphinx-theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link href="_static/vendor/fontawesome/6.5.2/css/all.min.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2" />
<link rel="preload" as="font" type="font/woff2" crossorigin href="_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2" />
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=8f2a1f02" />
<link rel="stylesheet" type="text/css" href="_static/styles/sphinx-book-theme.css?v=eba8b062" />
<link rel="stylesheet" type="text/css" href="_static/copybutton.css?v=76b2166b" />
<link rel="stylesheet" type="text/css" href="_static/tabs.css?v=4c969af8" />
<link rel="stylesheet" type="text/css" href="_static/gug.css?v=475feb7f" />
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b" />
<link rel="preload" as="script" href="_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" />
<script src="_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
<script src="_static/documentation_options.js?v=9eb32ce0"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/clipboard.min.js?v=a7894cd8"></script>
<script src="_static/copybutton.js?v=c136e461"></script>
<script src="_static/tabs.js?v=3ee01567"></script>
<script src="_static/scripts/sphinx-book-theme.js?v=887ef09a"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'introduction';</script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Implementation and architecture" href="guacamole-architecture.html" />
<link rel="prev" title="Apache Guacamole Manual" href="index.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="en"/>
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>Back to top</button>
<input type="checkbox"
class="sidebar-toggle"
id="pst-primary-sidebar-checkbox"/>
<label class="overlay overlay-primary" for="pst-primary-sidebar-checkbox"></label>
<input type="checkbox"
class="sidebar-toggle"
id="pst-secondary-sidebar-checkbox"/>
<label class="overlay overlay-secondary" for="pst-secondary-sidebar-checkbox"></label>
<div class="search-button__wrapper">
<div class="search-button__overlay"></div>
<div class="search-button__search-container">
<form class="bd-search d-flex align-items-center"
action="search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
id="search-input"
placeholder="Search..."
aria-label="Search..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form></div>
</div>
<div class="pst-async-banner-revealer d-none">
<aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<div class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<a class="navbar-brand logo" href="index.html">
<p class="title logo__title">Apache Guacamole Manual v1.6.0</p>
</a></div>
<div class="sidebar-primary-item">
<script>
document.write(`
<button class="btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Search</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button>
`);
</script></div>
<div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
<div class="bd-toc-item navbar-nav active">
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Getting Started</span></p>
<ul class="current nav bd-sidenav">
<li class="toctree-l1 current active"><a class="current reference internal" href="#">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="guacamole-architecture.html">Implementation and architecture</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="installing-guacamole.html">Installing Guacamole</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="guacamole-native.html">Native installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="guacamole-docker.html">Containerized (Docker) installation</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="jdbc-auth.html">Database setup</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="mysql-auth.html">MariaDB / MySQL</a></li>
<li class="toctree-l2"><a class="reference internal" href="postgresql-auth.html">PostgreSQL</a></li>
<li class="toctree-l2"><a class="reference internal" href="sqlserver-auth.html">SQL Server</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="security.html">Securing a Guacamole install</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="reverse-proxy.html">SSL termination</a></li>
<li class="toctree-l2"><a class="reference internal" href="auth-ban.html">Blocking brute-force attacks</a></li>
</ul>
</details></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Using Guacamole</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1"><a class="reference internal" href="configuring-guacamole.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="using-guacamole.html">General usage</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="administration.html">Administration</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="batch-import.html">Importing connections</a></li>
</ul>
</details></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Extensions</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1"><a class="reference internal" href="ldap-auth.html">Active Directory / LDAP</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="mfa.html">Multi-factor authentication</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="duo-auth.html">Duo</a></li>
<li class="toctree-l2"><a class="reference internal" href="totp-auth.html">TOTP</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="sso.html">Single sign-on</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="cas-auth.html">CAS</a></li>
<li class="toctree-l2"><a class="reference internal" href="openid-auth.html">OpenID Connect</a></li>
<li class="toctree-l2"><a class="reference internal" href="saml-auth.html">SAML</a></li>
<li class="toctree-l2"><a class="reference internal" href="ssl-auth.html">Smart cards / Certificates</a></li>
</ul>
</details></li>
<li class="toctree-l1"><a class="reference internal" href="vault.html">Retrieving secrets from a vault</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="external-auth.html">External authentication</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="json-auth.html">Encrypted, signed JSON</a></li>
<li class="toctree-l2"><a class="reference internal" href="header-auth.html">HTTP header</a></li>
</ul>
</details></li>
<li class="toctree-l1"><a class="reference internal" href="radius-auth.html">RADIUS</a></li>
<li class="toctree-l1"><a class="reference internal" href="adhoc-connections.html">Ad-hoc connections</a></li>
<li class="toctree-l1"><a class="reference internal" href="auth-restrict.html">Login / Connection restrictions</a></li>
<li class="toctree-l1"><a class="reference internal" href="recording-playback.html">Session recording player</a></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Developer's Guide</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1"><a class="reference internal" href="guacamole-protocol.html">The Guacamole protocol</a></li>
<li class="toctree-l1"><a class="reference internal" href="libguac.html">libguac</a></li>
<li class="toctree-l1"><a class="reference internal" href="guacamole-common.html">guacamole-common</a></li>
<li class="toctree-l1"><a class="reference internal" href="guacamole-common-js.html">guacamole-common-js</a></li>
<li class="toctree-l1"><a class="reference internal" href="guacamole-ext.html">guacamole-ext</a></li>
<li class="toctree-l1"><a class="reference internal" href="custom-protocols.html">Adding new protocols</a></li>
<li class="toctree-l1"><a class="reference internal" href="custom-auth.html">Custom authentication</a></li>
<li class="toctree-l1"><a class="reference internal" href="event-listeners.html">Event listeners</a></li>
<li class="toctree-l1"><a class="reference internal" href="writing-you-own-guacamole-app.html">Writing your own Guacamole application</a></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Appendices</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1"><a class="reference internal" href="protocol-reference.html">Guacamole protocol reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="jdbc-auth-schema.html">Database schema reference</a></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
</div>
<div id="rtd-footer-container"></div>
</div>
<main id="main-content" class="bd-main" role="main">
<div class="sbt-scroll-pixel-helper"></div>
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article d-print-none">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-bars"></span>
</button></div>
</div>
<div class="header-article-items__end">
<div class="header-article-item">
<div class="article-header-buttons">
<button onclick="toggleFullScreen()"
class="btn btn-sm btn-fullscreen-button"
title="Fullscreen mode"
data-bs-placement="bottom" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-expand"></i>
</span>
</button>
<script>
document.write(`
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto"></i>
</button>
`);
</script>
<script>
document.write(`
<button class="btn btn-sm pst-navbar-icon search-button search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass fa-lg"></i>
</button>
`);
</script>
<button class="sidebar-toggle secondary-toggle btn btn-sm" title="Toggle secondary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-list"></span>
</button>
</div></div>
</div>
</div>
</div>
<div id="jb-print-docs-body" class="onlyprint">
<h1>Introduction</h1>
<!-- Table of contents -->
<div id="print-main-content">
<div id="jb-print-toc">
<div>
<h2> Contents </h2>
</div>
<nav aria-label="Page">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#what-is-guacamole">What is Guacamole?</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#why-use-guacamole">Why use Guacamole?</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#access-your-computers-from-any-device">Access your computers from any device</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#keep-a-computer-in-the-cloud">Keep a computer in the “cloud”</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#provide-easy-access-to-a-group">Provide easy access to a group</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#adding-html5-remote-access-to-your-existing-infrastructure">Adding HTML5 remote access to your existing infrastructure</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="introduction">
<h1>Introduction<a class="headerlink" href="#introduction" title="Link to this heading">#</a></h1>
<p>This book is the official Apache Guacamole manual, written by the upstream
developers of the Guacamole project. It is also the official general
documentation, with an online version available at
<a class="reference external" href="http://guacamole.apache.org/">http://guacamole.apache.org/</a>. It is a work in progress which will be
continuously updated as Guacamole changes with each release.</p>
<p>We decided to maintain the documentation for Guacamole as a book, as there is
an awful lot that can be done with the Guacamole web application, and even more
that can be done with the API. This book is intended to explore the
possibilities of Guacamole as an application, and to provide documentation
necessary to install, maintain, and use Guacamole.</p>
<p>For the sake of users and administrators, we have provided a high-level
overview of Guacamole’s architecture and technical design, as well as basic
usage instructions and installation instructions for common platforms.</p>
<p>For the sake of developers, we have provided a protocol reference and tutorials
for common tasks (implementing protocol support, integrating Guacamole into
your own application, etc.) to give a good starting point beyond simply looking
at the Guacamole codebase.</p>
<p>This particular edition of the Guacamole Manual covers Guacamole version
1.6.0. New releases which create new features or break compatibility
will result in new editions of the user’s guide, as will any necessary
corrections. As the official documentation for the project, this book will
always be freely available in its entirety online.</p>
<section id="what-is-guacamole">
<span id="what-is-guac"></span><h2>What is Guacamole?<a class="headerlink" href="#what-is-guacamole" title="Link to this heading">#</a></h2>
<p>Guacamole is an HTML5 web application that provides access to desktop
environments using remote desktop protocols (such as VNC or RDP).
Guacamole is also the project that produces this web application, and
provides an API that drives it. This API can be used to power other
similar applications or services.</p>
<p>“Guacamole” is most commonly used to refer to the web application
produced by the Guacamole project using their API. This web application
is part of a stack that provides a protocol-agnostic remote desktop
gateway. Written in JavaScript and using only HTML5 and other standards,
the client part of Guacamole requires nothing more than a modern web
browser or web-enabled device when accessing any of the desktops served.</p>
<p>Historically, Guacamole was an HTML5 VNC client, and before that, a
JavaScript Telnet client called RealMint (“RealMint” is an anagram for
“terminal”), but this is no longer the case. Guacamole’s architecture
has grown to encompass remote desktop in general, and can be used as a
gateway for any number of computers. Originally a proof-of-concept,
Guacamole is now performant enough for daily use, and all Guacamole
development is done over Guacamole.</p>
<p>As an API, Guacamole provides a common and efficient means of streaming
text data over a JavaScript-based tunnel using either HTTP or WebSocket,
and a client implementation which supports the Guacamole protocol and
renders the remote display when combined with a Guacamole protocol
stream from the tunnel.</p>
<p>It provides cross-browser mouse and keyboard events, an XML-driven
on-screen keyboard, and synchronized nestable layers with
hardware-accelerated compositing. Projects that wish to provide remote
desktop support over HTML5 can leverage the years of research and
development that went into Guacamole by incorporating the API into their
application or service.</p>
</section>
<section id="why-use-guacamole">
<span id="access-from-anywhere"></span><h2>Why use Guacamole?<a class="headerlink" href="#why-use-guacamole" title="Link to this heading">#</a></h2>
<p>The principle reason to use Guacamole is constant, world-wide,
unfettered access to your computers.</p>
<p>Guacamole allows access one or more desktops from anywhere remotely,
without having to install a client, particularly when installing a
client is not possible. By setting up a Guacamole server, you can
provide access to any other computer on the network from virtually any
other computer on the internet, anywhere in the world. Even mobile
phones or tablets can be used, without having to install anything.</p>
<p>As a true web application whose communication is over HTTP or HTTPS
only, Guacamole allows you to access your machines from anywhere without
violating the policy of your workplace, and without requiring the
installation of special clients. The presence of a proxy or corporate
firewall does not prevent Guacamole use.</p>
</section>
<section id="access-your-computers-from-any-device">
<span id="access-from-anything"></span><h2>Access your computers from any device<a class="headerlink" href="#access-your-computers-from-any-device" title="Link to this heading">#</a></h2>
<p>As Guacamole requires only a reasonably-fast, standards-compliant
browser, Guacamole will run on many devices, including mobile phones and
tablets.</p>
<p>Guacamole is specifically designed to not care whether you have a mouse,
keyboard, touchscreen, or any combination of those.</p>
<p>One of the major design philosophies behind Guacamole is that it should
never assume you have a particular device (ie: a mobile phone) just
because your browser has or is missing a specific feature (ie: touch
events or a smallish screen). Guacamole’s codebase provides support for
both mouse and touch events simultaneously, without choosing one over
the other, while the interface is intended to be usable regardless of
screen size.</p>
<p>Barring bugs, you should be able to use Guacamole on just about any
modern device with a web browser.</p>
</section>
<section id="keep-a-computer-in-the-cloud">
<span id="non-physical-computer"></span><h2>Keep a computer in the “cloud”<a class="headerlink" href="#keep-a-computer-in-the-cloud" title="Link to this heading">#</a></h2>
<p>Ignoring the buzzword, it’s often useful to have a computer that has no
dedicated physical hardware, where its processing and storage power are
handled transparently by redundant systems in some remote datacenter.</p>
<p>Computers hosted on virtualized hardware are more resilient to failures,
and with so many companies now offering on-demand computing resources,
Guacamole is a perfect way to access several machines that are only
accessible over the internet.</p>
<p>In fact, all Guacamole development is done on computers like this. This
is partly because we like the mobility, and partly because we want to
ensure Guacamole is always performant enough for daily use.</p>
</section>
<section id="provide-easy-access-to-a-group">
<span id="group-access"></span><h2>Provide easy access to a group<a class="headerlink" href="#provide-easy-access-to-a-group" title="Link to this heading">#</a></h2>
<p>Guacamole allows you to centralize access to a large group of machines,
and specify on a per-user basis which machines are accessible. Rather
than remember a list of machines and credentials, users need only log
into a central server and click on one of the connections listed.</p>
<p>If you have multiple computers which you would like to access remotely,
or you are part of a group where each person has a set of machines that
they need remote access to, Guacamole is a good way to provide that
access while also ensuring that access is available from anywhere.</p>
</section>
<section id="adding-html5-remote-access-to-your-existing-infrastructure">
<span id="adding-remote-access"></span><h2>Adding HTML5 remote access to your existing infrastructure<a class="headerlink" href="#adding-html5-remote-access-to-your-existing-infrastructure" title="Link to this heading">#</a></h2>
<p>As Guacamole is an API, not just a web application, the core components
and libraries provided by the Guacamole project can be used to add HTML5
remote access features to an existing application. You need not use the
main Guacamole web application; you can write (or integrate with) your
own rather easily.</p>
<p>If you host an on-demand computing service, adding HTML5-based remote
access allows users of your service more broad access; users need
nothing more than a web browser to see their computers’ screens.</p>
</section>
</section>
</article>
<footer class="prev-next-footer d-print-none">
<div class="prev-next-area">
<a class="left-prev"
href="index.html"
title="previous page">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">previous</p>
<p class="prev-next-title">Apache Guacamole Manual</p>
</div>
</a>
<a class="right-next"
href="guacamole-architecture.html"
title="next page">
<div class="prev-next-info">
<p class="prev-next-subtitle">next</p>
<p class="prev-next-title">Implementation and architecture</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item">
<div class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> Contents
</div>
<nav class="bd-toc-nav page-toc">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#what-is-guacamole">What is Guacamole?</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#why-use-guacamole">Why use Guacamole?</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#access-your-computers-from-any-device">Access your computers from any device</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#keep-a-computer-in-the-cloud">Keep a computer in the “cloud”</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#provide-easy-access-to-a-group">Provide easy access to a group</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#adding-html5-remote-access-to-your-existing-infrastructure">Adding HTML5 remote access to your existing infrastructure</a></li>
</ul>
</nav></div>
</div></div>
</div>
<footer class="bd-footer-content">
<div class="bd-footer-content__inner container">
<div class="footer-item">
<p class="component-author">
By The Apache Software Foundation
</p>
</div>
<div class="footer-item">
<p class="copyright">
© Copyright 2025 The Apache Software Foundation.
<br/>
</p>
</div>
<div class="footer-item">
</div>
<div class="footer-item">
</div>
</div>
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script src="_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b"></script>
<script src="_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b"></script>
<footer class="bd-footer">
</footer>
</body>
</html>