Переслать оболочку в сериал в Linux

364
V0idst4r

Я пытаюсь переслать оболочку на последовательный порт (USB на RS232), чтобы я мог использовать старый монохромный ЭЛТ-терминал.

Как я могу переслать оболочку на последовательный порт, чтобы другой конец мог отправлять команды и читать вывод, как TTY?

1
Если вы посмотрите на запущенные программы, вы должны увидеть некоторые примеры `getty` или` agetty`, обслуживающие ваши псевдо-терминалы (Ctrl-Alt-Fn), такие как `/ sbin / agetty --noclear tty1 linux`. Если вы создадите новый экземпляр с заменой `tty1` на имя устройства последовательного терминала, вы сможете войти в свой последовательный порт. Возможно, вам потребуется добавить последовательные параметры (скорость в бодах, биты на символ, четность и т. Д.), Если вы не готовы использовать значения по умолчанию. AFH 6 лет назад 1
Да, я тоже пробовал getty, за исключением того, что он убил вкладку моего терминала после ввода логина V0idst4r 6 лет назад 0
Мне не понятно, что вы имеете в виду. Является ли вкладка терминала, которая запустила `getty`? Вы получаете оболочку на последовательном терминале? AFH 6 лет назад 0
Я получаю приглашение для входа в систему, и как только я ввожу свое имя пользователя, оно убивает tty, в котором я использую agetty. (И тогда на моем терминале ничего не происходит, пока я не запустил его снова). Я подозреваю, что мне нужно запустить agetty из моей системы инициализации? V0idst4r 6 лет назад 0
Возможно. В Ubuntu процессы `getty` запускаются из` / etc / init / tty? .Conf`. AFH 6 лет назад 0
Неважно, оказывается, это была проблема с sudo. Спасибо! V0idst4r 6 лет назад 0

1 ответ на вопрос

2
Kamil Maciorowski

Примечание: ответ объединяет несколько решений с разных сайтов; на данный момент у меня нет возможности их проверить.


SysVinit

Pre- systemdLinux может использовать sysvinit /etc/inittabдля порождения gettyна различных терминалах. Пример строки может выглядеть так (взято из этого старого руководства ):

s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102 

Выскочка

Если ваша ОС использует upstart, процедура отличается. Например, есть следующее руководство :

  1. Создайте файл с именем, /etc/init/ttyS0.confсодержащим следующее:

    # ttyS0 - getty # # This service maintains a getty on ttyS0 from the point the system is # started until it is shut down again.  start on stopped rc RUNLEVEL=[12345] stop on runlevel [!12345]  respawn exec /sbin/getty -L 115200 ttyS0 vt102 
  2. Попросить upstartначатьgetty

    sudo start ttyS0 

Systemd

В соответствии с этим сайтомsystemd решение может быть столь же просто, как

Чтобы использовать последовательную консоль, просто используйте console=ttyS0в командной строке ядра, и systemdона автоматически запустится gettyдля вас.

Вы, вероятно, настроите свой GRUB2 для этого. Проанализируйте, что говорит Arch Wiki, и при необходимости настройте его на свой дистрибутив:

Чтобы grub включил последовательную консоль, откройте /etc/default/grubв редакторе. Измените GRUB_CMDLINE_DEFAULTстроку, чтобы запустить консоль /dev/ttyS0. Обратите внимание, что в приведенном ниже примере мы установили две консоли; один включен tty0и один на последовательном порту.

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,38400n8" 

Теперь нам нужно указать grub, где находится консоль и какую команду запустить, чтобы включить последовательную консоль (обратите внимание, как указано выше для ядра Linux, можно добавить несколько терминалов ввода / вывода в grub, например GRUB_TERMINAL="console serial", активировать как display, так и serial):

## Serial console GRUB_TERMINAL=serial GRUB_SERIAL_COMMAND="serial --speed=38400 --unit=0 --word=8 --parity=no --stop=1" 

Восстановите grub.cfgфайл с помощью следующей команды:

grub-mkconfig -o /boot/grub/grub.cfg 

После перезагрузки gettyбудет прослушивать /dev/ttyS0, ожидая 38400бода, 8битов данных, без проверки четности и одного стоп-бита. Когда Arch загрузится, systemdавтоматически запустит gettyсеанс для прослушивания на том же устройстве с теми же настройками.

Оба сайта согласны с тем, что если вы не хотите, чтобы GRUB2 слушал на последовательном устройстве, а хотели gettyслушать только после загрузки, вам понадобится что-то вроде

systemctl enable serial-getty@ttyS0.service systemctl start serial-getty@ttyS0.service 

По запросу, по требованию

В случае каких-либо проблем помните, что gettyэто просто программа, она может быть запущена по требованию или из rc.local. Обратитесь к man gettyподробностям. Я думаю, что ваша первая попытка может быть как

sudo getty -L 115200 ttyS0 vt102 

(Изменить) Это отзыв от OP, он может помочь пользователям с подобными проблемами:

Я должен был сделать так, sudo su -c "…"чтобы он работал правильно.

Что касается требования, я должен был сделать sudo su -c "...", чтобы он работал правильно. V0idst4r 6 лет назад 0
Материал об использовании последовательного порта в качестве консоли не связан с материалом о включении getty и не зависит от init, поэтому он не подходит под заголовок «systemd» Wumpus Q. Wumbley 6 лет назад 0

Похожие вопросы