직렬 터미널이 언제 연결(연결 해제)되었는지 확인하는 방법은 무엇입니까?

직렬 터미널이 언제 연결(연결 해제)되었는지 확인하는 방법은 무엇입니까?

나는12월 VT101USB RS-232 널 모뎀 케이블을 사용하여 Debian을 실행하는 Raspberry Pi 3의 직렬 터미널에 연결합니다. 터미널을 닫으면 쉘 세션이 종료되고, 터미널을 다시 열면 새 로그인 세션이 시작되기를 원합니다. 어떻게 해야 하나요? 이제 터미널을 닫았다가 다시 열면 Return 키를 누르는 등 Bash가 새 프롬프트를 표시하는 등의 작업을 수행할 때까지 화면이 공백으로 유지됩니다.

적어도 시스템이 USB 널 모뎀 케이블에서 데이터를 수신하는지 쿼리하는 방법을 알아낼 수 있다면 자동 로그인/로그아웃을 직접 스크립트할 수 있습니다. 제가 생각한 접근 방식 중 하나는 최근 사용자 입력이 없을 때 터미널에 응답 쿼리를 보내고, 잠시 후에도 응답이 없으면 터미널이 닫혀 있다고 가정하는 것입니다.

답변1

일반적인 접근 방식은 DTR("Data Terminal Ready") 신호가 떨어지는 시기를 감지하는 것입니다. 이를 위해서는 접지, 데이터 수신을 위한 연결, 데이터 전송을 위한 연결 이상의 것이 필요합니다.

sttyDTR 신호를 무시하도록 설정을 조정해야 합니다. 실행해 보세요 stty -clocal. 연결이 즉시 끊어지면 케이블에 적절한 핀이 연결되지 않은 것입니다. stty 명령을 실행한 후에도 여전히 셸 연결이 있는 경우 터미널을 닫았다가 열어보세요. 세션이 종료될 것으로 예상했습니다. 그렇지 않은 경우 직렬 케이블이 RS232 어댑터의 DSR("Data Set Ready") 신호를 DTR 입력으로 다시 루프할 수 있습니다. 어댑터에서 케이블을 뽑아서 이를 테스트하고 이로 인해 종료되는지 확인할 수 있습니다. 그렇다면 직렬 케이블을 다시 연결해야 합니다.

답변2

기존 하드웨어를 사용하여 끊김 감지를 수행하는 방법을 알 수 없었기 때문에 다음과 같은 소프트웨어 기반 솔루션을 만들었습니다.합몬In은 터미널에 CPR(Cursor Position Report) 시퀀스를 보내고 응답을 기다려 터미널이 온라인인지 여부를 결정합니다. 응답이 수신되지 않으면 단말기는 오프라인으로 간주됩니다. 저장소에는 대신 사용할 수 있는 스크립트 및 시스템 단위 파일이 포함되어 있습니다.연령(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

관련 정보