我想要做的是将我的 PC 连接到 DEC vt320 终端,并能够向其输出 Linux 控制台,这样我就能够在终端中输入命令并在屏幕上发送回复。我想从 telnet 连接到东西,但我不知道如何通过串行连接。我的串行连接是/dev/ttyS0
答案1
看起来 Mint 19.3 使用systemd
,因此除非 Mint 修改了systemd
父发行版(Ubuntu 和最终 Debian)的配置,否则以下命令应该可以完成这项工作。
要立即启动串行端口以进行终端式登录访问:
sudo systemctl start serial-getty@ttyS0
要使配置在重新启动后仍然存在:
sudo systemctl enable serial-getty@ttyS0
运行第一个命令后,终端上应出现登录提示。如果没有,请按终端上的 Enter 键一次或两次:它可以帮助检测终端正在运行的数据传输速度。
(串行端口速度有时也称为波特率,尽管该术语仅适用于调制解调器连接以及涉及数模调制的类似连接,而不适用于普通数字数据传输。)
串行连接终端的默认systemd
配置包括串行端口速度自动检测,速度为每秒 115200、38400 和 9600 位。您可以使用命令确认这一点systemctl cat serial-getty@ttyS0
。它将输出该串行端口自动生成的单元文件。除此之外,它应该包含这一行来启动管理终端的实际进程:
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 %I $TERM
如果自动串行端口速度检测对您来说效果不佳,或者您想要指定默认列表中未包含的速度值,则您需要创建一个覆盖文件对于这个 systemd 服务:
sudo systemctl edit [email protected]
此命令将创建文件(如果需要)并在编辑器中打开它。
例如,要将串行端口速度检测锁定为 57600 bps,您可以将以下三行写入覆盖文件:
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' 57600 %I $TERM
第一行指定我们要覆盖[Service]
自动生成的服务文件部分中的内容,第二行指定我们要覆盖其ExecStart
行而不仅仅是添加另一个行,第三行是ExecStart
具有所需端口速度的新行和/或agetty
管理终端的进程的其他选项。
Unix 世界中此类进程的传统名称是getty
,Linux 通常使用增强的 (A替代/Autobauding)串行端口版本:agetty
.
答案2
最简单的答案是在串行设备上启动终端登录服务,如 telcoM 的答案所示。这不会改变Linux 控制台。将 Linux 控制台移至串行设备更容易实施,但会产生更多副作用。
只需console=ttyS0
在内核的命令行中使用引导加载程序(在您的情况下可能是 GRUB)提供的命令即可。
systemd 提供的生成器将看到这一点并自动启用serial-getty@ttyS0
服务。但是,此外,所有实际的安慰来自内核和写入 的程序的输出/dev/console
现在将转到您的 DEC VT320。
不幸的是,VT320不支持颜色。 (VT340 可以,而且只有 16 个。)
这是不幸的,因为现在很多程序只是硬连线 ECMA-48 颜色控制序列,包括那些向/dev/console
. systemd 包中的程序都这样做,只要环境进程#1的,他们去读,才不是包含TERM=dumb
。其他程序做出不同的决定,通常基于他们自己的进程环境,有些不根据终端做出决定类型根本没有,因为作者从未想过该程序的输出可能是具有真正单色终端的串行设备。
那么你还必须确保内核命令行指定TERM=dumb
,这不是对 VT320 的正确描述,而且严重不足。
进一步阅读
- https://unix.stackexchange.com/a/447098/5132
- https://unix.stackexchange.com/a/475043/5132
- 乔纳森·德博因·波拉德 (2018)。Linux 内核虚拟终端设备的手册页。提案。
- 乔纳森·德博因·波拉德 (2018)。
linux-console
。小吃指南。软件。 - 乔纳森·德博因·波拉德 (2018)。
linux-vt
。小吃指南。软件。
- 乔纳森·德博因·波拉德 (2018)。