在 Proxmox VM 上复制和粘贴
发布: (2025年12月2日 GMT+8 18:52)
2 min read
原文: Dev.to
Source: Dev.to
问题
在通过 Web UI 使用 Proxmox KVM 时,复制粘贴功能表现不佳。
变通方法
我们编写了一个脚本,通过模拟键盘输入在 KVM 控制台上粘贴数据。打开 Chrome DevTools,聚焦到 Console 选项卡,然后粘贴以下代码:
function simulateKeyEvent(el, eventType, key, options = {}) {
const evt = new KeyboardEvent(eventType, { key, ...options });
el.dispatchEvent(evt);
}
const sendKey = (char) => {
let capsLockOn = false;
const SHIFT_NEEDED = /[A-Z!@#$%^&*()_+{}:"<>?~|]/;
const canvas = document.querySelector("canvas");
canvas.focus();
if (char === '\n') {
simulateKeyEvent(canvas, "keydown", "Enter");
simulateKeyEvent(canvas, "keyup", "Enter");
} else {
const needsShift = SHIFT_NEEDED.test(char);
const isUpperCase = char >= 'A' && char <= 'Z';
if (needsShift) {
simulateKeyEvent(canvas, "keydown", "Shift", { keyCode: 16 });
}
if (isUpperCase && capsLockOn) {
simulateKeyEvent(canvas, "keydown", char.toLowerCase());
simulateKeyEvent(canvas, "keyup", char.toLowerCase());
} else {
simulateKeyEvent(canvas, "keydown", char);
simulateKeyEvent(canvas, "keyup", char);
}
if (needsShift) {
simulateKeyEvent(canvas, "keyup", "Shift", { keyCode: 16 });
}
if (char === "CapsLock") {
capsLockOn = !capsLockOn;
console.log("Caps Lock state changed:", capsLockOn);
}
}
};
function cp(text) {
let index = 0;
function typeChar() {
if (index < text.length) {
sendKey(text[index]);
index++;
setTimeout(typeChar, 100); // Adjust delay as needed
}
}
typeChar();
}
使用方法
- 在 Proxmox 控制台 UI 中点击一次,使其获得焦点。
- 在 DevTools 的 Console 中运行:
cp('mydata')
将 'mydata' 替换为你想要粘贴的文本。即使没有 VM 的 SSH 访问权限,这种方法也能正常工作。