세상은 당신이 화면을 청소하기를 원합니다.

세상은 당신이 화면을 청소하기를 원합니다.

동일한 사용자로 로그인 tty1하고 tty2X 서버 세션을 시작 tty1하면 로그아웃하자마자 tty2X 서버 세션이 tty1충돌합니다.

이것은 알려진 버그인 것 같습니다:

버그 보고서를 읽으신 것처럼 문제는 clear_consolein 호출에 있습니다 ~/.bash_logout. 해당 줄을 제거하면 모든 것이 잘 작동합니다.

내 질문:

나는 어떤 변화도 발견하지 못했습니다. (물론 X 서버가 더 이상 충돌하지 않는다는 점을 제외하면) 로그아웃하면 해당 줄을 삭제하더라도 콘솔이 지워집니다. 그럼 clear_console애초에 거기에 전화하는 목적이 뭔데요?

답변1

세상은 당신이 화면을 청소하기를 원합니다.

내가 말했듯이https://unix.stackexchange.com/a/233855/5132실제로 메일링 리스트 토론에서 간접적으로 인용되기도 했습니다☺…

Greg Wooledge와 다른 사람들이 발견했듯이 로그아웃과 후속 로그인 사이에 가상 터미널을 지우고 싶지 않은 것은 실제로 추세에 어긋나는 것입니다. 권한 있는 사용자나 상사가 로그아웃한 후에도 지속되는 민감한 출력은 1970년대부터 Unices(및 실제로 다른 시분할 원격 액세스 운영 체제)의 보안 문제였으며 이러한 모든 출력을 취소하려면 상당한 노력이 필요합니다. 이 문제를 피하기 위해 사람들이 넣은 것들. 보시다시피, 이를 수행하기 위해 몇 가지 중첩 메커니즘을 도입합니다.

  • 많은 시스템에는 clear_console쉘 로그아웃 스크립트에 표준 명령이 있습니다. (커널 가상 터미널 #1에서 실행되는 그래픽 프로그램에서는 잘 작동하지 않고, 다른 종류의 터미널(가상 또는 실제)에서는 작동하지 않기 때문에 이 자체가 문제가 됩니다.)

    이 명령은 제거되어야 합니다.

  • 예를 들어 가상 터미널을 대상으로 하는 getty 프로그램의 기본 설정은 mingetty터미널을 지우는 것입니다. (로그인하기 전에 이 작업을 수행합니다. 즉, TTY 로그인 서비스가 중지되면 터미널 출력이 삭제되지 않은 상태로 유지될 수 있습니다. 아이러니하게도 이 기능은 더 나은 위치에 배치되었을 수 있습니다. loginPAM 속성이 필요하기 때문에 로그아웃해도 계속 실행됩니다. ).

    --noclear이 기능을 비활성화하려면 이 옵션을 배포해야 합니다. 시스템 운영 체제에서 여기에는 파일을 덮어쓰거나 설정을 변경하거나 ExecStart단순히 [email protected]자신이 설계한 로컬 장치 파일을 가리키는 하나 이상의 단위 파일을 작성하는 작업이 포함됩니다.

  • systemd에서 제공하는 [email protected]템플릿 서비스 단위 세트는 TTYVTDisallocate=yessystemd에 커널 가상 터미널을 지우도록 지시합니다. (이것은 이름이 부분적으로 반영되므로 사용자 공간 가상 터미널을 포함한 다른 종류의 터미널에서는 작동하지 않습니다.)

    또한 재정의되거나 지정된 다른 서비스 템플릿을 사용하여 다시 제거해야 합니다 [email protected].

물론 정확히 겹치지는 않습니다. mingetty직렬 장치를 통해 연결된 실제 터미널에는 유용하지 않습니다. clear_console이상하게도 Bourne Again 쉘 패키지의 일부이며 Korn, Z, Almquist, Fish, Watanabe 또는 기타를 사용하는 사용자 계정에 대한 대화형 로그인 쉘로 사용되지 않습니다. 사람들이 호출하는 쉘은 시스템 TTYVTDisallocate이 아닌 운영 체제에서는 작동하지 않습니다.

제가 몇 년 전 메일링 리스트 토론에서 말했듯이, console_clear이것은 두 배로 불필요합니다. 2011년부터 Linux 내장 터미널 에뮬레이터는 3스크롤백 버퍼를 지우는 ED 제어 시퀀스를 지원하므로 애초에 이러한 유해한 부작용이 있는 가상 터미널을 전환할 필요가 없습니다. 몇 년 전 저는 console-clear이 제어 시퀀스를 내보내는 nosh 도구 세트에 명령을 추가했습니다(따라서 Linux 내장 터미널 에뮬레이터와 함께 사용할 수 있을 뿐만 아니라 원격 연결을 통해서도 작동할 수 있습니다). ncurses 명령은 이제 terminfo에 따르면 clear관련 제어 시퀀스를 실행하는 방법도 알고 있습니다 .

물론 console-terminal-emulator표준적으로 터미널의 디스플레이 버퍼는 정지되면 지워집니다.

추가 읽기

답변2

~에 따르면dlocate, clear_console(Debian) bash 패키지의 일부입니다. 업스트림의 일부가 아닙니다bash원천. 이것패키지 변경 로그언제/어디에서 왔는지 알려주세요:

— 마티아스 클로제 2006년 3월 23일 목요일 01:16:22 +0100

bash (3.1-3) 긴급도=낮음;

...

  우분투에서 병합:
  *clear_console: 다음을 포함하여 콘솔을 지우는 새로운 도우미
    스크롤백 버퍼.
  * /etc/skel/.bash_logout: 다시 설치하고clear_console을 사용합니다.
    우분투 #29405. 닫힘: #331504.

인용된 버그 보고서에는 이를 추가한 이유가 나와 있습니다.

  • 우분투 #29405, 2006년 1월"종료" 전에 "clear"를 실행하지 마십시오.

    F1-F6 터미널에서 로그아웃하면 다음 로그인 화면이 나타나더라도 기존의 모든 활성 출력이 화면에 남아 있습니다. 다른 사용자가 개인 출력을 볼 수 없도록 새 로그인이 발생하기 전에 화면을 지워야 합니다.

  • 데비안 #331504, 2005년 10월bash: 기본 /etc/skel/.bash_logout을 제공하십시오.

    bash가 사용자가 콘솔을 통해 로그인할 때 화면을 지우기 위해 기본적으로 사용할 수 있도록 /etc/skel에 기본 .bash_logout을 제공했다면 좋을 것입니다. 이는 특히 사람들이 다른 것을 원하지 않는 다중 사용자의 일반적인 요청입니다. 사람들은 자신이 무엇을 하고 있는지 알아보기 위해 환경을 이용합니다.

그건 그렇고, 이것은 관련이 있습니다저주여기:

전자는 기능을 적용하여 해결됩니다.xterm패치 #1071999(Linux 콘솔의 경우), 후자는 라이센스 비호환성으로 인해 아무런 성과도 얻지 못했습니다.

답변3

개인 정보 보호 및 보안과 관련이 있다고 생각합니다. 세션이 끝난 후 자신이 무엇을 하고 있는지 다른 사람에게 공개하는 것은 현명하지 않습니다. 내 데비안에서 전체 항목 .bash_logout은 다음과 같습니다:

if [ "$SHLVL" = 1 ]; then
    [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi

$SHLVL체인의 첫 번째 쉘일 때 값은 1입니다. (쉘에서 새 쉘을 시작할 수 있으며 이로 인해 가 증가합니다 SHLVL.) 첫 번째 세션을 종료하고 콘솔을 전달하고 누구에게나 메시지를 표시하면 콘솔은 승인되지 않은 사람이 세션 내용에 액세스할 수 없도록 유지해야 합니다.

답변4

init 시스템의 구성으로 인해 tty가 지워지고 있습니다. 요즘은 아마도 systemd.

systemd의 경우 TTYVTDisallocateno로 설정됩니다.

이렇게 하려면 systemctl edit getty@tty1 다음 코드를 실행하고 입력하세요.

[Service]
TTYVTDisallocate=no

https://askubuntu.com/questions/58097/how-can-i-remove-the-clear-screen-before-login/781923#781923

이 주석은 sysvinit 에서 사용할 수 있는 구성 --noclear옵션 도 언급하는 더 긴 페이지를 가리킵니다 getty.

http://mywiki.wooledge.org/SystemdNoClear

getty마지막으로 명시적인 기능 (및 getty에 대한 옵션)이 모든 버전에 제공되지 않을 수도 있는 것 같습니다 .--noclear

시스템 관리자는 로그인 프롬프트를 표시하기 전에 항상 콘솔이 지워지도록 구성할 수 있습니다. 가장 쉬운 방법은 getty 대신 Mingetty를 사용하는 것입니다. 직렬 콘솔에 대한 지원은 상실되지만 화면 지우기와 같은 일부 기능은 얻을 수 있습니다.

--로그아웃 후 터미널을 어떻게 삭제하나요?답변은 2010년에 게시되었습니다.

따라서 bash_logout은 아마도 다른 getty로 전환하지 않고 화면을 지우는 유일한 방법일 것입니다.

관련 정보