PVE 5.1 下,若不使用 SSH,可以透過兩種方式來操作 Linux Guest OS,VNC 或 xterm.js,兩者有一些不同,VNC 比較像是畫面的完整擷取,速度比較慢,xterm.js 是透過建立 serial port ,接收 term 的資料格式,就類似我們以前買個 serial 線來連接很多設備來進行設定那樣。
兩者的優缺點比較很簡單,VNC 支援圖型,但無法支援文字模式下的 copy paste,而 xterm.js 不支援圖型,但是支援 copy paste,用 xterm.js 就可以不用開啟 SSH,可以完全在 Web 模式下方便操作 Guest OS。
目前 PVE 本身(Host OS) 及 LXC 已經可以直接使用 xterm.js 來操作(如下圖) 不需要做任何設定,但是 KVM 的 Guest OS 的 serial port 則必須手動建立。
PVE 官方有提供教學教我們如何幫 Guest OS 建立 serial port,目前還沒有 GUI 方式,只能用命令創建,我現在也照著做看看,步驟有些和官方不同,因為在 PVE Cluster 下實驗結果可能有所出入,故我記錄我在 PVE Cluster 下的成功步驟。
關閉 VM,並且新增 serial port 給 VM
在PVE Host 中用 qm 命令建立 serial port,假設我的 VM ID 是 116
qm set 116 -serial0 socket
接著重開 VM,用 dmesg 確認是否有 ttyS 出現
dmesg | grep ttyS
如果出現如下圖,代表 serial port 有偵測到了。
先備份 VM 或做 SNAPSHOT ,接下來動作比較危險,要改開機設定
依照官方說明,必須在 /etc/default/grub 這個檔案,將 GRUB_CMDLINE_LINUX 參數改掉
原文是說
# in /etc/default/grub change the GRUB_CMDLINE_LINUX parameter to GRUB_CMDLINE_LINUX="quiet console=tty0 console=ttyS0,115200"
我則是在我的 CentOS 7 原本的 GRUB_CMDLINE_LINUX 中的 quiet 接著打上不足的而已,所以會像是這樣
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet console=tty0 console=ttyS0,115200"
最後按照官方說的,debian base 或 redhat base(centos) 有不同的更新 grub 設定檔的方式,來下命令
# debian based update-grub # redhat based grub2-mkconfig --output=/boot/grub2/grub.cfg
因為我是用 CentOS 7 , 所以就是下
grub2-mkconfig --output=/boot/grub2/grub.cfg
最後將 VM 重開機
測試 xterm.js 是否可用
由 PVE UI 介面測試 xterm.js 如下圖,看到開始連接 serial 了 .... 但是畫面一直停在那怪怪的
原來,再按一次 Enter 才行啊
終於成功了,可以在 xterm.js 操作命令,也可以 copy/paste 了,SSH 我可以用不著了。