Skip to content

Custom build: RDP file transfer, WOL broadcast, FreeRDP fix, clipboar…#1141

Open
diaverso wants to merge 13 commits intognmyt:mainfrom
diaverso:main
Open

Custom build: RDP file transfer, WOL broadcast, FreeRDP fix, clipboar…#1141
diaverso wants to merge 13 commits intognmyt:mainfrom
diaverso:main

Conversation

@diaverso
Copy link
Copy Markdown

📋 Description

This PR adds several enhancements to the Nexterm custom build focused on RDP file transfer support, Wake-on-LAN improvements, FreeRDP compatibility fixes, and clipboard paste functionality for Guacamole sessions.

RDP File Transfer: Enables drag-and-drop file upload and file download through Guacamole's drive redirection (SFTP). Files can be uploaded by dragging them onto the RDP session, and the shared drive is accessible from within the remote desktop.

WOL Broadcast Address: Adds a configurable broadcast address field for Wake-on-LAN, allowing users to specify a custom broadcast IP instead of the default 255.255.255.255. This is essential for WOL across different subnets/VLANs.

FreeRDP Fix: Updates the Dockerfile to use alpine:3.19 and switches from freerdp2-dev to freerdp-dev freerdp, fixing compatibility issues with the FreeRDP build and plugin loading.

Clipboard Paste: Fixes Ctrl+V paste in Guacamole RDP sessions by sending proper key events, enabling clipboard content to be pasted into remote desktop applications.

🚀 Changes made to ...

  • 🔧 Server
  • 🖥️ Client
  • 📚 Documentation
  • 🔄 Other: Dockerfile, docker-start.sh, locales

✅ Checklist

  • My code follows the style guidelines of this project
  • I have performed a self-review of my own code
  • I have looked for similar pull requests in the repository and found none
  • This pull request does not contain translations (translations are managed through Crowdin)

🔗 Related Issues

@The13thTimelord
Copy link
Copy Markdown

Just given this a small test drive building direct, The File transfer works great expect because it's going to "/tmp/nexterm-drives/<>" it's wiped on every single session, Would it make more sense to move this to say /app/data/rdpdrive or something similar? That way it will be consistent across sessions as I said over on: #942

@diaverso
Copy link
Copy Markdown
Author

Just given this a small test drive building direct, The File transfer works great expect because it's going to "/tmp/nexterm-drives/<>" it's wiped on every single session, Would it make more sense to move this to say /app/data/rdpdrive or something similar? That way it will be consistent across sessions as I said over on: #942

Changes made, thank you for your contribution.

@TKaxv-7S
Copy link
Copy Markdown

It worked !!!
Thank you for your contribution ! ♥️

diaverso and others added 8 commits March 25, 2026 19:32
- GuacdClient: fix false-positive error detection by anchoring regex to
  instruction boundaries ((?:^|;)\d+\.error,) to avoid matching .error,
  inside filenames or batched data; forward data to client before closing
- GuacamoleRenderer: add auto-reconnect (up to 3 attempts, 2s delay) on
  disconnect instead of immediately removing session from UI
- GuacamoleRenderer: fix clipboard interval leak by saving ref and
  clearing on cleanup; add error logging for clipboard write failures
- GuacamoleRenderer: fix uploadFileToRemote to handle server ACK errors
  via writer.onack and prevent double-settle with settled flag

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Previously checkClipboardPermission() only checked for "granted" state
and returned false for "prompt", so the polling never started and no
dialog was shown. Now calling navigator.clipboard.readText() directly
when state is "prompt" triggers the native browser permission dialog.
Also handles the case where the permissions API itself is unsupported.

Fixes gnmyt#1207

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Addresses SonarCloud warning: prefer RegExp.exec() over String.match()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fixes SonarCloud warning: 'config.wolBroadcastAddress' is missing in
props validation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Extract startClipboardPolling and initClipboardPolling out of
handleClipboardEvents to keep nesting at max 4 levels deep.

Fixes SonarCloud: Refactor this code to not nest functions more than
4 levels deep.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@sonarqubecloud
Copy link
Copy Markdown

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.

3 participants