Я пытаюсь настроить обратный Telnet (Telnet to COM) на Mac OS X 10.9.5 (Mavericks). Mac подключен к последовательному устройству. У меня нет проблем с доступом к последовательному устройству с Mac с помощью screen:
screen /dev/cu.USBserial
Однако я хотел бы получить удаленный доступ к устройству через Telnet.
Я пробовал использовать Netcat ( nc
) и имел ограниченный успех. Команда, которую я использовал, была:
nc -l 9999 > /dev/cu.USBserial < /dev/cu.USBserial
И тогда я могу подключиться к устройству через Telnet. Однако это не работает по двум причинам:
- Для интерактивного пользовательского интерфейса ввод по сути буферизуется строками до тех пор, пока я не нажму return.
- Все мои вводы возвращаются ко мне. В реальной жизни устройство должно отражать мои вводимые символы.
Как правильно это сделать?
решение1
Самый простой способ:
telnet
(или скорееssh
) на ваш Mac- введите
screen /dev/cu.USBserial
команду
Теперь, если вы не хотите подключаться к своему Mac напрямую через COM-порт или разрешить другим делать это и ничего больше, вот способ:
- Создайте выделенного пользователя на вашем Mac. Давайте назовем его "comport" и войдите в систему как этот пользователь.
Создайте скрипт подключения для этого пользователя. Создайте файл с именем
/Users/comport/log2com.sh
и вставьте в него эти строки:#!/bin/bash /usr/bin/screen -R /dev/cu.USBserial
Разрешите выполнение скрипта, выполнив следующую команду в терминале:
chmod +x /Users/comport/log2com.sh
Наконец, установите этот скрипт как оболочку входа вашего пользователя. Для этого в Системных настройках > Пользователи и группы, в списке пользователей щелкните правой кнопкой мыши по пользователю и выберите "Дополнительные параметры". Затем в поле "оболочка" введите
/Users/comport/log2com.sh
и нажмите OK.
Вот и все. Теперь вы можете подключиться по telnet (я бы даже рекомендовал ssh
!) к этому логину на вашем Mac, чтобы попасть прямо на экран.
Обратите внимание, что для выхода вам нужно сделать это экранным способом (обычно Ctrl+ A, затем :quit
Return).
Протестировано на OSX 10.10.5. Дайте знать, если сработало.
решение2
Я нашел решение. В пакете Python PySerial есть класс rfc2217. У них есть пример приложения, которое работает как сервер telnet:
https://pyserial.readthedocs.org/en/latest/examples.html
$ python rfc2217_server.py /dev/tty.serial
открывает порт 2217, который позволяет подключаться через telnet. Это именно то, что я хотел.