你能在 /dev/pts/x 上启动 getty 吗?想要在我的 Linux KVM 服务器主机和 Windows Guest 之间建立串行连接

你能在 /dev/pts/x 上启动 getty 吗?想要在我的 Linux KVM 服务器主机和 Windows Guest 之间建立串行连接

以下是我的情况:
我有一台 Debian 服务器,在 Docker 中运行多个服务,在 KVM 中运行几个服务。
其中一个 KVM 主机是 Windows 10 VM,我实际上通过使用 GPU、USB 和其他一些东西的 PCI 直通将其用作桌面。
在 Windows VM 上,我还有一个连接到 /dev/pts/1 的虚拟串行设备

如果我在 Windows VM 上启动 Putty 并连接到 Com1,我就可以echo "something" > /dev/pts/1在我的主机服务器上,它会显示在我的 Putty 窗口中。我还可以cat /dev/pts/1在我的 Putty 窗口中输入数据,它会显示在 cat 输出中。

我想要做的是:我想要一个 getty 在 /dev/pts/1 上运行,这样我就可以简单地打开一个 putty 窗口并获取主机设备的控制台。

这主要是在我注意到我对主机设备上的网络堆栈做了一些操作但无法 ssh 到它时出现的。我试过只运行它,agetty -s 115200 -t 600 /dev/pts/1 linux但什么也没做。它似乎/etc/inittab不再存在了。
我考虑过只添加一个直接连接到主机的单独 vnic,但我不想这样做。

答案1

我发现agetty,默认终端登录处理程序不喜欢 PTS 设备。但是mgetty它工作得很好。不过设置起来有点棘手。

首先安装mgetty——在 Ubuntu 上sudo apt-get install mgetty

接下来,您需要为其设置一个 systemd 单元文件。我制作了一个专门用于 /dev/pts 文件的文件。将其保存为:/lib/systemd/system/[email protected]

[Unit]
Description=Smart Modem Getty(mgetty)
Documentation=man:mgetty(8)
Requires=systemd-udev-settle.service
After=systemd-udev-settle.service

[Service]
Type=simple
ExecStart=/usr/sbin/mgetty -r /dev/pts/%I
Restart=always
PIDFile=/var/run/mgetty.pid.pts%I

[Install]
WantedBy=multi-user.target

并重新加载 systemd 配置以应用更改:

sudo systemctl daemon-reload

接下来,您需要为任何传入连接设置终端类型。这在 中完成/etc/mgetty/mgetty.config。对于每个 pts,您需要添加:

port pts/2
    term vt220

将 /2 更改为您正在使用的任何 pts,然后适当地选择终端类型。

最后启用并启动您选择的 pty 的服务:

sudo systemctl enable mgetty-pts@2
sudo systemctl start mgetty-pts@2

现在,您应该可以在虚拟机的串行上登录。mgetty通过在服务启用/启动中指定不同的 pts 编号,您可以在不同的 pts 设备上启动任意数量的会话。对于 /dev/pts/3,它将是:

sudo systemctl enable mgetty-pts@3
sudo systemctl start mgetty-pts@3

因此请确保始终使用正确的数字。

相关内容