14
2024
05
16:34:26

PVE 为 QEMU VM 开启串口终端



mpty,/*!*/ /*!*/);--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(59,130,246,0.5);--tw-ring-offset-shadow: 0 0 transparent;--tw-ring-shadow: 0 0 transparent;margin-top: 0px;margin-bottom: 12px;padding: 0px">众所周知,在 Proxmox VE 中,LXC 容器能够直接用管理面板提供的 Xterm.js 连接到 Xterm 终端,而使用 QEMU 开启的 Linux 虚拟机就只能用 noVNC 连接到虚拟显示器上的输出。VNC 是图像形式的,意味着我们没法框选文本复制,也没法粘贴内容进去,要复制粘贴就得开个独立的 SSH 程序来完成。

那么有没有什么办法,能让 QEMU 开启的虚拟机,也能在管理面板直接连接终端呢?答案是可以,并且 PVE 官方 Wiki 也提供了相关方式。我查阅了几篇教程,给大家介绍一个我认为最简单的方式。


效果

开启前: noVNC
开启后: Xterm.js

为客户机添加串口

为需要开启串口终端的虚拟机添加一个串口,具体方式是在 PVE 面板内,在硬件菜单内新建一个串口 0.

当然也可以在 PVE 终端内使用指令来给客户机添加串口,其中 VMID 填写虚拟机的编号:

JavaScript" class="  language-javascript" style="--tw-shadow: 0 0 transparent;--tw-ring-inset: var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(59,130,246,0.5);--tw-ring-offset-shadow: 0 0 transparent;--tw-ring-shadow: 0 0 transparent;font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;font-size: 14px;padding: 1em;color: rgb(0, 0, 0);background-color: rgb(245, 242, 240);text-shadow: rgb(255, 255, 255) 0px 1px;text-align: left;word-spacing: normal;overflow-wrap: normal;line-height: 1.5;hyphens: none;overflow: auto">qm set <VMID> -serial0 socket


开启客户机 ttyS

/dev/tty0 是普通的 tty,是输出到屏幕上的。而 /dev/ttyS0 是串口 tty,意味着是输出到系统串口上的。我们开启串口 tty 后,PVE 宿主机就可以靠串口上的 tty 连接到虚拟机的 Xterm 了。

我们使用 getty 来开启串口 tty,并且使用 systemctl 进行守护。首先创建 systemctl 配置:

sudo nano /lib/systemd/system/ttyS0.service

然后将以下内容粘贴进文件内:

[Unit] 
Description=Serial Console Service
 [Service] 
 ExecStart=/sbin/getty -L 115200 ttyS0 xterm Restart=always 
 [Install] 
 WantedBy=multi-user.target

里面的参数代表:波特率 115200,选择 ttyS0,使用 xterm 终端。

然后刷新 systemctl,并且启用并启动该服务:

sudo systemctl daemon-reload 
sudo systemctl enable ttyS0 
sudo systemctl start ttyS0

接下来重启服务器,确保所有配置生效:

sudo reboot 0

现在,再到 PVE 面板里进入虚拟机的控制台,应该就不是启动的 noVNC 而是启动的 Xterm.js 直接连接到终端了,方便许多。

调整终端大小

实测发现,这样操作后,终端的行列数并不会自适应浏览器窗口的大小。我们使用 echo 查看一下目前的终端行列:

echo $LINES $COLUMNS

可以发现输出了 24 80,浏览器窗口怎么调整它都不会自适应。例如开启一个 top,发现只占了右上角。

我暂时还不知道这个问题该如何解决,不过一个治标不治本的方法是手动调整行列数。使用以下指令可以设置行列数:

stty cols <列数> rows <行数>

例如我设置为 180 列 50 行,top 便可以占满整个浏览器窗口了:

24 x 80
50 x 180





推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

本文链接:https://hqyman.cn/post/6082.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

请先 登录 再评论,若不是会员请先 注册

您的IP地址是: