Shell
如何為串列終端託管外殼?
我正在用 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
創建設備時自動啟動。