Как переключить CR / LF на экране gnu?

#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 на экран, похоже, игнорируется?