Shell

如何為串列終端託管外殼?

  • February 10, 2021

我正在用 arduino 建構一個啞終端,現在可以看到串列連接的輸出。我如何獲得登錄名/shell?我已經嘗試過screen /dev/ttyACM0了,這讓我可以在主機上鍵入並在終端螢幕上查看結果,但沒有外殼。使用 screen 的:exec /bin/sh命令在該控制 xterm 視窗上啟動一個 shell,但不再輸出到串列線路。各種嘗試agetty -L /dev/ttyACM0 9600只是坐下來掛一分鐘然後退出而沒有在螢幕上放任何東西。我努力了cu -l /dev/ttyACM0 -s 9600再次掛起,沒有螢幕互動。我已將 minicom 連接到類似於螢幕的 arduino 上的回顯鍵,但無法弄清楚如何獲得外殼。需要明確的是,我正在嘗試通過基於 arduino 的終端訪問我的主電腦,但我找不到讓我的主電腦通過 USB 串列連接向 arduino 提供 shell 會話的方法。

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創建設備時自動啟動。

引用自:https://unix.stackexchange.com/questions/633630