В UNIX tty (как и многие другие) отображается в виде файла. Данные, записанные на tty-устройство, поступают на терминал, а данные, поступающие с терминала, доступны для чтения на tty.
Если tty является аппаратным последовательным портом, то записанные в него данные отправляются по проводам, а данные, поступающие по проводам, появляются на tty.
Если tty - это видео-консоль машины, то записанные в нее данные отображаются на экране, а данные, поступающие с клавиатуры, появляются на tty.
Если tty является псевдо-tty (виртуальным терминалом), подключенным к эмулятору X-терминала, например, gnome-terminal
тогда записанные в него данные доставляются в программное обеспечение эмулятора X-терминала и, в свою очередь, отображаются в окне, а данные, введенные в это окно, доступны. для чтения на виртуальном терминале. Говорят, что программное обеспечение подключено к «главному» концу псевдотерминала. Реальные терминалы не имеют «главного» конца, потому что за ними находится реальное устройство (например, последовательный порт), а не виртуальное устройство, реализованное программным обеспечением.
Таким образом, вы уже можете видеть, что не имеет смысла просить эмулятор терминала X работать на произвольном tty-устройстве, таком как /dev/ttyS0
(настоящий последовательный порт в Linux). Это должно быть псевдо-tty.
Но может ли эмулятор терминала выбрать числовой идентификатор используемого им псевдотерминального устройства? В принципе, ядро могло бы разрешить это, но на самом деле интерфейс ядра для выделения нового псевдотерминала не поддерживает его: ядро делает свой выбор. (В модели SysV псевдо-терминалы создаются путем открытия специального устройства, называемого /dev/ptmx
псевдо-терминалом, и автоматически выделяется доступное устройство с наименьшим номером.)
Но: зачем вам нужно выбирать номер псевдотерминального устройства, которое будет выделено? Ядро выбирает неиспользованное, которое гарантированно будет доступно и пригодно для использования. У вас есть причина, по которой вы бы предпочли, если бы она выбрала другую?
Что касается вас, то другой вопрос:
Я видел много tty-файлов в / dev и много pts-файлов в / dev / pts / Я не знаю, почему их так много. Они все используются?
Это зависит от системы. В некоторых системах все возможные псевдотерминальные устройства заранее созданы /dev/pts
или /dev
независимо от того, используются они или нет. В других случаях узлы устройства существуют только в том случае, если псевдо-терминал используется. Вы говорите, что используете Ununbu, который использует Linux, который является последним типом. Итак, да, все узлы устройств, которые вы видите, в /dev/pts
настоящее время используются.
Но для временного доступа это не очень удобно. Я хочу использовать socat для передачи tty или pty клиенту. Затем клиент может запустить терминал с этим pty или tty.
Если вы хотите, чтобы socat
какое-либо другое программное обеспечение было подключено к главному концу псевдотерминала, вам необходимо, чтобы это программное обеспечение специально поддерживало это. Но вам повезло, потому что socat
это так. Например, если я бегу:
socat PTY,link=/tmp/socat.pty TCP-LISTEN:2222 &
sleep 1 && ( setsid bash ) </tmp/socat.pty >/tmp/socat.pty 2>&1
Я могу получить оболочку, подключившись к порту 2222 откуда-то еще. Очень опасно с точки зрения безопасности !!!