From 90aa26b04f56135064c9d493bb3d25eac81d95de Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Thu, 5 Jun 2025 09:49:56 +0800 Subject: [PATCH] Update RemoteDesktopModal.vue --- .../src/components/RemoteDesktopModal.vue | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/packages/frontend/src/components/RemoteDesktopModal.vue b/packages/frontend/src/components/RemoteDesktopModal.vue index ac7ce8a..51c3321 100644 --- a/packages/frontend/src/components/RemoteDesktopModal.vue +++ b/packages/frontend/src/components/RemoteDesktopModal.vue @@ -303,9 +303,30 @@ const setupInputListeners = () => { } }; - // Listen for display focus to sync clipboard + // Listen for display focus to sync clipboard (Host -> RDP) displayEl.addEventListener('focus', trySyncClipboardOnDisplayFocus); + // Listen for clipboard data from RDP (RDP -> Host) + // @ts-ignore + guacClient.value.onclipboard = async (stream, mimetype) => { + if (mimetype === 'text/plain') { + // @ts-ignore + const reader = new Guacamole.StringReader(stream); + let text = ''; + reader.ontext = (chunk: string) => { + text += chunk; + }; + reader.onend = async () => { + try { + await navigator.clipboard.writeText(text); + console.log('[RemoteDesktopModal] Received clipboard from RDP and wrote to host:', text.substring(0, 50) + (text.length > 50 ? '...' : '')); + } catch (err) { + console.warn('[RemoteDesktopModal] Could not write to host clipboard:', err); + } + }; + } + }; + } catch (inputError) { console.error("Error setting up input listeners:", inputError); // 添加错误日志 statusMessage.value = t('remoteDesktopModal.errors.inputError'); @@ -339,6 +360,11 @@ const removeInputListeners = () => { mouse.value.onmousemove = null; mouse.value = null; } + // 清理剪贴板监听器 + if (guacClient.value) { + // @ts-ignore + guacClient.value.onclipboard = null; + } }; const disableRdpKeyboard = () => {