터미널 텍스트 로그인 프롬프트 중에 명령 출력을 어떻게 표시합니까?

터미널 텍스트 로그인 프롬프트 중에 명령 출력을 어떻게 표시합니까?

주로 실행되는 헤드리스 서버가 있습니다.더반xorg/그래픽 환경이 설치되어 있지 않습니다. 시작 시 텍스트 모드 로그인 프롬프트만 표시됩니다.

내가 어떻게 할 수 있는지 알고 싶어사용자가 로그인하기 전에 명령의 출력을 표시합니다.(내 터미널의 로그인 화면에서)? 명령은 명령 처럼 나타나고 watch2초마다 업데이트되며 상호 작용이 필요하지 않습니다.

watch참고: 대부분의 경우 내 컴퓨터에 SSH 세션을 두고 SSH 세션을 실행하는 것만으로도 충분하거나 브라우저에서 필요한 것을 제공할 수 있는 웹 서버를 설치하는 것이 더 나을 것이라는 것을 알고 있습니다 . 그러나 내 시나리오에서는 두 가지 접근 방식 모두 여러 가지 이유로 실용적이지 않습니다. 또한 순전히 호기심을 충족시키기 위해 이 질문에 대한 답을 알고 싶습니다.

답변1

내 머릿속에서는 다음과 같이 할 수 있습니다.

  1. 필요한 모든 작업을 수행하는 스크립트를 작성하세요(어쩌면 단지 watch somecommand, 어쩌면 더 복잡할 수도 있음).
  2. 사용자 계정을 만들고 이 스크립트를 로그인 셸로 설정합니다.
  3. getty해당 사용자가 자동으로 로그인되도록 조정

이로 인해 제대로 로그인할 수 없게 될 수 있습니다. 이를 파악하려면 몇 가지 실험이 필요합니다.

물론 로그인 시간 정보를 표시하는 일반적인 메커니즘은 입니다 /etc/issue. 그러나 이러한 관점에서 보면 1. 임의의 명령을 실행하여 해당 명령을 출력하는 메커니즘이 없고, 2. 출력을 한 번 인쇄하는 대신 지속적으로 업데이트하는 메커니즘이 없기 때문에 부적절해 보입니다.

답변2

언급한 대로 /etc/issue올바른 위치에 표시되지만 이는 정적 메시지입니다.

할 수 있다/etc/issue가끔씩 프로세스를 강제로 다시 시작하도록 스크립트를 작성했지만 getty로그인을 방해하는 2초 간격을 사용했습니다. 보다 현실적인 간격은 약 1분입니다.

데비안의 경우 다음을 사용하고 있을 수 있습니다 agetty(참조매뉴얼 페이지). SIGHUP다음을 전송하여 다시 시작할 수 있습니다(예:뿌리물론, 다음 getty과 같이 실행한 이후로뿌리).

관련 독서:

답변3

logintty가 초기화될 때 즉시 실행하는 대신 다음과 같은 스크립트를 실행하세요 .

#!/bin/sh
(   trap '' TTOU
    while   clear
    do      #gen your output
            sleep 2
    done
) & stty -icanon
    dd    count=1 >/dev/null 2>&1
    stty  icanon
    exec  login

...tty에서 적어도 1바이트를 읽을 때까지 루프에 넣은 모든 것을 실행하며, 그 시점에서 login호출됩니다. login항상 tty 제어로 시작하므로 HUP터미널에 출력을 쓰는 백그라운드 프로세스는 종료되자마자 종료되지만, 원하는 출력을 생성하기 위해 누군가 키를 누를 때까지 계속 루프되지 않습니다. 백그라운드에서 제어하는 ​​tty에 출력을 쓸 수 있더라도 백그라운드 루프가 무엇을 하려고 하든 결코 성공하지 못할 것입니다.읽다그것으로부터 입력을 얻으십시오.

관련 정보