Как определить, когда последовательный терминал подключён (дис)?

(в bash) Точный ответ на ваш запрос - использовать GLOBIGNORE :

Выполнив эту команду:

LESS=+/'^ *GLOBIGNORE' man bash

чтение:

GLOBIGNORE
Список шаблонов, разделенных двоеточиями, определяющих набор имен файлов, которые следует игнорировать при раскрытии имени пути. Если имя файла, соответствующее шаблону раскрытия имени пути, также соответствует одному из шаблонов в GLOBIGNORE, оно удаляется из списка совпадений.

Итак, установив GLOBIGNORE следующим образом:

$  ls *
A_1.txt  A_t_1.txt  A_ts_1.txt  A_tsa_1.txt
$ GLOBIGNORE=*t_1.txt:*s_1.txt:*a_1.txt
$ ls *
A_1.txt

После этого вы можете восстановить GLOBIGNORE , чтобы оно было пустым, с не установленным GLOBIGNORE .

0
04.02.2019, 09:23
2 ответа

Обычный способ сделать это заключался в обнаружении, когда сигнал DTR ("терминал данных готов" )пропадает. Для этого требуется больше, чем просто заземление, прием данных и передача данных.

Необходимо настроить параметры stty, чтобы не игнорировать сигнал DTR. Попробуйте запустить stty -clocal. Если ваше соединение сразу прерывается, значит, на вашем кабеле не подключены соответствующие контакты. Если у вас все еще есть соединение с оболочкой после запуска команды stty, попробуйте выключить и снова включить терминал. Я бы ожидал, что сеанс будет убит тогда. Если нет, то возможно, что ваш последовательный кабель закольцовывает сигнал DSR («готовность набора данных» ), выходящий из адаптера RS232, обратно на его вход DTR;вы можете проверить это, отсоединив кабель от адаптера и посмотреть, выйдет ли это из системы. Если это так, вам необходимо перемонтировать последовательный кабель.

0
28.01.2020, 04:02

Поскольку я не смог понять, как обнаружить зависание с помощью имеющегося у меня оборудования, я создал программное -решение под названием HUPMon , написанное на C. In определяет, находится ли терминал в сети, отправляя сообщение о положении курсора (последовательность CPR )на терминал и ожидание ответа. Если ответ не получен, предполагается, что терминал находится в автономном режиме. Репозиторий включает скрипт и системный модуль, который можно использовать вместо agetty (8 ), который делает что-то похожее на этот скрипт:

stty 19200 sane -brkint ixoff -imaxbel

while :; do
    if [ "$(hupmon -1)" = "DEVICE_ONLINE" ]; then
        stty 19200 sane -brkint ixoff -imaxbel
        printf "\033[r\033[H\033[J" # Clear the screen.
        TERM="vt100" hupmon /bin/login
    fi

    sleep 1
done
0
28.01.2020, 04:02

Теги

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