On Sun, Nov 30, 2025 at 4:19 AM Krzysztoff <[email protected]> wrote:
>
> Hi,
> I've searched through possibly every discussion about this matter that
> exists on the Internet and so far, I haven't found the answer.
>
> Documentation for guacamole-common-js available at
> https://guacamole.apache.org/doc/guacamole-common-js/Guacamole.WebSocketTunnel.html
>
> explicitly mentions the existence of WebSocketTunnel, however the
> exact structure and type of
> parameter tunnelURL is nowhere to be found.
>
> Lack of this knowledge is a common issue, people also mention that in
> this URL there should be a JSON token included?
>

I believe it is not documented there because, as part of the
"guacamole-common-js" code, the exact syntax for the WebSocketTunnel
URL depends upon your implementation of a server-side component to
provide this URL, and that implementation may vary. The "common"
components of the project are meant to provide abstracts that
represent the core of the Guacamole protocol but leave the exact
implementation details undefined so that they can be easily re-used
across other projects. The full Guacamole Client has provided one
possible implementation of the common code, including things like
WebSocket tunnels.

>
> What should a correctly formed tunnelURL parameter look like?

If you're implementing your own Guacamole-base client/server, whatever
you want it to look like ;-). In all seriousness, for the Guacamole
Client, you can see this using the "Network" tab of the Developer
Tools in a browser when you establish a connection. Mine looks
something like this:

wss://guacamole.example.com/websocket-tunnel?token=C3E8A05EAB1B0CF92D886A021965C8AE5A6817C1AFACE888D369A7496C4D6050&GUAC_DATA_SOURCE=postgresql&GUAC_ID=7&GUAC_TYPE=c&GUAC_WIDTH=1920&GUAC_HEIGHT=438&GUAC_DPI=96&GUAC_TIMEZONE=America%2FNew_York&GUAC_AUDIO=audio%2FL8&GUAC_AUDIO=audio%2FL16&GUAC_IMAGE=image%2Fjpeg&GUAC_IMAGE=image%2Fpng&GUAC_IMAGE=image%2Fwebp

Again, this is the WebSocket URL for a full Guacamole Client
implementation, so there are several components that are specifically
implemented in that server-side code:
* token - The authentication token for the currently logged in user,
as obtained from the Guacamole REST API during login.
* GUAC_DATA_SOURCE - The data source within Guacamole that this
connection is configured in.
* GUAC_ID - The connection (or connection group) identifier within
that data source.
* GUAC_TYPE - c for connection, g for connection group.
* GUAC_WIDTH - The width of the client screen.
* GUAC_HEIGHT - The heigh of the client screen.
* GUAC_DPI - Preferred resolution DPI.
* GUAC_TIMEZONE - The timezone of the client.
* GUAC_AUDIO - Support audio formats for the client.
* GUAC_IMAGE - Supported image formats for the client.

You can see the code that assembles this information, here:

https://github.com/apache/guacamole-client/blob/93f98170191a37136c931ad118ff73c644475f13/guacamole/src/main/frontend/src/app/client/types/ManagedClient.js#L307-L375

and you can see the code that consumes the tunnel request, here:

https://github.com/apache/guacamole-client/tree/main/guacamole/src/main/java/org/apache/guacamole/tunnel
https://github.com/apache/guacamole-client/tree/main/guacamole/src/main/java/org/apache/guacamole/tunnel/TunnelRequest.java

The code above are the specific implementations of these components
(WebSocket tunnels, URLs, parameters, etc.) that are used within the
full Guacamole Client that the project provides, and may differ if
you're trying to write your own application.

-Nick

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to