#linux #serial-port #gnu-screen #tty
#linux #последовательный порт #gnu-screen #tty
Вопрос:
Я использую screen для чтения текста с последовательной консоли. Проблема в том, что на выходе, похоже, есть только новая строка n, но не возврат каретки r, поэтому дисплей выглядит так…
Line1
Line2
Line3
Интересно, есть ли какой-нибудь патч для исправления этой проблемы?
Комментарии:
1. Может быть, какая
stty
-то настройка? Хотя мне кажется странным, что вы видите это при чтении .2. @ninjalj, это было много лет назад. Тем не менее, имеет смысл наблюдать за этим во время чтения. В этом случае устройство не отправляет символы возврата каретки, поэтому
stty
указывает терминалу обрабатывать новую строку так, как если бы это была новая строка и возврат каретки. В противном случае мы можем видеть, что терминал переходит к следующей строке, но не возвращает указатель индекса на начало строки, как это было бы, еслиr
бы он был отправлен вместе сn
.
Ответ №1:
onlcr
предназначен для перевода всех исходящих запросов в c arriage возвратов.
stty -F /dev/ttyS0 inlcr
преобразует входящие новые строки в возврат каретки. Вы можете запустить это с другого терминала после запуска экрана, чтобы избежать любого сброса настроек, который экран может выполнить при запуске. К сожалению, однако, это только изменит проблему. Затем вы получите только возврат и никаких новых строк.
Что необходимо, так это возможность добавлять возврат к входящей новой строке, чтобы терминал получал nr
, что последовательное устройство должно выводить в первую очередь. Кажется, есть onlret
возможность сделать это для исходящих данных, но нет inlret
опции, которая, по-видимому, нужна в этом случае.
У меня точно такая же проблема (хотя я использую picocom), и я несколько дней гуглил, пытаясь найти стандартное исправление, но, похоже, ни у кого его нет. Существует ряд последовательных устройств, которые только выводят n
и просто не могут быть выведены rn
, и я отказываюсь верить, что все они принадлежат только двум пользователям Linux. Что дает !?
Комментарии:
1. В picocom вы можете добавить
--imap lfcrlf
параметры командной строки. Это переведет LF в CR LF после того, как они будут считаны с последовательного порта.2. Кроме того, для тех, кто использует Gtkterm, проверьте «CR LF auto» в меню «Конфигурация».
3. microcom обрабатывает отображение автоматически
4. » Вы можете запустить это с другого терминала после запуска экрана, чтобы избежать любого сброса настроек, который экран может выполнить при запуске «. — похоже, это верно не во всех случаях. На моем устройстве, если я попытаюсь запустить
stty
после запуска экрана, я получаюDevice or resource busy
.
Ответ №2:
Если вы используете miniterm.py программа, которая поставляется с pyserial, будет интерпретировать новые строки как crlf. Это не самый полнофункциональный эмулятор терминала, но для взаимодействия с простыми последовательными устройствами он выполняет свою работу.
Синтаксис использования (в OSX):
miniterm.py /dev/tty.usbserial-XXXXXX 115200
Замените XXXXXX на любое устройство, которое отображается в вашей системе.
Комментарии:
1. Спасибо, что поделились, экран действительно действовал мне на нервы!
Ответ №3:
Попробуйте stty onlcr
.
На странице руководства указано, что при выводе он будет переводить новые строки в пары возврат каретки / новая строка, что, похоже, вам нужно.
Комментарии:
1. Да, я пробовал это, но это не сработало. stty -F /dev/ttyS0 onlcr
2. Как ни странно, после того, как я использовал screen для открытия последовательного порта, настройка stty снова изменилась на -onlcr . Интересно, переопределяет ли экран настройку, установленную в stty? Команда, которую я использовал для запуска screen: screen /dev/ttyS0 115200
3. Интересно, похоже
screen
, сбрасывает TTY, на котором он запущен при запуске. Я не знаю, сможете ли вы обойти это без исправления и создания собственного двоичного файла.4. В исходном коде экрана определен tty.c (ONLCR). Я попробую
5. Кто-нибудь знает, как настроить tty.sh ?
Ответ №4:
В моем случае сработало: stty -F /dev/ttyACM0 -icrnl
Потому что serial был неявно настроен на перевод CR в NL. Эта команда возвращает его обратно. Обратите внимание на предшествующий символ минус icrnl
.
Комментарии:
1. Похоже, это не работает для меня. При запуске Screen сбрасывает все параметры, настроенные stty, поэтому это ничего не делает. Предоставление
-icrnl
на экран, похоже, игнорируется?