我正在尝试将 shell 转发到串行 (USB 到 RS232),以便我可以使用旧的单色 CRT 终端。
我如何将 shell 转发到串行端口,以便另一端可以像 TTY 一样发送命令和读取输出?
答案1
注意:答案汇总了来自各个站点的几个解决方案;目前我没有办法测试它们。
系统初始化
预systemd
Linux 可能会使用 sysvinit在各种终端上/etc/inittab
生成getty
。示例行可能如下所示(取自这本旧指南):
s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102
暴发户
如果您的操作系统使用upstart
,则过程会有所不同。例如本指南:
创建一个名为的文件,
/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
请求
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 "…"
才能让它正常工作。