如何使用 getty 将 bash 进程连接到 tty _without_

如何使用 getty 将 bash 进程连接到 tty _without_

我将有两个串行 USB 设备相互连接,/dev/ttyUSB1并且/dev/ttyUSB2.我想/bin/bash连接到一端运行,以便我可以使用 picocom 连接到另一端并将picocompicocom 用作本地终端模拟器。

我尝试过这样的事情

setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1

然后用picocom连接到另一端,但我只是得到一个充满乱码的屏幕(:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$ 0m:~$)..(波特率匹配,并且两个终端可以与两端的两个picocom通信)

然而,我真的不知道自己在做什么。谁能告诉我这个秘密吗?


更正/更新:

在另一台计算机上,我不再收到以前收到的乱码。当我如上所述将 bash 连接到一个 tty 并使用 picocom 连接到另一端时,我现在收到提示,并且我可以运行命令,但我的命令不会回显给我(我只看到结果),而且我没有“作业控制”(我用 Ctrl+C 进行测试,这不会停止睡眠过程)


背景:

我已经通过另外两种方式成功使用 picocom 作为本地终端模拟器:

  1. 与盖蒂:

    sudo systemctl start [email protected]
    

    允许我成功连接到/dev/ttyUSB1picocom,但我必须登录。(感谢这个答案https://unix.stackexchange.com/a/772040/158192到上一个问题)

  2. 与索卡特

    $ socat -d -d PTY,raw,echo=0 EXEC:"/bin/bash",pty,stderr,setsid,sane
    2024/04/01 18:32:13 socat[40547] N PTY is /dev/pts/4
    ...
    

    这允许我像这样使用 picocom 作为本地终端picocom /dev/pts/4


所以是的,我应该能够自己将 /bin/bash 连接到 USB tty,对吧?但我的试验都有错误。

答案1

您的第一个示例看起来是正确的(但也请参阅底部的我的注释)。

我的桌子上有一台机器,我通过串行端口连接到它。在目标机器上,串口是/dev/ttyS0。在我的桌面上,端口是/dev/ttyUSB0.

如果我使用如下通信工具从主机连接picocom

$ picocom -b 115200 /dev/ttyUSB0

然后停止getty通常在串口上运行的程序并运行:

# systemctl stop serial-getty@ttyS0
# setsid bash > /dev/ttyS0 < /dev/ttyS0 2>&1

一切都按预期进行。在 中picocom,我看到:

root@radio0:/boot/firmware# tty
/dev/ttyS0

你是当然两种情况下的波特率是否匹配?您可以使用stty以下命令显式设置波特率:

# stty 115200 < /dev/ttyS0

如果您的目标是自动启动不需要登录的 bash shell,另请参阅本文(免责声明:我写的)描述了如何配置 getty 和 pam 来提供准确的服务。

答案2

这里有两个问题:

  • 正如已接受的答案所指出的那样,胡言乱语与问题中的任何内容无关,并且不能轻易复制
  • 作业控制和 echo 不起作用 - 解决方案重要的是在 bash 连接的一端使用“sane”:(可能在连接 bash 之前)
stty sane -F /dev/ttyUSB2
setsid /bin/bash </dev/ttyUSB2 >/dev/ttyUSB2 2>&1

这是内置于问题中 pts 版本的 socat 命令中的。

相关内容