주로 실행되는 헤드리스 서버가 있습니다.더반xorg/그래픽 환경이 설치되어 있지 않습니다. 시작 시 텍스트 모드 로그인 프롬프트만 표시됩니다.
내가 어떻게 할 수 있는지 알고 싶어사용자가 로그인하기 전에 명령의 출력을 표시합니다.(내 터미널의 로그인 화면에서)? 명령은 명령 처럼 나타나고 watch
2초마다 업데이트되며 상호 작용이 필요하지 않습니다.
watch
참고: 대부분의 경우 내 컴퓨터에 SSH 세션을 두고 SSH 세션을 실행하는 것만으로도 충분하거나 브라우저에서 필요한 것을 제공할 수 있는 웹 서버를 설치하는 것이 더 나을 것이라는 것을 알고 있습니다 . 그러나 내 시나리오에서는 두 가지 접근 방식 모두 여러 가지 이유로 실용적이지 않습니다. 또한 순전히 호기심을 충족시키기 위해 이 질문에 대한 답을 알고 싶습니다.
답변1
내 머릿속에서는 다음과 같이 할 수 있습니다.
- 필요한 모든 작업을 수행하는 스크립트를 작성하세요(어쩌면 단지
watch somecommand
, 어쩌면 더 복잡할 수도 있음). - 사용자 계정을 만들고 이 스크립트를 로그인 셸로 설정합니다.
getty
해당 사용자가 자동으로 로그인되도록 조정
이로 인해 제대로 로그인할 수 없게 될 수 있습니다. 이를 파악하려면 몇 가지 실험이 필요합니다.
물론 로그인 시간 정보를 표시하는 일반적인 메커니즘은 입니다 /etc/issue
. 그러나 이러한 관점에서 보면 1. 임의의 명령을 실행하여 해당 명령을 출력하는 메커니즘이 없고, 2. 출력을 한 번 인쇄하는 대신 지속적으로 업데이트하는 메커니즘이 없기 때문에 부적절해 보입니다.
답변2
언급한 대로 /etc/issue
올바른 위치에 표시되지만 이는 정적 메시지입니다.
너할 수 있다/etc/issue
가끔씩 프로세스를 강제로 다시 시작하도록 스크립트를 작성했지만 getty
로그인을 방해하는 2초 간격을 사용했습니다. 보다 현실적인 간격은 약 1분입니다.
데비안의 경우 다음을 사용하고 있을 수 있습니다 agetty
(참조매뉴얼 페이지). SIGHUP
다음을 전송하여 다시 시작할 수 있습니다(예:뿌리물론, 다음 getty
과 같이 실행한 이후로뿌리).
관련 독서:
답변3
login
tty가 초기화될 때 즉시 실행하는 대신 다음과 같은 스크립트를 실행하세요 .
#!/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에 출력을 쓸 수 있더라도 백그라운드 루프가 무엇을 하려고 하든 결코 성공하지 못할 것입니다.읽다그것으로부터 입력을 얻으십시오.