SSH를 통해 터미널 크기 변경을 학습하는 프로그램에 의해 터미널 크기 변경이 변경되는 것을 방지합니다.

SSH를 통해 터미널 크기 변경을 학습하는 프로그램에 의해 터미널 크기 변경이 변경되는 것을 방지합니다.

우리는 SSH를 통해 텍스트 기반 프로그램을 사용합니다. 세션은 일부 설정을 수행한 다음 쉘 없이 프로그램을 시작하는 로그인 스크립트로 시작됩니다. 퍼티에서는 잘 작동합니다. 모바일 SSH 클라이언트와 함께 사용하려고 합니다.테미우스.

문제는 xHarbour 프로그램이 화면 회전이나 키보드 닫기 등의 터미널 변경 사항을 인식한다는 것입니다. 따라서 터미널 크기를 조정하면 xHarbour 프로그램이 콘솔 크기를 인식하고 변경합니다.

i를 사용하면 stty x rows y columns초기 터미널 크기를 설정할 수 있습니다.

프로그램이 시작되기 전에 이 명령들을 init 스크립트에 넣어보려고 했는데, 클라이언트의 화면 크기가 변경되면(키보드 꺼짐, 화면 회전) 자동으로 값이 다시 변경되어 출력이 엉망이 됩니다. 또한 shopt -u checkwinsize셸에 영향을 주어 터미널이 고정된 크기를 갖는 것처럼 보이지만 xHarbour 프로그램에는 영향을 미치지 않는 를 사용했습니다 .

SSH 세션이 해당 대역 내 명령을 수신하지 못하도록 하는 방법이 있습니까?여기? 내가 아는 한, termius에서는 터미널 크기를 설정할 수 없습니다. 이를 허용하는 Android(또는 iOS) 클라이언트가 있나요?

대상 시스템은 Centos 6,7입니다.

답변1

Linux 및 BSD 시스템에서는 터미널 크기가 변경되면 터미널에 연결된 하나 이상의 프로세스가 신호를 수신합니다 SIGWINCH. 기본 동작은 이 신호를 무시하는 것이지만 화면 페인팅(ncurses를 사용하는 프로그램 포함)을 수행하는 프로세스는 이 신호를 캡처하고 조정합니다. 그에 따라 디스플레이.

SSH를 통해 전송된 메시지로 인해 터미널 크기가 조정되어 프로세스가 SIGWINCH를 수신하게 됩니다. OpenSSH는 모든 기능을 갖춘 터미널 에뮬레이션의 일부이기 때문에 이를 제어할 수 있는 방법을 제공하지 않으며 사람들이 실행하려는 터미널 부분을 선택하고 선택할 수 있으므로 프로그램 환경이 극도로 어려워집니다. 그러나 프로세스에 터미널이 있는 것을 원하지 않는 경우 옵션을 사용하여 SSH를 통해 호출할 수 있지만 -T그렇지 않습니다. 또한 터미널이나 터미널 유형이 설정되어 있지 않기 때문에 화면을 다시 그릴 수 없습니다. 그러나 이는 귀하가 찾고 있는 동작일 수 있습니다.

화면이 다시 그려지는 것을 정말로 원하지 않는다면, 이를 무시해 볼 수 있습니다 SIGWINCH. 일부 ncurses 버전은 이를 존중하는 것 같습니다. 프로세스를 하나로 래핑하고 자체 pty를 제공하고 원래 터미널로 전달할 수도 있습니다. 그러나 그것은 매우 복잡할 것입니다.

그러나 전반적으로 이것은 일반적으로 원하는 동작이 아닌 것 같습니다. 프로그램은 일반적으로 이상적인 표준 Unix 동작으로 간주되는 터미널에 응답해야 합니다. 제대로 작동하게 하면 렌더링이 많이 손상되고 일반적으로 결과가 만족스럽지 않을 것입니다.

관련 정보