Skip to content

GUACAMOLE-2301: Add serial console protocol support (web client) - #1230

Open
ciroiriarte wants to merge 7 commits into
apache:mainfrom
ciroiriarte:feature/serial-protocol
Open

ciroiriarte wants to merge 7 commits into
apache:mainfrom
ciroiriarte:feature/serial-protocol

Conversation

@ciroiriarte

@ciroiriarte ciroiriarte commented Jul 17, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Web-client support for the new serial console protocol (GUACAMOLE-2301), the companion to the guacamole-server PR. Adds the connection form, translations, and protocol registration so serial connections can be created and used from the Guacamole web interface.

Changes

  • Serial connection parameter form (serial.json) covering connection type and network protocol (raw/rfc2217/telnet), local device, network host/port, reverse-mode (reverse-connect, bind-address, listen-timeout), serial line settings (baud, data/stop bits, parity, flow control, line ending), features (break duration, paste delay, local echo, hangup-on-close), display, clipboard, recording, and typescript sections.
  • English translation strings for all serial fields and options.
  • Registration of serial in LocalEnvironment's known protocols so the connection editor lists it.
  • Client-side controls for Send Break and DTR/RTS.

Testing

The serial connection form was exercised in the administration interface (all sections render; the network-protocol list includes Raw/RFC 2217/Telnet; the reverse-mode fields appear), and connections were driven end-to-end through the browser against real hardware and a QEMU virtual serial console. Evidence is attached to GUACAMOLE-2301.

Coordinated PRs

Add the serial connection-parameter form (serial.json) and English
translations (PROTOCOL_SERIAL) for the new guacd serial protocol,
mirroring the telnet/ssh forms and the IPMI feature branch's
translation conventions.

Also add a minimal "Send Break" menu control, surfaced only for
serial connections, that opens the server's "serial-control" pipe
stream and writes the literal command "break", mirroring the pipe-
stream idiom already used by ManagedClient.setClipboard/sendArguments.
… controls

Adds the auto-reconnect, line-ending, local-echo, and hangup-on-close
connection parameters, and DTR/RTS control-line buttons in the serial
console menu (writing dtr-on/dtr-off/rts-on/rts-off to the serial-control
pipe, reusing the Send Break mechanism).
…ROTOCOLS

The serial protocol descriptor (serial.json) and translations were present,
but Guacamole enumerates available protocols from the hardcoded KNOWN_PROTOCOLS
list in LocalEnvironment, not from the descriptors on the classpath. Without a
"serial" entry there, serial.json was never loaded, so the protocol was absent
from the connection-editor's protocol dropdown and the admin form could not be
used to create serial connections (runtime connections via user-mapping were
unaffected). Add "serial" to KNOWN_PROTOCOLS so the connection form renders.
Expose the reverse (listen) mode parameters in the serial connection
form and English translation: reverse-connect, bind-address, and
listen-timeout, grouped under the Network section.
Add the telnet transport to the network-protocol choices in the serial
connection form and English translation.
@ciroiriarte
ciroiriarte force-pushed the feature/serial-protocol branch from 061c92a to 235e3e7 Compare August 9, 2026 13:02
guacd's serial plugin accepts "terminal-type" (default "linux"), which
selects the key sequences emitted by the terminal emulator, but the
connection form did not offer it. Add it to the display section with the
same options as SSH and telnet.
@ciroiriarte

Copy link
Copy Markdown
Contributor Author

Pushed bcf9045: the serial connection form now offers terminal-type, which guacd's serial plugin already accepts (default linux, used to choose the key sequences the terminal sends). It has the same options as SSH and telnet. The form's fields now match the server's argument list after the apache/guacamole-server#695 review changes. allowed-devices, which was removed there, was never part of this form.

@necouchman necouchman left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just a few minor changes.

@mike-jumper Are we good with protocol-specific items like this being added to the client controller, etc.? I suppose we already have it for the terminal options, but just want to make sure there isn't some other, more preferred way, to go about it?

…d translations

ManagedClient.sendSerialControl() now does nothing unless the connection
uses the serial protocol and is established. Before, it only checked
for a Guacamole.Client, which always exists, so it never actually
stopped a send.

Rewrite CLIENT.HELP_SERIAL so it covers the whole Serial Console menu
section (break and DTR/RTS) rather than just Send Break, and line up
SECTION_HEADER_SERIAL with the neighbouring entries.

Reformat the PROTOCOL_SERIAL translations to match the other protocols:
line up the colons, put a blank line between groups, and list numeric
options in ascending order. The strings themselves are unchanged.
@ciroiriarte

Copy link
Copy Markdown
Contributor Author

@necouchman The review comments are addressed in f07be98. Ready for another look when you have time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants