14.1 게티 (/ etc / inittab에서 사용됨)
게티 소개
컴퓨터가 시작될 때 (또는 실행 레벨을 전환 할 때) 직렬 포트 (그리고 터미널이 연결된 터미널)에서 로그인 프로세스를 실행하려면 getty 명령을 / etc / inittab 파일에 넣어야합니다. 명령 행에서 getty를 실행하면 문제가 발생할 수 있습니다 (명령 행에서 getty를 실행하는 경우 : 프로그램이 중지되어 이유를 확인하십시오). Getty는 TTY (터미널)를 사용합니다. 각 터미널에는 자체 getty 명령이 필요합니다. 모든 / etc / inittab 파일에 콘솔에 대한 getty 명령이 하나 이상 있습니다. 이것을 찾아서 옆에있는 실제 터미널에 대한 getty 명령을 넣으십시오. 이 파일에는 주석 처리 된 텍스트 터미널 용 샘플 getty 행이 포함될 수 있으므로 주석 처리를 제거하고 (맨 앞의 #을 제거하고) 몇 가지 인수를 변경하면됩니다.
허용되는 인수는 사용하는 getty에 따라 다릅니다.직접 연결된 터미널에 가장 적합한 두 개의 gettys는 다음과 같습니다. 다이얼 인 모뎀에 가장 적합한 두 개의 gettys는 다음과 같습니다. 실제 텍스트 터미널을 사용하지 않으면 간단한 gettys를 사용할 수 있습니다. 대부분의 Linux 사용자는 모니터에서 다음 중 하나를 사용합니다. Linux 배포판에는 텍스트 터미널에 ps_getty 또는 agetty가 제공 될 수 있습니다. 일부 배포본은 어느 것도 제공하지 않습니다. 안타깝게도 종종 "getty"라고 부르기 때문에 / etc / inittab에 넣은 인수가 다른 이후로 가지고있는 인수를 결정해야 할 수도 있습니다. 데비안은 agetty를 사용합니다 (util-linux 패키지에서). RedHat과 Fedora는 ps_getty를 사용했습니다 : ps_getty 가지고있는 getty를 결정하는 마지막 수단으로, 실행 코드 (보통 / sbin)를 체크 아웃 할 수 있습니다. ps_getty는이 코드에 / etc / gettydefs를 포함합니다. 검색하려면 / sbin으로 이동하여 다음을 입력하십시오.문자열 getty | grep getty getty가 실제로 agetty이면 위의 결과는 아무 것도 발생하지 않습니다. 그러나 당신이 agetty 타이핑을 가지고 있다면 :게티 -h-hiLmw 옵션이 표시되어야합니다. getty가 없으면 다른 배포판을 확인하고 외계인 RPM과 데비안 패키지간에 변환하는 프로그램. 소스 코드는 Getty Software에서 다운로드 할 수 있습니다. 모뎀 제어 라인을 사용하지 않는 경우 (예를 들어 전송, 수신 및 공통 신호 접지의 최소 수만 사용하는 경우) getty가 "로컬"플래그를 사용하여이를 알게해야합니다. 이 형식은 사용하는 getty에 따라 다릅니다. 로그인하면 "top", "ps -ax"또는 "ptree"를 사용하여 getty 프로세스가 더 이상 실행되지 않음을 알 수 있습니다. 그게 무슨 일 이니? 쉘이 죽으면 getty가 다시 시작되는 이유는 무엇입니까? 이유가 여기 있습니다. 사용자 이름을 입력하면 getty가 그것을 가져 와서 사용자 이름을 알려주는 로그인 프로그램을 호출합니다. getty 프로세스는 로그인 프로세스로 대체됩니다. 로그인 프로세스는 암호를 묻고이를 확인하고 암호 파일에 지정된 모든 프로세스를 시작합니다. 이 프로세스는 종종 bash 쉘입니다. 그렇다면 bash가 시작되어 로그인 프로세스를 대체합니다. 하나의 프로세스가 다른 프로세스를 대체하고 bash 쉘 프로세스가 원래 getty 프로세스로 시작되었다는 것에 유의하십시오. 이것의 의미는 아래에 설명되어 있습니다. 이제 / etc / inittab 파일에서 getty는 죽은 경우 respawn (재시작)됩니다. 그것은 getty를 호출하는 라인에서 그렇게 말합니다. 그러나 bash 쉘 (또는 로그인 프로세스)이 종료되면 getty가 다시 시작됩니다 (다시 시작). 왜? 글쎄, 로그인 프로세스와 bash는 모두 getty와 inherit의 대체물이다. * 텍스트 터미널 사용법 색인 신호 연결은 전임자가 설정합니다. 실제로 세부 사항을 관찰하면 대체 프로세스가 원래 프로세스와 동일한 프로세스 ID를 갖게됨을 알 수 있습니다. 따라서 bash는 동일한 프로세스 ID 번호로 위장한 getty와 비슷합니다. bash가 죽으면 getty가 죽은 것처럼 보입니다 (getty가 더 이상 실행되지 않더라도). 결과적으로 getty가 다시 생성됩니다. 한 사용자가 로그 아웃하면 bash 쉘을 포함하여 직렬 포트의 모든 프로세스가 종료됩니다. 모뎀에서 DCD 전압 강하에 의해 직렬 포트에 전화 끊기 신호가 전송되는 경우에도이 문제가 발생할 수 있습니다 (활성화 된 경우). DCD에서 로그 아웃 또는 드롭하면 getty가 다시 생성됩니다. "top"이나 "kill"명령을 사용하여 k 키를 누르거나 수동으로 bash (또는 login)를 죽임으로써 getty가 강제로 respawn 될 수 있습니다. 신호 9 (무시할 수 없음)로 그것을 죽일 필요가있을 것입니다. 일반적으로 내부에서 getty를 실행해야합니다. / etc / inittab 명령 줄에서가 아니라 터미널에서 실행중인 일부 프로그램이 예기치 않게 일시 중단 (중지) 될 수 있습니다. 이유는 다음과 같습니다 (왜 중요하지 않은지 다음 섹션으로 건너 뜁니다). 다른 터미널의 명령 줄에서 ttyS1이라고 말하면 getty를 시작하면 tty1이라고 말하면 실제로 실행되는 터미널이 ttyS1인데도 tty1이 "제어 터미널"로 사용됩니다. 따라서 잘못된 제어 터미널이 있습니다. 하지만 inittab 파일 내부에서 시작되면 ttyS1이 제어 터미널로 사용됩니다 (올바른). 제어 터미널이 잘못 되었음에도 불구하고 ttyS1의 로그인은 잘 작동합니다 (getty에 대한 인수로 ttyS1을 제공했기 때문에). 제어 터미널이 tty11로 남아 있더라도 표준 입력 및 출력은 ttyS1로 설정됩니다. ttyS1에서 실행되는 다른 프로그램은이 표준 입력 / 출력 (ttyS1에 연결됨)을 상속 할 수 있으며 모든 것이 정상입니다. 그러나 일부 프로그램은 제어 터미널 (tty1)에서 잘못 읽으려고하는 실수를 범할 수 있습니다. 이제 tty1은 이러한 프로그램이 tty1에 의해 백그라운드에서 실행되고 있다고 생각할 수 있으므로 tty1 (ttyS1이어야 함)에서 읽으려는 시도는 읽으려는 프로세스를 중지시킵니다. (백그라운드 프로세스는 제어 터미널에서 읽을 수 없습니다.) 다음과 같은 메시지가 표시 될 수 있습니다. "1 + 중지됨"당신이 잘못된 터미널을 통해 당신과 통신하려고 시도하는 프로세스와 상호 작용할 수 없기 때문에이 시점에서 당신은 붙어 있습니다. 물론이 터미널에서 다른 터미널로 가서 프로세스를 죽일 수 있습니다. . / etc / inittab의 예제 라인 :
S1은 ttyS1에서 온 것입니다. 23은 실행 레벨 2 또는 3을 입력 할 때 getty가 실행됨을 의미합니다. respawn은 getty (또는 bash와 같은 프로세스를 대체 한 프로세스)가 종료되면 getty가 자동으로 다시 시작 (다시 시작)된다는 것을 의미합니다. / sbin / getty는 getty 명령입니다. -L은 로컬 (모뎀 제어 신호 무시)을 의미합니다. -h (예제에 표시되지 않음)는 하드웨어 흐름 제어를 가능하게합니다 (stty crtscts와 동일). 19200은 전송 속도입니다. ttyS1은 / dev / ttyS1 (MS-DOS의 COM2)을 의미합니다. vt102는 터미널 유형이며이 getty는 환경 변수 TERM을이 값으로 설정합니다. 구성 파일이 없습니다. getty를 편집 한 후 명령 행에 "init q"를 입력하면 로그인 프롬프트가 나타납니다. 그만큼 아가 티 프로그램은 터미널 내부의 패리티 세트를 자동 감지하려고 시도합니다 (패리티 없음 포함). 8 비트 데이터 바이트와 1 비트 패리티를 지원하지 않습니다. 8 비트 데이터 바이트 (더하기 패리티)를 참조하십시오. 사용하는 경우 stty 패리티를 설정하려면, 아가 티 패리티 비트가 마치 데이터 비트 인 것처럼 처음부터 필요하기 때문에 자동으로 해제됩니다. 이는 패리티를 자동 감지 할 수 있도록 login-name을 입력 할 때 마지막 비트 (가능하면 패리티 비트)를 가져와야하기 때문입니다. 따라서 패리티를 사용하는 경우에는 텍스트 터미널 내에서만 활성화하고 아가 티 자동 감지하여 컴퓨터에서 설정하십시오. 터미널이 수신 된 패리티를 지원하면 getty가 다음을 감지 할 수 있도록 무언가를 입력 할 때까지 로그인 프롬프트가 왜곡되어 보입니다. 둥가. 왜곡 된 프롬프트는 방문객 등이 로그인을 시도하는 것을 방지합니다. 그것은 당신이 원하는 것일 수 있습니다. 패리티 자동 감지에는 때로는 문제가 있습니다. 이것은 사용자가 먼저 로그인 이름을 입력 한 후, 아가 티 ~을 시작하다 로그인 프로그램을 사용하여 로그인을 완료하십시오. 로그인 프로그램이 패리티를 감지 할 수 없으므로 게티 프로그램이 패리티를 결정하지 못했다. 로그인 그것을 결정할 수도 없습니다. 첫 번째 로그인 시도가 실패하면, 로그인 다시 시도해 볼 것입니다 (모두 패리티가 잘못 설정된 경우). 결국 로그인 시도가 실패한 후 (또는 시간 초과 후) 아가 티 다시 시작되어 로그인 시퀀스를 다시 시작합니다. getty가 다시 실행되면 두 번째 시도에서 패리티를 감지 할 수 있으므로 모든 것이 제대로 작동 할 수 있습니다. 패리티가 틀리면 로그인 프로그램이 사용자가 입력 한 내용을 올바르게 읽을 수 없으며 로그인 할 수 없습니다. 단말기가 수신 된 패리티를 지원하는 경우 화면이 깨져 계속 표시됩니다. getty가 패리티를 감지하지 못하면 / etc / issue 파일은 대개 프롬프트가 나타나기 직전에 화면에 덤프되므로 화면에 왜곡 된 단어가 나타날 수 있습니다. 왜 첫 번째 문자로 패리티를 감지 할 수 없습니까? 예를 들면 다음과 같습니다. 패리티 비트 0 (상위 비트) 및 홀수 1 비트가있는 8 비트 바이트를 감지한다고 가정합니다. 어떤 패리티입니까? 음, 1 비트의 홀수는 홀수 패리티라는 것을 의미합니다. 그러나 패리티가없는 8 비트 문자 일 수도 있습니다. 지금까지는 어떤 것을 결정할 방법이 없습니다. 그러나 지금까지 우리는 동등성의 가능성을 제거했습니다. 따라서 패리티 탐지는 제거 프로세스에 의해 진행됩니다. 입력 된 다음 바이트가 첫 번째 바이트와 유사하고 짝수 패리티의 가능성 만 제거하면 패리티를 판별하는 것은 여전히 불가능합니다. 이 상황은 무한정 계속 될 수 있으며 드물 긴하지만 로그인 이름을 변경할 때까지 로그인이 실패합니다. 만약 agetty가 1의 패리티 비트를 찾으면 이것은 패리티 비트이고 8 비트 문자의 상위 비트가 아니라고 가정합니다. 따라서 사용자 이름에 메타 문자 (상위 비트 세트)를 사용하지 않는 것으로 가정합니다 (즉, 이름이 ASCII로되어 있음). 하나는 "로그인 루프"에 다양한 방법으로 들어갈 수 있습니다. 로그인 이름에 단 하나의 글자 또는 두 글자 만 입력하고 리턴을 친다 고 가정하십시오. 이러한 문자로 패리티를 탐지하기에 충분하지 않으면 패리티가 감지되기 전에 로그인이 실행됩니다. 가끔이 문제는 agetty가 처음 시작할 때 터미널이 연결되어 있지 않거나 연결되어 있지 않은 경우에 발생합니다. 이 "로그인 루프"에 빠지면 getty 로그인 프롬프트가 나타날 때까지 리턴 키를 여러 번 누르십시오. 또 다른 방법은 시간 초과를 위해 1 분 정도 기다리는 것입니다. 그러면 getty 프로그램에 의해 getty 로그인 프롬프트가 화면에 표시되고 다시 로그인 할 수 있습니다. 불행히도, agetty는이 동등 함을 감지 할 수 없습니다.1999 년 말 현재 패리티의 자동 감지를 비활성화 할 수 없으므로 잘못된 패리티를 감지합니다. 결과적으로 로그인 프로세스가 왜곡되고 패리티가 잘못 설정됩니다. 따라서 패리티가있는 8 비트 데이터 바이트를 사용하려고 시도하는 것은 실현 가능하지 않습니다. (대부분이 Greg Hankins의 오래된 Serial-HOWTO에서 온 것입니다)이 getty의 경우, 구성 파일에 항목을 넣고 다음에 항목을 추가해야합니다. / etc / inittab. 다음은 구성 파일에 넣은 터미널에 사용할 몇 가지 예제 항목입니다. / etc / gettydefs.
DT38400, DT19200 등은 단지 라벨 일 뿐이므로 사용하는 것과 동일해야합니다. / etc / inittab. 원한다면 게티 로그인 배너에서 흥미로운 것을 인쇄하십시오. 필자의 예에서는 시스템 이름과 직렬 회선이 인쇄되어 있습니다. 다른 것들을 추가 할 수 있습니다 : blockquote 그늘 = 예
편집이 끝나면 / etc / gettydefs다음을 수행하여 구문이 올바른지 확인할 수 있습니다.
다른 사람이 없는지 확인하십시오. 게티 또는 유가티 터미널이 연결되어있는 시리얼 포트의 설정 파일 (/etc/default/{uu}getty.ttyS엔 또는 /etc/conf.{uu}getty.ttyS엔), 이것은 아마 달리기를 방해 할 것이기 때문에 게티 터미널에. 충돌하는 파일이 종료되면 제거하십시오. 너를 편집해라. / etc / inittab 실행할 파일 게티 직렬 포트에서 (포트, 속도 및 기본 터미널 유형과 같이 사용자 환경에 맞는 올바른 정보로 대체)
이 시점에서 터미널에 로그인 프롬프트가 표시됩니다. 터미널의주의를 끌기 위해 반품해야 할 수도 있습니다. "m"은 모뎀을 의미합니다. 이 프로그램은 주로 모뎀 용이며 2000 년 중반부터는 텍스트 흐름 용으로 다시 컴파일해야합니다 (하드웨어 흐름 제어를 사용하지 않는 한 - 보통 손으로 만든 케이블이 필요합니다). 직접 연결된 터미널에 대한 설명서는 설명서의 "직접"절을 참조하십시오. mgetty.texi. 마지막 줄을보세요. /etc/mgetty/mgetty.config 터미널에 대해 구성하는 예가 나와 있습니다. "toggle-dtr no"라고 말하지 않는 한, 존재하지 않는 모뎀을 재설정하려는 시도로 PC에서 DTR 핀을 모뎀으로 떨어 뜨린 (무효화) 것으로 생각할 것입니다. 다른 gettys와는 달리 mgetty는 누군가가 그 터미널의 키를 치기 전까지 터미널에 붙어 있지 않으므로? 에있는 터미널에서 상단 또는 추신 이것이 일어날 때까지. 로그인 / var / log / mgetty / 무시할 수있는 모뎀에만 적용 할 수있는 몇 가지 경고 메시지가 표시 될 수 있습니다. 다음은 간단한 행의 예제입니다. / etc / inittab :
게티 (게티)는 로그인 후에 종료됩니다 (다시 부활 할 수 있음).
명령 행에서 getty를 실행하는 경우 : 프로그램이 중지됨
agetty (getty라고 할 수 있음)
S1 : 23 : respawn : / sbin / getty -L 19200 ttyS1 vt102
패리티 문제에 대한 Agetty의 자동 감지
8 비트 데이터 바이트 (더하기 패리티)
getty (getty_ps의 일부)
mgetty