PVE 5.1 設定 KVM 虛擬機能夠使用 xterm.js

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 我可以用不著了。

發佈留言