我正在用 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
创建设备时它可能会自动启动。