我想使用GNU屏幕来监控串行USB端口,如下所示:
$ screen /dev/ttyUSB0 115200
但我需要调整一些终端线设置。我做了几次尝试,但似乎都没有效果。例如,要为换行符而不仅仅NL发送NL + CR,终端线设置为onlcr。
尝试1 - 没有任何特殊设置:
$ screen /dev/ttyUSB0 115200
# only sends NL
尝试2 - 通过屏幕:
$ screen /dev/ttyUSB0 115200,onlcr
# still only sends NL
尝试3 - 通过ssty:
$ stty -F /dev/ttyUSB0 onlcr
$ screen /dev/ttyUSB0 115200
# still only sends NL
尝试4 - 通过两者:
$ stty -F /dev/ttyUSB0 onlcr
$ screen /dev/ttyUSB0 115200,onlcr
# still only sends NL
尝试5 - 按其他顺序:
$ screen /dev/ttyUSB0 115200,onlcr
# then ctrl+a, ctrl+z to pause the screen session
$ stty -F /dev/ttyUSB0 onlcr
stty: /dev/ttyUSB0: Device or resource busy
在所有情况下,如果我运行stty检查终端线设置,我会得到:
在运行屏幕之前 - 请注意-onlcr存在:
$ stty -F /dev/ttyUSB0
speed 115200 baud; line = 0;
kill = ^H; min = 100; time = 2;
-icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo
更改stty设置 - 请注意-onlcr已经消失:
$ stty -F /dev/ttyUSB0 onlcr
$ stty -F /dev/ttyUSB0
speed 115200 baud; line = 0;
kill = ^H; min = 100; time = 2;
-icrnl -imaxbel
-opost
-isig -icanon -echo
运行屏幕后 - 请注意-onlcr再次返回:
$ stty -F /dev/ttyUSB0
speed 115200 baud; line = 0;
kill = ^H; min = 100; time = 2;
-icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo
就好像屏幕忽略任何stty设置并将它们重置为它自己的默认设置。在我测试它的两台机器上也是如此; Debain 8.7和macOS Sierra 10.12.4
我看过其他人面临类似问题的帖子,但都没有给出明确答案。很多人最终会推荐像minicom这样的屏幕替代品,但现在我很感兴趣。
像onlcr这样的stty设置可以和屏幕一起使用吗?
答案 0 :(得分:0)
我刚刚经历了相同的过程,只是为了找出屏幕上的垃圾,不管是什么。这里有一条评论建议更改屏幕源代码: How to toggle CR/LF in gnu screen?
最后,我很高兴找到一个更简单的哑终端程序,它允许在命令行上传递stty风格的参数: https://github.com/npat-efault/picocom
它还可以在启动时打印串口设置,以便您轻松检查它们。
软件包存在于Debian派生的发行版(sudo apt-get install picocom
)中,而对于其他软件包,似乎编译很简单。一个依赖是linenoise库,可以禁用它。
答案 1 :(得分:0)
我处理此问题的方法是在没有任何特殊终端选项的情况下启动screen
运行:screen /dev/ttyUSB0 115200
,然后让它保持运行,然后切换到另一个终端窗口并执行{ {1}}来自那里的命令。
如果你停止stty
,我认为它会以某种方式锁定设备(或者因为你没有使用screen
)。进入另一个窗口后,您可以键入sudo
,这将改变sudo stty -F /dev/ttyUSB0 onlcr
会话的行为。问题是screen
忽略了传递给它的设置,只是按照自己的方式配置tty。您可以在屏幕运行时键入screen
列出其他窗口中的设置,然后根据需要进行更改。 (请注意,在Mac上,sudo stty -F /dev/ttyUSB0 -a
应为小写。)
如果你只有一个终端窗口,那么它就有问题了,因为在后台放置-F
并使其保持运行只会混合shell和screen
进程之间的输入和输出流。
答案 2 :(得分:0)
如果你打开两个终端窗口,你可以做的另一件事是当没有任何工作时低级别的后备黑客攻击:在一个终端类型cat /dev/ttyUSB0
中。然后在另一个中使用sudo stty
设置所需的终端选项。然后,您可以通过echo "Some text" > /dev/ttyUSB0
从同一终端发送命令。您可以通过sed
或tr
来管理cat命令的输出。例如,cat /dev/ttyUSB0 | tr '\r' '\n'
会将收到的回车转换为换行符。