如何为串行终端托管 shell?

如何为串行终端托管 shell?

我正在用 arduino 构建一个哑终端,现在我可以看到串行连接的输出。我如何获得登录名/shell?我已经尝试过screen /dev/ttyACM0,这让我可以在主机上键入并在终端屏幕上查看结果,但没有 shell。使用 screen 的:exec /bin/sh命令在控制 xterm 窗口上启动 shell,但不再输出到串行线路。进行了各种尝试,只需agetty -L /dev/ttyACM0 9600坐下并挂起一分钟,然后退出,而无需在屏幕上放置任何内容。我已经尝试过了cu -l /dev/ttyACM0 -s 9600,它再次挂起,没有屏幕交互。我已经将 minicom 连接到 arduino 上,类似于屏幕,但不知道如何获取 shell。需要明确的是,我正在尝试通过基于 arduino 的终端访问我的主计算机,但我找不到一种方法让我的主计算机通过 USB 串行连接向 arduino 提供 shell 会话。

答案1

agetty似乎对问题相当安静。我试过:

$ strace -e open agetty -I 'hello\012' -L /dev/ttyS0 9600

它打开了/dev//dev/ttyS0,当然失败了。然后它挂了几秒钟然后停了下来。

手册页确实说它需要一个相对文件名,所以我尝试了:

$ strace -e open agetty -I 'hello\012' -L ttyS0 9600

这次它打开了正确的设备,但又失败了:

open("/dev/ttyS0", O_RDWR|O_NOCTTY|O_NONBLOCK) = -1 EACCES (Permission denied)

最后,这成功了,并在 tty 上写了一些东西:

$ sudo strace -e open agetty -I 'hello\012' -L ttyS0 9600

您还应该添加setsid评论中提到的内容。您还可以使用 systemd(如果有)来启动登录:

$ sudo systemctl start serial-getty@ttyACM0

agetty--keep-baud 115200,38400,9600.如果您使用systemctl enable该服务,则每当ttyACM0创建设备时它可能会自动启动。

相关内容