Вопрос или проблема
Я пытаюсь использовать Минитель в качестве консоли для подключения к моему Ubuntu. Я прочитал много информации об этом, но, похоже, это работает со старыми версиями Ubuntu. Эти два файла:
- etc/inittab
- etc/gettydefs
… не работают для меня!
Мой inittab:
1:2345:respawn:/sbin/agetty ttyUSB0 4800v23
Мой gettydefs:
4800v23# B4800 CS7 PARENB -PARODD GLOBAL # B4800 ISTRIP CS7 PARENB -PARODD GLOBAL BRKINT IGNPAR ICRNL IXON IXANY OPOST ONLCR CREAD HUPCLISIG ICANON ECHO ECHOE ECHOK #@S login: #4800v23
Результат “sudo lsusb -v”:
Bus 003 Device 002: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x1a86 QinHeng Electronics
idProduct 0x7523 HL-340 USB-Serial adapter
bcdDevice 2.64
iManufacturer 0
iProduct 2 USB Serial
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0027
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 98mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 3
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 1
bInterfaceProtocol 2
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
can't get debug descriptor: Resource temporarily unavailable
Device Status: 0x0000
(Bus Powered)
Сегодня я могу сделать это:
sudo stty -F /dev/ttyUSB0 4800 parenb cs7 hupcl cread ignpar clocal ixon ixoff opost onlcr isig echoe echok echoctl echoke
и это:
echo "Hello Minitel" > /dev/ttyUSB0
… выводит Hello Minitel
на моем экране Minitel. Но я не могу получить приглашение на моем миниителе.
Спасибо за вашу помощь, и извините за мой “плохой английский” (я старый французский разработчик 😉
/etc/inittab
и /etc/gettydefs
были заменены системой systemd на многих системах. Вы можете создать модуль systemd для запуска agetty
на /dev/ttyUSB0
, используя команду
sudo systemctl edit serial-getty@ttyUSB0
Это запустит ваш редактор (установленный в переменной окружения EDITOR
) на временном файле, полном закомментированных строк. Добавьте 3 строки
[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 4800 - $TERM
в пустое место после первого набора комментариев и выйдите. Это должно создать файл
/etc/systemd/system/[email protected]/override.conf
и если вы выполните
systemctl cat serial-getty@ttyUSB0
вы должны увидеть ваши строки в конце, переопределяющие стандартный ExecStart
. Теперь вы можете запустить agetty
, запустив модуль:
sudo systemctl start serial-getty@ttyUSB0
Вы можете узнать, работает ли он, с помощью
systemctl status serial-getty@ttyUSB0
Вы можете включить его для запуска при перезагрузке:
sudo systemctl enable serial-getty@ttyUSB0
Я не знаю, как добавить какие-либо специфические настройки stty
, кроме скорости передачи, используя systemd, но, возможно, значения по умолчанию будут подходящими.
Ответ или решение
Подключение устройства Minitel1B к Ubuntu 20.04 для использования его в качестве консоли требует некоторой настройки из-за различий в управлении системными службами между более старыми и новыми версиями Ubuntu. В системах с init, таких как старые версии Ubuntu, конфигурация выполнялась с использованием файлов /etc/inittab
и /etc/gettydefs
. Однако, в более новых системах, включая Ubuntu 20.04, управление системными службами осуществляется с помощью systemd, что накладывает свои особенности на процесс настройки. Давайте рассмотрим, как можно настроить соединение вашего устройства Minitel1B с системой Ubuntu 20.04.
Теория
Система управления службами systemd внедряет концепцию unit-файлов для управления службами и демонами. Один из видов unit-файлов — это service-файл, который описывает команду, используемую для запуска службы, а также такие параметры, как условия перезапуска, переменные среды и зависимости от других служб. В нашей ситуации нам будет нужно создать и настроить такой systemd unit для управления процессом agetty, который будет использован для работы с Minitel1B.
AGetty — это утилита, используемая для управления терминальными линиями. Она отвечает за инициализацию терминала и предъявление приглашения для ввода имени пользователя, после чего передает управление программе login, которая запрашивает пароль и устанавливает сеанс пользователя. В контексте использования Minitel1B, agetty будет отвечать за установку соединения и обеспечение возможности ввода команд с Minitel.
Пример
-
Редактирование systemd unit для agetty:
Вам нужно создать или отредактировать конфигурацию для
serial-getty@ttyUSB0
через systemd. Это делается с помощью команды:sudo systemctl edit serial-getty@ttyUSB0
Эта команда откроет ваш текстовый редактор в режиме редактирования unit-файлов systemd. Изменения, которые вы сделаете, будут сохранены в
/etc/systemd/system/[email protected]/override.conf
. -
Добавление конфигурации agetty:
Добавьте следующие строки в отредактированный файл, чтобы настроить agetty для работы с вашим адаптером USB-Serial и устройством Minitel1B:
[Service] ExecStart= ExecStart=-/sbin/agetty -o '-p -- \\u' --keep-baud 4800 - $TERM
Эти строки очищают текущую настройку ExecStart и устанавливают новую, которая будет запускать agetty с необходимыми параметрами.
-
Инициализация и тестирование:
После того как изменения внесены, запустите службу с помощью команды:
sudo systemctl start serial-getty@ttyUSB0
Для проверки статуса службы и подтверждения ее работы, используйте:
systemctl status serial-getty@ttyUSB0
С помощью этой команды вы увидите, активна ли служба и функционирует ли она без ошибок.
-
Автозапуск службы при загрузке:
Чтобы обеспечить запуск agetty каждый раз при перезапуске системы:
sudo systemctl enable serial-getty@ttyUSB0
Применение
После выполнения описанных выше шагов, устройство Minitel1B должно начать функционировать как консоль для вашей системы Ubuntu 20.04. Вы сможете вводить команды на Minitel, и они будут обрабатываться вашей системой, как если бы команды вводились непосредственно в терминале Ubuntu.
Несмотря на то, что данная инструкция касается специфики подключения устройств через старые протоколы и интерфейсы, она показывает, как современные системы с systemd обеспечивают гибкость и позволяют адаптировать существующие инструменты для новых условий. При возникновении дополнительных проблем с настройкой или специфичными потребностями, документация systemd и man-страницы для agetty предоставят исчерпывающее руководство по доступным параметрам конфигурации.