1

В ответ на другой вопрос Крис Пейдж сказал, что Терминал может определять, когда параметры терминала находятся в состоянии, которое, вероятно, будет для ввода пароля. Например, терминал может быть в готовом режиме с отключенным эхом символа.

Как Терминал обнаруживает это? Есть ли API, где вы можете подписаться на изменения параметров терминала? Терминал опрашивает? Отправляется ли на терминал специальный символ при изменении параметров терминала?

3 ответа3

1

Терминал опрашивает состояние устройства tty с помощью tcgetattr(3) x-man-page://3/tcgetattr и проверяет, установлен ли флаг ICANON c_lflag, а флаг ECHO - нет.

Он опрашивается после получения вывода от удаленной программы или когда пользователь вводит текст с использованием встроенного метода ввода, который может потребоваться заблокировать для отображения ввода пользователя в виде «помеченного» текста.

1

Так как Terminal.app является закрытым исходным кодом, никто не может сделать больше, чем предположить, что именно он делает (опрос или некоторая функция уведомлений, предоставляемая Apple). В любом случае, он имеет полный контроль над данными, перемещающимися между псевдотерминалами master/slave, и может опрашивать их, используя вызовы POSIX termios, такие как tcgetattr чтобы увидеть текущие режимы терминала.

0

Приложение Terminal связывается с процессом оболочки (bash) через устройство pty (pseudotty). Когда bash или другой процесс переходит в режим "пароля", он изменяет свойства устройства pty, отправляя управляющую последовательность ANSI

Я не уверен, что другой процесс может перехватить связь (нужно проверить мои книги по POSIX).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .