用 Proxmox VE 的網頁主控台操作 Linux 文字介面的 VM 時,最不方便的就是不能貼上指令。noVNC 的剪貼簿要搭配圖形介面的環境(Windows、Linux 桌面),純文字的伺服器在 noVNC 裡只能一個字一個字打,長一點的指令或設定檔根本打不完。
解法是幫 VM 加一個序列埠主控台(serial console),改用 PVE 內建的 xterm.js 連線,就能像 SSH 一樣直接複製貼上。這在 VM 網路還沒設好、SSH 連不進去的時候特別好用。
PVE 端:加入序列埠
網頁介面
- 選擇 VM,進入「硬體」
- 「增加 → 序列埠」,編號選
0(也就是serial0) - VM 要完整關機再開機才會生效(在 VM 裡重新開機不算)
指令列
qm set 100 --serial0 socket
客體 Linux:開機參數加上序列埠
Debian / Ubuntu
編輯 /etc/default/grub:
nano /etc/default/grub
# 原本
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
# 改為
GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty0 console=ttyS0,115200n8"
console=tty0:原本的螢幕(noVNC)繼續保留console=ttyS0,115200n8:同時輸出到第一個序列埠,速率 115200、無同位元、8 位元- 寫在最後面的 console 會成為主要主控台,開機訊息與緊急模式都會出現在序列埠上
更新開機設定:
update-grub
RHEL / Rocky / Alma
grubby --update-kernel=ALL --args="console=tty0 console=ttyS0,115200n8"
選用:讓 GRUB 選單也出現在序列埠
想在序列埠上也看到 GRUB 的開機選單(例如要選舊核心開機),在 /etc/default/grub 再加上:
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200"
改完一樣要執行 update-grub。
關機再開機
poweroff
等 VM 完全關機後,從 PVE 網頁啟動,前面加的序列埠和開機參數會一起生效。
確認登入服務
開機參數有 console=ttyS0 時,systemd 會自動在 ttyS0 啟動登入服務,通常不用另外設定。確認一下:
systemctl status serial-getty@ttyS0.service
如果沒有啟動,手動啟用:
systemctl enable --now serial-getty@ttyS0.service
使用序列埠主控台
- 在 PVE 網頁選擇 VM,按「主控台」
- 主控台預設是 noVNC,從右上角的下拉選單改選 xterm.js
- 按一下 Enter,就會看到登入提示
登入之後就能直接用瀏覽器的複製、貼上(快捷鍵或滑鼠右鍵),貼一整段指令或設定檔都沒問題。
讓主控台預設就是 xterm.js
不想每次都切換,可以把 VM 的顯示設定改成序列埠:
qm set 100 --vga serial0
這樣按「主控台」就會直接開 xterm.js。代價是沒有 noVNC 畫面了,開機早期(BIOS、GRUB 沒設定序列埠時)的畫面會看不到,適合確定不需要圖形畫面的伺服器。
調整視窗大小
xterm.js 的視窗大小不會自動通知序列埠另一端,用 vim、top 這類全螢幕程式時畫面可能錯位。依視窗大小設定:
stty rows 45 cols 160
有安裝 xterm 套件的話,執行 resize 可以自動偵測。
注意事項
注意:同一個序列埠同時只能有一個連線。已經開著一個 xterm.js 視窗時,再開第二個會停在「starting serial terminal on interface serial0」等待,要把前一個關掉才能操作。
- 序列埠沒有鎖定畫面:離開前記得登出,不然下一個打開主控台的人會直接拿到已登入的 Shell
- Windows VM 不適用:Windows 沒有 Linux 這種序列埠登入的機制,Windows 的剪貼簿要用 SPICE 或遠端桌面
- 網路正常時還是建議用 SSH:序列埠主控台主要用在網路還沒設定好、SSH 連不上、或要看開機過程的時候
結論
幫 Linux VM 加上序列埠主控台只要三步:PVE 加 serial0、開機參數加 console=ttyS0、完整關機再開機。之後在 PVE 網頁就能用 xterm.js 直接複製貼上,網路還沒通的時候也能順利操作。
參考資料
- Proxmox VE 文件:Qemu/KVM Virtual Machines(Serial Port)
https://pve.proxmox.com/pve-docs/chapter-qm.html - Proxmox VE Wiki:Serial Terminal
https://pve.proxmox.com/wiki/Serial_Terminal - Linux kernel 文件:Linux Serial Console
https://docs.kernel.org/admin-guide/serial-console.html



