Disable Gitea workflows and stabilize VNC startup
Pause automated builds while updating the image, and improve VNC startup/logging with a one-way clipboard bridge for reliable browser sync.
This commit is contained in:
65
vnc-clipboard-bridge.js
Normal file
65
vnc-clipboard-bridge.js
Normal file
@@ -0,0 +1,65 @@
|
||||
// VNC → Browser clipboard sync only (one-way)
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
console.log('🔌 Clipboard sync initializing (VNC → Browser only)...');
|
||||
|
||||
const clipboardAvailable = navigator.clipboard && window.isSecureContext;
|
||||
|
||||
if (!clipboardAvailable) {
|
||||
console.warn('⚠️ Clipboard API not available - requires HTTPS or localhost');
|
||||
return;
|
||||
}
|
||||
|
||||
console.log('✓ Clipboard API available (HTTPS detected)');
|
||||
|
||||
let lastPanelClipboard = '';
|
||||
|
||||
// Wait for clipboard panel to be available
|
||||
function waitForPanel(callback) {
|
||||
const panel = document.getElementById('noVNC_clipboard_text');
|
||||
if (panel) {
|
||||
console.log('✓ Found noVNC clipboard panel');
|
||||
callback(panel);
|
||||
} else {
|
||||
setTimeout(() => waitForPanel(callback), 100);
|
||||
}
|
||||
}
|
||||
|
||||
waitForPanel(function(clipboardPanel) {
|
||||
console.log('✓ Setting up VNC → Browser clipboard sync');
|
||||
|
||||
// Sync VNC clipboard to browser
|
||||
function syncVNCToBrowser() {
|
||||
const text = clipboardPanel.value;
|
||||
if (text && text !== lastPanelClipboard) {
|
||||
lastPanelClipboard = text;
|
||||
|
||||
console.log('📋 VNC → Browser: ' + text.substring(0, 50) + (text.length > 50 ? '... (' + text.length + ' chars)' : ''));
|
||||
|
||||
navigator.clipboard.writeText(text).then(() => {
|
||||
console.log('✓ Synced to system clipboard');
|
||||
}).catch(err => {
|
||||
console.error('✗ Failed to write to clipboard:', err);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Monitor changes to the clipboard panel
|
||||
const observer = new MutationObserver(syncVNCToBrowser);
|
||||
clipboardPanel.addEventListener('input', syncVNCToBrowser);
|
||||
clipboardPanel.addEventListener('change', syncVNCToBrowser);
|
||||
|
||||
// Poll the panel periodically as fallback
|
||||
setInterval(syncVNCToBrowser, 300);
|
||||
|
||||
observer.observe(clipboardPanel, {
|
||||
attributes: true,
|
||||
childList: true,
|
||||
characterData: true,
|
||||
subtree: true
|
||||
});
|
||||
|
||||
console.log('✓ VNC → Browser clipboard sync ACTIVE');
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user