Skip to content

Add experimental web client for desktops#215

Merged
jackbuehner merged 214 commits intokimmknight:masterfrom
jackbuehner:guac
Mar 28, 2026
Merged

Add experimental web client for desktops#215
jackbuehner merged 214 commits intokimmknight:masterfrom
jackbuehner:guac

Conversation

@jackbuehner
Copy link
Copy Markdown
Collaborator

@jackbuehner jackbuehner commented Jan 3, 2026

This PR adds an experimental web client for desktops. The web client uses guacamole-common-js and a custom proxy to communicate with a server running the guacamole dameon (guacd).

If Windows Subsystem for Linux 2 (WSL2) is installed, RAWeb will automatically create a container for guacd. Oherwise, the option to connect to to the web client will be hidden until an administrator installs WSL2 or configures RAWeb to use an external guacd server. More info

Demo:

RAWeb.Web.Client.mp4

guacd

The Guacamole daemon, guacd, provides a translation between the RDP protocol the guacamole protocol. RAWeb provides a proxy endpoint for communicating with guacd over websockets. The web client uses guacamole-common-js to transmit and receive messages related to the active connection.

We have to manage the connection on the server side because web browsers do not allow direct TCP access, which is required by RDP. Guacd is maintained by the Apache Software Foundation.

Guacd only runs on Linux. RAWeb uses Windows Subsystem for Linux to run guacd. The GitHub Actions workflow has been updated to build a stripped down variant of the guacd docker image that only has the required components for RDP and is designed to run as a linux distribution in WSL2. RAWeb launches the distribution on the first connection, and RAWeb terminates the distribution whenever IIS stops the web server. WSL2 must be installed system-wide with the MSI installer, not the Microsoft Store version. See the docs for the detailed prerequisite information: Enable the web client.

Connections

When connecting via the web client, the device running RAWeb must be able to reach the terminal server referenced by the RDP file. Instead of a client <--> terminal server connection, it is a browser (client) <--> RAWeb (proxy) <--> terminal server connection.

A full user guide is available at https://preview-jack.raweb.app/deploy-preview/guac/docs/web-client/.

To-do

  • RemoteApp support
  • Custom guacd image that only has RDP support (for smaller image size)
  • Clipboard support
  • Hide the navigation rail
  • Hide titlebar when full screen
  • User guide for web client
  • Guide for WSL2-related error messages (to be at /docs/wsl2)

Checklist

  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
  • Windows Server 2022 with WSL2
  • Windows Server 2025
  • Windows Server 2025 with WSL2
  • Windows 10 21H2+
  • Windows 10 21H2 with WSL2
  • Windows 11 24H2+
  • Windows 11 24H2 with WSL2

Resolves #49.

@jackbuehner jackbuehner self-assigned this Jan 3, 2026
@jackbuehner jackbuehner added the enhancement New feature or request label Jan 3, 2026
@github-actions
Copy link
Copy Markdown

github-actions bot commented Jan 3, 2026

Deployment successful

Preview URL: https://raweb.app/deploy-preview/pr-215/
Wiki/Docs: https://raweb.app/deploy-preview/pr-215/docs/

Local install
Run as an administrator in PowerShell to install this branch:
iwr -UseBasicParsing install.raweb.app/preview/jackbuehner/guac | iex

View logs

Installing during the setup script isntalls the guacd wsl distribution for the user who ran the script. This is usually different that the identity for the application (usuaully IIS AppPool\raweb). If we install it on-demand, it is installed by the application identity instead. WSL distibutions are per-user/identity.
We were building it after RAWeb files were already isntalled, which resulted in guacd.wsl not being copied with the rest of the installed files.
@jackbuehner
Copy link
Copy Markdown
Collaborator Author

jackbuehner commented Jan 28, 2026

I am done with the bugfixes. I ended up with a lot of small commits for lots of different small changes.

Reposting since GitHub is hiding these comments behind multiple clicks in the sea of commits:

Jack Buehner on Jan 26, 2026, 9:32 PM EST:

This is just awesome 🤩 I will have time to test properly in the next couple of days

Thanks!

I updated the wiki with the error message explainations. As part of that process, I also reorganized the web client documentation and added a specific page with instructions for ensuring WSL2 is ready: https://raweb.app/deploy-preview/pr-215/docs/web-client/prerequisites/#opt1. I hope it makes sense and is helpful.

The user guide is still at: https://raweb.app/deploy-preview/pr-215/docs/web-client/

Kim Knight on Jan 26, 2026, 4:00 AM EST:

This is just awesome 🤩 I will have time to test properly in the next couple of days

Jack Buehner on Jan 24, 2026, 8:30 PM EST:

Hi @kimmknight, this is a big (but exciting) change. Do you have time to take a look at this? I have tested on all of the major Windows versions that RAWeb supports, but it is possible that a a fresh look from someone new will uncover some bugs I have not seen.

This branch can be installed by running iwr -UseBasicParsing install.raweb.app/preview/jackbuehner/guac | iex. You will also need to install WSL2 if you have not already done so.

I did not change any of the webfeed code, so the changes really just center around the web client.

The PR is still in draft mode because I need to write a page that explains the solutions to some WSL2-related errors that can arise if WSL2 is not fully initialized after installation.

…ls dialog is shown

We need to unregister because the keyboard event listener captures all input, making it impossible to type into the dialog.
Once the dialog is closed, we re-register the event listeners.
This is consistent with the way mstsc.exe works. Note that if the credentials did not work, we still need to prompt for the device credentials first. If new gateway credentials are also required, they will be requirested afterwards.
… distribution upon start

This ensures that trusted certificates on the RAWeb host do not trigger guacd's SSL/TLS untrusted certificate error
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature request: Add an option to connect to remote apps and desktops via the browser

2 participants