在 Linux 上将 shell 转发到串行

在 Linux 上将 shell 转发到串行

我正在尝试将 shell 转发到串行 (USB 到 RS232),以便我可以使用旧的单色 CRT 终端。

我如何将 shell 转发到串行端口,以便另一端可以像 TTY 一​​样发送命令和读取输出?

答案1

注意:答案汇总了来自各个站点的几个解决方案;目前我没有办法测试它们。


系统初始化

systemdLinux 可能会使用 sysvinit在各种终端上/etc/inittab生成getty。示例行可能如下所示(取自这本旧指南):

s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102

暴发户

如果您的操作系统使用upstart,则过程会有所不同。例如本指南

  1. 创建一个名为的文件,/etc/init/ttyS0.conf包含以下内容:

    # ttyS0 - getty
    #
    # This service maintains a getty on ttyS0 from the point the system is
    # started until it is shut down again.
    
    start on stopped rc RUNLEVEL=[12345]
    stop on runlevel [!12345]
    
    respawn
    exec /sbin/getty -L 115200 ttyS0 vt102
    
  2. 请求upstart启动getty

    sudo start ttyS0
    

系统化

根据本网站解决systemd方案可能很简单

要使用串行控制台,只需console=ttyS0在内核命令行上使用,它将自动为您systemd启动。getty

你可能会配置你的 GRUB2 来执行此操作。分析一下建筑维基如果需要的话,请根据您的发行版进行调整:

要使 grub 启用串行控制台,请/etc/default/grub在编辑器中打开。更改GRUB_CMDLINE_DEFAULT行以在 上启动控制台/dev/ttyS0。请注意,在下面的示例中,我们设置了两个控制台;一个在 上tty0,一个在串行端口上。

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,38400n8"

现在我们需要告诉 grub 控制台在哪里以及要启动什么命令才能启用串行控制台(注意,如上所述对于 Linux 内核,可以在 grub 中附加多个输入/输出终端,例如GRUB_TERMINAL="console serial"同时启用显示和串行):

## Serial console
GRUB_TERMINAL=serial
GRUB_SERIAL_COMMAND="serial --speed=38400 --unit=0 --word=8 --parity=no --stop=1"

grub.cfg使用以下命令重建文件:

grub-mkconfig -o /boot/grub/grub.cfg

重启后,getty将监听/dev/ttyS0,期望38400波特率、8数据位、无奇偶校验和一个停止位。Arch 启动时,systemd将自动启动一个getty会话,使用相同的设置监听同一设备。

两个网站都同意,如果你不想让 GRUB2 监听串行设备,而只想getty在启动后监听,那么你将需要类似

systemctl enable [email protected]
systemctl start [email protected]

一经请求

如果出现任何问题,请记住这getty只是一个程序,它可以按需运行或从运行rc.local。有关man getty详细信息,请参阅。我认为你的第一次尝试可能像

sudo getty -L 115200 ttyS0 vt102

(编辑)这是来自 OP 的反馈,它可能会帮助有类似问题的用户:

我必须这么做sudo su -c "…"才能让它正常工作。

相关内容