Guacamole protocol reference
Drawing instructions
- arc
The arc instruction adds the specified arc subpath to the existing path, creating a new path if no path exists. The path created can be modified further by other path-type instructions, and finally stroked, filled, and/or closed.
- Arguments
layer (integer) – The layer which should have the specified arc subpath added.
x (integer) – The X coordinate of the center of the circle containing the arc to be drawn.
y (integer) – The Y coordinate of the center of the circle containing the arc to be drawn.
radius (float) – The radius of the circle containing the arc to be drawn, in pixels.
start (float) – The starting angle of the arc to be drawn, in radians.
end (float) – The ending angle of the arc to be drawn, in radians.
negative (integer) – Non-zero if the arc should be drawn from START to END in order of decreasing angle, zero otherwise.
- cfill
Fills the current path with the specified color. This instruction completes the current path. Future path instructions will begin a new path.
- Arguments
mask (integer) – The channel mask to apply when filling the current path in the specified layer.
layer (integer) – The layer whose path should be filled.
r (integer) – The red component of the color to use to fill the current path in the specified layer.
g (integer) – The green component of the color to use to fill the current path in the specified layer.
b (integer) – The blue component of the color to use to fill the current path in the specified layer.
a (integer) – The alpha component of the color to use to fill the current path in the specified layer.
- clip
Applies the current path as the clipping path. Future operations will only draw within the current path. Note that future clip instructions will also be limited by this path. To set a completely new clipping path, you must first reset the layer with a reset instruction. If you wish to only reset the clipping path, but preserve the current transform matrix, push the layer state before setting the clipping path, and pop the layer state to reset.
- Arguments
layer (integer) – The layer whose clipping path should be set.
- close
Closes the current path by connecting the start and end points with a straight line.
- Arguments
layer (integer) – The layer whose path should be closed.
- copy
Copies image data from the specified rectangle of the specified layer or buffer to a different location of another specified layer or buffer.
- Arguments
srclayer (integer) – The index of the layer to copy image data from.
srcx (integer) – The X coordinate of the upper-left corner of the source rectangle within the source layer.
srcy (integer) – The Y coordinate of the upper-left corner of the source rectangle within the source layer.
srcwidth (integer) – The width of the source rectangle within the source layer.
srcheight (integer) – The height of the source rectangle within the source layer.
mask (integer) – The channel mask to apply when drawing the image data on the destination layer.
dstlayer (integer) – The index of the layer to draw the image data to.
dstx (integer) – The X coordinate of the upper-left corner of the destination within the destination layer.
dsty (integer) – The Y coordinate of the upper-left corner of the destination within the destination layer.
- cstroke
Strokes the current path with the specified color. This instruction completes the current path. Future path instructions will begin a new path.
- Arguments
mask (integer) – The channel mask to apply when stroking the current path in the specified layer.
layer (integer) – The layer whose path should be stroked.
cap (integer) – The index of the line cap style to use. This can be either butt (0), round (1), or square (2).
join (integer) – The index of the line join style to use. This can be either bevel (0), miter (1), or round (2).
thickness (integer) – The thickness of the stroke to draw, in pixels.
r (integer) – The red component of the color to use to stroke the current path in the specified layer.
g (integer) – The green component of the color to use to stroke the current path in the specified layer.
b (integer) – The blue component of the color to use to stroke the current path in the specified layer.
a (integer) – The alpha component of the color to use to stroke the current path in the specified layer.
- cursor
Sets the client’s cursor to the image data from the specified rectangle of a layer, with the specified hotspot.
- Arguments
x (integer) – The X coordinate of the cursor’s hotspot.
y (integer) – The Y coordinate of the cursor’s hotspot.
srclayer (integer) – The index of the layer to copy image data from.
srcx (integer) – The X coordinate of the upper-left corner of the source rectangle within the source layer.
srcy (integer) – The Y coordinate of the upper-left corner of the source rectangle within the source layer.
srcwidth (integer) – The width of the source rectangle within the source layer.
srcheight (integer) – The height of the source rectangle within the source layer.
- curve
Adds the specified cubic bezier curve subpath.
- Arguments
layer (integer) – The layer which should have the specified curve subpath added.
cp1x (integer) – The X coordinate of the first control point of the curve.
cp1y (integer) – The Y coordinate of the first control point of the curve.
cp2x (integer) – The X coordinate of the second control point of the curve.
cp2y (integer) – The Y coordinate of the second control point of the curve.
x (integer) – The X coordinate of the endpoint of the curve.
y (integer) – The Y coordinate of the endpoint of the curve.
- dispose
Removes the specified layer. The specified layer will be recreated as a new layer if it is referenced again.
- Arguments
layer (integer) – The layer to remove.
- distort
Sets the given affine transformation matrix to the layer. Unlike transform, this operation is independent of any previously sent transformation matrix. This operation can be undone by setting the layer’s transformation matrix to the identity matrix using distort
- Arguments
layer (integer) – The layer to distort.
a (float) – The matrix value in row 1, column 1.
b (float) – The matrix value in row 2, column 1.
c (float) – The matrix value in row 1, column 2.
d (float) – The matrix value in row 2, column 2.
e (float) – The matrix value in row 1, column 3.
f (float) – The matrix value in row 2, column 3.
- identity
Resets the transform matrix of the specified layer to the identity matrix.
- Arguments
layer (integer) – The layer whose transform matrix should be reset.
- img
Allocates a new stream, associating it with the metadata of an image update, including the image type, the destination layer, and destination coordinates. The contents of the image will later be sent along the stream with blob instructions. The full size of the image need not be known ahead of time.
- Arguments
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the image being sent.
mask (integer) – The channel mask to apply when drawing the image data.
layer (integer) – The destination layer.
x (integer) – The X coordinate of the upper-left corner of the destination within the destination layer.
y (integer) – The Y coordinate of the upper-left corner of the destination within the destination layer.
- lfill
Fills the current path with a tiled pattern of the image data from the specified layer. This instruction completes the current path. Future path instructions will begin a new path.
- Arguments
mask (integer) – The channel mask to apply when filling the current path in the specified layer.
layer (integer) – The layer whose path should be filled.
srclayer (integer) – The layer to use as the pattern.
- line
Adds the specified line subpath.
- Arguments
layer (integer) – The layer which should have the specified line subpath added.
x (integer) – The X coordinate of the endpoint of the line.
y (integer) – The Y coordinate of the endpoint of the line.
- lstroke
Strokes the current path with a tiled pattern of the image data from the specified layer. This instruction completes the current path. Future path instructions will begin a new path.
- Arguments
mask (integer) – The channel mask to apply when filling the current path in the specified layer.
layer (integer) – The layer whose path should be filled.
cap (integer) – The index of the line cap style to use. This can be either butt (0), round (1), or square (2).
join (integer) – The index of the line join style to use. This can be either bevel (0), miter (1), or round (2).
thickness (integer) – The thickness of the stroke to draw, in pixels.
srclayer (integer) – The layer to use as the pattern.
- move
Moves the given layer to the given location within the specified parent layer. This operation is applicable only to layers, and cannot be applied to buffers (layers with negative indices). Applying this operation to the default layer (layer 0) also has no effect.
- Arguments
layer (integer) – The layer to move.
parent (integer) – The layer that should be the parent of the given layer.
x (integer) – The X coordinate to move the layer to.
y (integer) – The Y coordinate to move the layer to.
z (integer) – The relative Z-ordering of this layer. Layers with larger values will appear above layers with smaller values.
- pop
Restores the previous state of the specified layer from the stack. The state restored includes the transformation matrix and clipping path.
- Arguments
layer (integer) – The layer whose state should be restored.
- push
Saves the current state of the specified layer to the stack. The state saved includes the current transformation matrix and clipping path.
- Arguments
layer (integer) – The layer whose state should be saved.
- rect
Adds a rectangular path to the specified layer.
- Arguments
mask (integer) – The channel mask to apply when drawing the image data.
layer (integer) – The destination layer.
x (integer) – The X coordinate of the upper-left corner of the rectangle to draw.
y (integer) – The Y coordinate of the upper-left corner of the rectangle to draw.
width (integer) – The width of the rectangle to draw.
height (integer) – The width of the rectangle to draw.
- reset
Resets the transformation and clip state of the layer.
- Arguments
layer (integer) – The layer whose state should be reset.
- set
Sets the given client-side property to the specified value. Currently there is only one property: miter-limit, the maximum distance between the inner and outer points of a miter joint, proportional to stroke width (if miter-limit is set to 10.0, the default, then the maximum distance between the points of the joint is 10 times the stroke width).
- Arguments
layer (integer) – The layer whose property should be set.
property (string) – The name of the property to set.
value (string) – The value to set the given property to.
- shade
Sets the opacity of the given layer.
- Arguments
layer (integer) – The layer whose opacity should be set.
opacity (integer) – The opacity of the layer, where 0 is completely transparent, and 255 is completely opaque.
- size
Sets the size of the specified layer.
- Arguments
layer (integer) – The layer to resize.
width (integer) – The new width of the layer
height (integer) – The new height of the layer
- start
Starts a new subpath at the specified point.
- Arguments
layer (integer) – The layer which should start a new subpath.
x (integer) – The X coordinate of the first point of the new subpath.
y (integer) – The Y coordinate of the first point of the new subpath.
- transfer
Transfers image data from the specified rectangle of the specified layer or buffer to a different location of another specified layer or buffer, using the specified transfer function.
For a list of available functions, see the definition of
guac_transfer_function
within the guacamole/protocol-types.h header included with libguac.- Arguments
srclayer (integer) – The index of the layer to transfer image data from.
srcx (integer) – The X coordinate of the upper-left corner of the source rectangle within the source layer.
srcy (integer) – The Y coordinate of the upper-left corner of the source rectangle within the source layer.
srcwidth (integer) – The width of the source rectangle within the source layer.
srcheight (integer) – The height of the source rectangle within the source layer.
function (integer) –
The index of the transfer function to use.
For a list of available functions, see the definition of
guac_transfer_function
within the guacamole/protocol-types.h header included with libguac.dstlayer (integer) – The index of the layer to draw the image data to.
dstx (integer) – The X coordinate of the upper-left corner of the destination within the destination layer.
dsty (integer) – The Y coordinate of the upper-left corner of the destination within the destination layer.
- transform
Applies the specified transformation matrix to future operations. Unlike distort, this operation is dependent on any previously sent transformation matrices, and only affects future operations. This operation can be undone by setting the layer’s transformation matrix to the identity matrix using identity, but image data already drawn will not be affected.
- Arguments
layer (integer) – The layer to apply the given transformation matrix to.
a (float) – The matrix value in row 1, column 1.
b (float) – The matrix value in row 2, column 1.
c (float) – The matrix value in row 1, column 2.
d (float) – The matrix value in row 2, column 2.
e (float) – The matrix value in row 1, column 3.
f (float) – The matrix value in row 2, column 3.
Streaming instructions
- ack
The ack instruction acknowledges a received data blob, providing a status code and message indicating whether the operation associated with the blob succeeded or failed. A status code other than 0 (
SUCCESS
) implicitly ends the stream.- Arguments
stream (integer) – The index of the stream the corresponding blob was received on.
message (string) – A human-readable error message. This typically is not exposed within any user interface, and mainly helps with debugging.
status (integer) – The Guacamole status code denoting success or failure. For a list of status codes, see the table in Status codes.
- argv
Allocates a new stream, associating it with the given argument (connection parameter) metadata. The relevant connection parameter data will later be sent along the stream with blob instructions. If sent by the client, this data will be the desired new value of the connection parameter being changed, and will be applied if the server supports changing that connection parameter while the connection is active. If sent by the server, this data will be the current value of a connection parameter being exposed to the client.
- Arguments
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the connection parameter being sent. In most cases, this will be “text/plain”.
name (string) – The name of the connection parameter whose value is being sent.
- audio
Allocates a new stream, associating it with the given audio metadata. Audio data will later be sent along the stream with blob instructions. The mimetype given must be a mimetype previously specified by the client during the handshake procedure. Playback will begin immediately and will continue as long as blobs are received along the stream.
- Arguments
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the audio data being sent.
- blob
Sends a blob of data along the given stream. This blob of data is arbitrary, base64-encoded data, and only has meaning to the Guacamole client or server through the metadata assigned to the stream when the stream was allocated.
- Arguments
stream (integer) – The index of the stream along which the given data should be sent.
data (string) – The base64-encoded data to send.
- clipboard
Allocates a new stream, associating it with the given clipboard metadata. The clipboard data will later be sent along the stream with blob instructions. If sent by the client, this data will be the contents of the client-side clipboard. If sent by the server, this data will be the contents of the clipboard within the remote desktop.
- Arguments
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the clipboard data being sent. In most cases, this will be “text/plain”.
- end
The end instruction terminates an open stream, freeing any client-side or server-side resources. Data sent to a terminated stream will be ignored. Terminating a stream with the end instruction only denotes the end of the stream and does not imply an error.
- Arguments
stream (integer) – The index of the stream the corresponding blob was received on.
- file
Allocates a new stream, associating it with the given arbitrary file metadata. The contents of the file will later be sent along the stream with blob instructions. The full size of the file need not be known ahead of time.
- Arguments
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the file being sent.
filename (string) – The name of the file, as it would be saved on a filesystem.
- msg
Sends a message from the server (guacd) to the client. The nature of these messages is intentionally broad and flexible - the message must include a numeric code that the client understands and can act on, and may also any number of arguments that can be used by the client in association with the message.
- Arguments
msg (integer) – A numeric value indicating the message that is being passed to the client.
args (string) – Any number of arguments associated with the message that is being sent to the client.
- pipe
Allocates a new stream, associating it with the given arbitrary named pipe metadata. The contents of the pipe will later be sent along the stream with blob instructions. Pipes in the Guacamole protocol are unidirectional, named pipes, very similar to a UNIX FIFO or pipe. It is up to client-side code to handle pipe data appropriately, likely based upon the name of the pipe, which is arbitrary. Pipes may be opened by either the client or the server.
- Arguments
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the data being sent along the pipe.
name (string) – The arbitrary name of the pipe, which may have special meaning to client-side code.
- video
Allocates a new stream, associating it with the given video metadata. Video data will later be sent along the stream with blob instructions. The mimetype given must be a mimetype previously specified by the client during the handshake procedure. Playback will begin immediately and will continue as long as blobs are received along the stream.
- Arguments
stream (integer) – The index of the stream to allocate.
layer (integer) – The index of the layer to stream the video data into. The effect of other drawing operations on this layer during playback is undefined, as the client codec implementation may leverage any rendering mechanism it sees fit, including hardware decoding.
mimetype (string) – The mimetype of the video data being sent.
Object instructions
- body
Allocates a new stream, associating it with the name of a stream previously requested by a get instruction. The contents of the stream will be sent later with blob instructions. The full size of the stream need not be known ahead of time.
- Arguments
object (integer) – The index of the object associated with this stream.
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the data being sent.
name (string) – The name of the stream associated with the object.
- filesystem
Allocates a new object, associating it with the given arbitrary filesystem metadata. The contents of files and directories within the filesystem will later be sent along streams requested with get instructions or created with put instructions.
- Arguments
object (integer) – The index of the object to allocate.
name (string) – The name of the filesystem.
- get
Requests that a new stream be created, providing read access to the object stream having the given name. The requested stream will be created, in response, with a body instruction.
Stream names are arbitrary and dictated by the object from which they are requested, with the exception of the root stream of the object itself, which has the reserved name “
/
”. The root stream of the object has the mimetype “application/vnd.glyptodon.guacamole.stream-index+json
”, and provides a simple JSON map of available stream names to their corresponding mimetypes. If the object contains a hierarchy of streams, some of these streams may also be “application/vnd.glyptodon.guacamole.stream-index+json
”.For example, the ultimate content of the body stream provided in response to a get request for the root stream of an object containing two text streams, “A” and “B”, would be the following:
{ "A" : "text/plain", "B" : "text/plain" }
- Arguments
object (integer) – The index of the object to request a stream from.
name (string) – The name of the stream being requested from the given object.
- put
Allocates a new stream, associating it with the given arbitrary object and stream name. The contents of the stream will later be sent with blob instructions.
- Arguments
object (integer) – The index of the object associated with this stream.
stream (integer) – The index of the stream to allocate.
mimetype (string) – The mimetype of the data being sent.
name (string) – The name of the stream within the given object to which data is being sent.
- undefine
Undefines an existing object, allowing its index to be reused by another future object. The resource associated with the original object may or may not continue to exist - it simply no longer has an associated object.
- Arguments
object (integer) – The index of the object to undefine.
Client handshake instructions
- audio
Specifies which audio mimetypes are supported by the client. Each parameter must be a single mimetype, listed in order of client preference, with the optimal mimetype being the first parameter.
- connect
Begins the connection using the previously specified protocol with the given arguments. This is the last instruction sent during the handshake phase.
The parameters of this instruction correspond exactly to the parameters of the received args instruction. If the received args instruction has, for example, three parameters, the responding connect instruction must also have three parameters.
- image
Specifies which image mimetypes are supported by the client. Each parameter must be a single mimetype, listed in order of client preference, with the optimal mimetype being the first parameter.
It is expected that the supported mimetypes will include at least “image/png” and “image/jpeg”, and the server may safely assume that these mimetypes are supported, even if they are absent from the handshake.
- name
Specifies the human-readable name of the user joining a connection. A single, string value is expected for this, and guacd does not expect or require that this value be unique among other users connected to the server or connection. The type of name provided is completely up to the client implementation.
- select
Requests that the connection be made using the specified protocol, or to the specified existing connection. Whether a new connection is established or an existing connection is joined depends on whether the ID of an active connection is provided. The Guacamole protocol dictates that the IDs generated for active connections (provided during the handshake of those connections via the ready instruction) must not collide with any supported protocols.
This is the first instruction sent during the handshake phase.
- Arguments
identifier (string) – The name of the protocol to use, such as “vnc” or “rdp”, or the ID of the active connection to be joined, as returned via the ready instruction.
- size
Specifies the client’s optimal screen size and resolution.
- Arguments
width (integer) – The optimal screen width.
height (integer) – The optimal screen height.
dpi (integer) – The optimal screen resolution, in approximate DPI.
- timezone
Specifies the timezone of the client system, in IANA zone key format. This is a single-value parameter, and may be used by protocols to set the timezone on the remote computer, if the remote system allows the timezone to be configured. This instruction is optional.
- Arguments
timezone (string) –
- video
Specifies which video mimetypes are supported by the client. Each parameter must be a single mimetype, listed in order of client preference, with the optimal mimetype being the first parameter.
Server handshake instructions
- args
Reports the expected format of the argument list for the protocol requested by the client. This message can be sent by the server during the handshake phase only.
The first parameter of this instruction will be the protocol version supported by the server. This is used to negotiate protocol compatibility between the client and the server, with the highest supported protocol by both sides being chosen. Versions of Guacamole prior to 1.1.0 do not support protocol version negotiation, and will silently ignore this instruction.
The remaining parameters of the args instruction are the names of all connection parameters accepted by the server for the protocol selected by the client, in order. The client’s responding connect instruction must contain the values of each of these parameters in the same order.
Control instructions
- disconnect
Notifies the client or server that the connection is about to be closed. This message can be sent during any phase, and takes no parameters.
- nop
The “nop” instruction does absolutely nothing, has no parameters, and is universally ignored by both Guacamole clients and servers. Its main use is as a keep-alive signal, and may be sent by guacd, client plugins, or web applications when there is no activity to ensure the socket is not closed due to timeout.
- sync
Reports that all operations as of the given server-relative timestamp have been completed. Both client and server are expected to occasionally send sync to report on current operation execution state, with the server using sync to denote the end of a logical frame.
If a sync is received from the server, the client must respond with a corresponding sync once all previous operations have been completed, or the server may stop sending updates until the client catches up. For the client, sending a sync with a timestamp newer than any timestamp received from the server is an error.
- Arguments
timestamp (integer) – A valid server-relative timestamp.
Server control instructions
- error
Notifies the client that the connection is about to be closed due to the specified error. This message can be sent by the server during any phase.
- Arguments
message (string) – An arbitrary message describing the error
status (integer) – The Guacamole status code describing the error. For a list of status codes, see the table in Status codes.
- log
The log instruction sends an arbitrary string for debugging purposes. This instruction will be ignored by Guacamole clients, but can be seen in protocol dumps if such dumps become necessary. Sending a log instruction can help add context when searching for the cause of a fault in protocol support.
- Arguments
message (string) – An arbitrary, human-readable message.
- mouse
Reports that a user on the current connection has moved the mouse to the given coordinates.
- Arguments
x (integer) – The current X coordinate of the mouse pointer.
y (integer) – The current Y coordinate of the mouse pointer.
- ready
The ready instruction sends the ID of a new connection and marks the beginning of the interactive phase of a new, successful connection. The ID sent is a completely arbitrary string, and has no standard format. It must be unique from all existing and future connections and may not match the name of any installed protocol support.
- Arguments
identifier (string) – An arbitrary, unique identifier for the current connection. This identifier must be unique from all existing and future connections, and may not match the name of any installed protocol support (such as “vnc” or “rdp”).
Input/Event instructions
- key
Sends the specified key press or release event.
- Arguments
keysym (integer) – The X11 keysym of the key being pressed or released.
pressed (integer) – 0 if the key is not pressed, 1 if the key is pressed.
- mouse
Sends the specified mouse movement or button press or release event (or combination thereof).
- Arguments
x (integer) – The current X coordinate of the mouse pointer.
y (integer) – The current Y coordinate of the mouse pointer.
mask (integer) – The button mask, representing the pressed or released status of each mouse button.
- size
Specifies that the client’s optimal screen size has changed from what was specified during the handshake, or from previously-sent “size” instructions.
- Arguments
width (integer) – The new, optimal screen width.
height (integer) – The new, optimal screen height.
Status codes
Several Guacamole instructions, and various other internals of the Guacamole core, use a common set of numeric status codes. These codes denote success or failure of operations, and can be rendered by user interfaces in a human-readable way.
- 0 (
SUCCESS
) The operation succeeded. No error.
- 256 (
UNSUPPORTED
) The requested operation is unsupported.
- 512 (
SERVER_ERROR
) An internal error occurred, and the operation could not be performed.
- 513 (
SERVER_BUSY
) The operation could not be performed because the server is busy.
- 514 (
UPSTREAM_TIMEOUT
) The upstream server is not responding. In most cases, the upstream server is the remote desktop server.
- 515 (
UPSTREAM_ERROR
) The upstream server encountered an error. In most cases, the upstream server is the remote desktop server.
- 516 (
RESOURCE_NOT_FOUND
) An associated resource, such as a file or stream, could not be found, and thus the operation failed.
- 517 (
RESOURCE_CONFLICT
) A resource is already in use or locked, preventing the requested operation.
- 518 (
RESOURCE_CLOSED
) The requested operation cannot continue because the associated resource has been closed.
- 519 (
UPSTREAM_NOT_FOUND
) The upstream server does not appear to exist, or cannot be reached over the network. In most cases, the upstream server is the remote desktop server.
- 520 (
UPSTREAM_UNAVAILABLE
) The upstream server is refusing to service connections. In most cases, the upstream server is the remote desktop server.
- 521 (
SESSION_CONFLICT
) The session within the upstream server has ended because it conflicts with another session. In most cases, the upstream server is the remote desktop server.
- 522 (
SESSION_TIMEOUT
) The session within the upstream server has ended because it appeared to be inactive. In most cases, the upstream server is the remote desktop server.
- 523 (
SESSION_CLOSED
) The session within the upstream server has been forcibly closed. In most cases, the upstream server is the remote desktop server.
- 768 (
CLIENT_BAD_REQUEST
) The parameters of the request are illegal or otherwise invalid.
- 769 (
CLIENT_UNAUTHORIZED
) Permission was denied, because the user is not logged in. Note that the user may be logged into Guacamole, but still not logged in with respect to the remote desktop server.
- 771 (
CLIENT_FORBIDDEN
) Permission was denied, and logging in will not solve the problem.
- 776 (
CLIENT_TIMEOUT
) The client (usually the user of Guacamole or their browser) is taking too long to respond.
- 781 (
CLIENT_OVERRUN
) The client has sent more data than the protocol allows.
- 783 (
CLIENT_BAD_TYPE
) The client has sent data of an unexpected or illegal type.
- 797 (
CLIENT_TOO_MANY
) The client is already using too many resources. Existing resources must be freed before further requests are allowed.
Message Codes
The msg instruction must have at least one numeric argument that the client then uses to interpret the message and determine what action, if any, it should take based on the message. The following numeric codes are currently implemented for this instruction.
- 1 (
USER_JOINED
) Notifies the owner of a connection that another user has joined the connection. This message is expected to include two additional arguments: the guacd-generated UUID of the user who is joining the connection, and the arbitrary name of the user provided by the client during the handshake.
- 2 (
USER_LEFT
) Notifies the owner of a connection that another user has left the connection. This message is expected to include two additional arguments: the guacd-generated UUID of the user who is leaving the connection, and the arbitrary name of the user provided by the client during the handshake.