14.1 Getty (usado em / etc / inittab)
Introdução ao Getty
Para que um processo de login seja executado em uma porta serial (e o terminal conectado a ele) quando o computador é iniciado (ou os switches executam níveis), um comando getty deve ser colocado no arquivo / etc / inittab. Executar o getty a partir da linha de comando pode causar problemas (consulte Se o getty rodar a partir da linha de comando: os programas são interrompidos para ver o porquê). Getty GETs um TTY (um terminal) indo. Cada terminal precisa do seu próprio comando getty. Há também pelo menos um comando getty para o console em cada arquivo / etc / inittab. Encontre isto e coloque os comandos getty para os terminais reais próximos a ele. Este arquivo pode conter exemplos de linhas getty para terminais de texto comentados, de modo que tudo o que você precisa fazer é descomentá-los (remover o # inicial) e alterar alguns argumentos.
Os argumentos permitidos dependem de qual getty você usa:Dois gettys melhores para terminais conectados diretamente são: Dois gettys melhores para modems de discagem (evite para terminais conectados diretamente) são: Gets simples para usar se você não usar um terminal de texto real. A maioria dos usuários de Linux usa um desses em seu monitor: Sua distribuição Linux pode vir com ps_getty ou agetty para terminais de texto. Algumas distribuições não fornecem nenhum. Infelizmente, eles geralmente o chamam de "getty", então você pode precisar determinar qual deles você tem, já que os argumentos que você colocou depois dele em / etc / inittab são diferentes. O Debian usa o agetty (no pacote util-linux). RedHat e Fedora usaram o ps_getty que está em: ps_getty Como último recurso para tentar determinar qual getty você possui, você pode verificar seu código executável (geralmente em / sbin). ps_getty tem o / etc / gettydefs embutido neste código. Para procurá-lo, vá para / sbin e digite:strings getty | grep getty Se o getty estiver realmente agetty, o resultado acima não resultará em nada. No entanto, se você tiver agetty digitação:getty -hdeve mostrar as opções -hiLmw. Se você não tem o getty você quer verificar outras distribuições e o estrangeiro programa para converter entre pacotes RPM e Debian. O código-fonte pode ser baixado da Getty Software. Se você não estiver usando linhas de controle de modem (por exemplo, se você usar apenas o número mínimo de 3 condutores: transmissão, recepção e sinal comum) você deve informar ao getty usando um sinalizador "local". O formato disso depende de qual getty você usa. Após o login, você notará (usando "top", "ps -ax" ou "ptree") que o processo getty não está mais em execução. O que aconteceu com isso? Por que o getty é reiniciado novamente se o seu shell é morto? Aqui está o porquê. Depois de digitar seu nome de usuário, o getty o pega e chama o programa de login informando seu nome de usuário. O processo getty é substituído pelo processo de login. O processo de login pede sua senha, verifica e inicia qualquer processo especificado em seu arquivo de senha. Este processo é frequentemente o shell bash. Se assim for, o bash inicia e substitui o processo de login. Observe que um processo substitui o outro e que o processo do shell bash foi iniciado originalmente como o processo getty. As implicações disto serão explicadas abaixo. Agora, no arquivo / etc / inittab, getty deve reabrir (reiniciar) se for morto. Diz isso na linha que chama getty. Mas se o shell bash (ou o processo de login) for eliminado, o getty reaparece (reinicia). Por quê? Bem, tanto o processo de login quanto o bash são substitutos para getty e herdam * Índice How-To de terminal de texto as conexões de sinal estabelecidas por seus predecessores. Na verdade, se você observar os detalhes, perceberá que o processo de substituição terá o mesmo ID do processo que o processo original. Assim, o bash é meio disfarçado com o mesmo número de ID do processo. Se o bash é morto, é como se o getty tivesse sido morto (mesmo que o getty não esteja mais rodando). Isso resulta no reaparecimento do getty. Quando um faz logout, todos os processos nessa porta serial são mortos, incluindo o shell bash. Isso também pode acontecer (se habilitado) se um sinal de desconexão for enviado para a porta serial por uma queda de tensão do DCD pelo modem. O logout ou a queda no DCD resultará no respawning do getty. Pode-se forçar o getty a reaparecer manualmente matando o bash (ou login), pressionando a tecla k, etc., enquanto estiver no comando "top" ou com o comando "kill". Você provavelmente precisará matá-lo com o sinal 9 (que não pode ser ignorado). Você normalmente deve executar getty de dentro / etc / inittab e não da linha de comando ou então alguns programas em execução no terminal podem ser inesperadamente suspensos (interrompidos). Aqui está o porquê (pule para a próxima seção se o motivo não for importante para você). Se você iniciar o getty para dizer ttyS1 a partir da linha de comando de outro terminal, digamos tty1, ele terá o tty1 como seu "terminal de controle", mesmo que o terminal em que ele esteja rodando seja o ttyS1. Assim, tem o terminal de controle errado. Mas se for iniciado dentro do arquivo inittab, ele terá o ttyS1 como o terminal de controle (correto). Mesmo que o terminal de controle esteja errado, o login em ttyS1 funciona bem (já que você deu o ttyS1 como um argumento para o getty). A entrada e a saída padrão são ajustadas para ttyS1 mesmo que o terminal de controle permaneça tty11. Outros programas executados em ttyS1 podem herdar esta entrada / saída padrão (que é conectada a ttyS1) e tudo está OK. Mas alguns programas podem cometer o erro de tentar ler do terminal de controle (tty1) que está errado. Agora tty1 pode pensar que esses programas estão sendo executados em segundo plano por tty1, portanto, uma tentativa de ler de tty1 (deveria ter sido ttyS1) resulta em parar o processo que tentou ler. (Um processo em segundo plano não pode ser lido em seu terminal de controle). Você pode ver uma mensagem como: "1 + interrompido"na tela. Neste ponto você está preso, já que você não pode interagir com um processo que está tentando se comunicar com você através do terminal errado. É claro que para escapar disso você pode ir para outro terminal e matar o processo, etc. . Uma linha de exemplo em / etc / inittab:
S1 é de ttyS1. 23 significa que o getty é executado ao entrar nos níveis de execução 2 ou 3. respawn significa que se getty (ou um processo que o substituiu como bash) for eliminado, o getty iniciará automaticamente (respawn) novamente. / sbin / getty é o comando getty. O -L significa Local (ignorar os sinais de controle do modem). -h (não mostrado no exemplo) permite o controle de fluxo de hardware (o mesmo que stts crtscts). 19200 é a taxa de transmissão. ttyS1 significa / dev / ttyS1 (COM2 no MS-DOS). vt102 é o tipo de terminal e este getty configurará a variável de ambiente TERM para este valor. Não há arquivos de configuração. Digite "init q" na linha de comando depois de editar o getty e você verá um prompt de login. o agetty o programa tentará detectar automaticamente o conjunto de paridade dentro do terminal (incluindo sem paridade). Ele não suporta bytes de dados de 8 bits mais paridade de 1 bit. Veja bytes de dados de 8 bits (mais paridade). Se você usar stty para definir a paridade, agetty irá desarmar isto automaticamente, pois inicialmente quer que o bit de paridade venha como se fosse um bit de dados. Isso ocorre porque ele precisa obter o último bit (possivelmente um bit de paridade) ao digitar seu nome de login para que ele possa detectar automaticamente a paridade. Assim, se você usar paridade, ative-a somente dentro do terminal de texto e deixe agetty detectá-lo automaticamente e configurá-lo no computador. Se o seu terminal suportar paridade recebida, o prompt de login parecerá truncado até você digitar algo para que o getty possa detectar paridade. O aviso adulterado irá impedir que os visitantes, etc., tentem fazer o login. Isso pode ser exatamente o que você quer. Às vezes, há um problema com a detecção automática de paridade. Isso acontece porque depois de digitar seu nome de login pela primeira vez, agetty inicia o entrar programa para concluir o seu login. Infelizmente, o entrar programa não pode detectar paridade por isso, se o getty programa não conseguiu determinar a paridade então entrar não poderá determiná-lo também. Se a primeira tentativa de login falhar, entrar vai deixar você tentar de novo, etc. (tudo com a paridade errada). Eventualmente, após um número de tentativas fracassadas de login (ou após um tempo limite) agetty irá iniciar novamente e iniciar as sequências de login novamente. Quando o getty estiver rodando novamente, ele poderá detectar a paridade na segunda tentativa, para que tudo possa funcionar OK. Com paridade errada, o entrar o programa não consegue ler corretamente o que você digita e você não pode efetuar login. Se o seu terminal suportar a paridade recebida, você continuará a ver uma tela ilegível. Se o getty falhar em detectar a paridade, um arquivo / etc / issue normalmente é despejado na tela antes do antes do prompt, portanto, mais palavras distorcidas podem aparecer na tela. Por que não pode agetty detectar paridade pela primeira letra digitada? Aqui está um exemplo: Suponha que ele detecta um byte de 8 bits com seu bit de paridade 0 (bit de alta ordem) e com um número ímpar de 1-bits. Que paridade é essa? Bem, o número ímpar de 1 bit implica que é paridade ímpar. Mas também pode ser apenas um caractere de 8 bits sem paridade. Não há como determinar até agora qual. Mas até agora eliminamos a possibilidade de paridade par. A detecção da paridade prossegue por um processo de eliminação. Se o próximo byte digitado é semelhante ao primeiro e também só elimina a possibilidade de paridade par, ainda é impossível determinar a paridade. Essa situação pode continuar indefinidamente e, em casos raros, o login falhará até você alterar seu nome de login. Se a agetty encontrar um bit de paridade de 1, assumirá que este é um bit de paridade e não um bit de alta ordem de um caractere de 8 bits. Assim, pressupõe-se que você não use meta-caracteres (alto conjunto de bits) em seu nome de usuário (ou seja, seu nome está em ASCII). Pode-se entrar em um "loop de login" de várias maneiras. Suponha que você apenas digite uma única letra ou duas para o seu nome de login e, em seguida, pressione Enter. Se essas letras não forem suficientes para a detecção de paridade, o login será executado antes que a paridade seja detectada. Às vezes, esse problema acontece se você não tiver o terminal ligado e / ou conectado quando o agetty for iniciado pela primeira vez. Se você ficar preso neste "loop de login", uma maneira de sair dele é pressionar a tecla de retorno várias vezes até obter o prompt de login getty. Outra maneira é apenas esperar um minuto ou mais por um tempo limite. Em seguida, o prompt de login getty será colocado na tela pelo programa getty e você poderá tentar novamente efetuar login. Infelizmente, agetty não consegue detectar essa paridade.No final de 1999, não há opção para desativar a detecção automática de paridade e, assim, detectar paridade incorreta. O resultado é que o processo de login será distorcido e a paridade será definida incorretamente. Portanto, não parece viável tentar usar bytes de dados de 8 bits com paridade. (A maior parte é do antigo Serial-HOWTO de Greg Hankins)Para este getty, é necessário colocar as entradas em um arquivo de configuração e adicionar uma entrada / etc / inittab. Aqui estão algumas entradas de exemplo para usar no seu terminal que você colocou no arquivo de configuração / etc / gettydefs.
Note que o DT38400, DT19200, etc. são apenas rótulos e devem ser os mesmos que você usa / etc / inittab. Se você quiser, você pode fazer getty imprima coisas interessantes no banner de login. Nos meus exemplos, tenho o nome do sistema e a linha serial impressa. Você pode adicionar outras coisas: blockquote shade = yes
Quando você terminar de editar / etc / gettydefs, você pode verificar se a sintaxe está correta ao fazer:
Certifique-se de que não há outro getty ou uugetty arquivo de configuração para a porta serial à qual seu terminal está conectado, como (/etc/default/{uu}getty.ttySN ou /etc/conf.{uu}getty.ttySN), pois isso provavelmente interferirá na execução getty em um terminal. Remova esses arquivos conflitantes se eles saírem. Edite seu / etc / inittab arquivo a ser executado getty na porta serial (substituindo as informações corretas para o seu ambiente - porta, velocidade e tipo de terminal padrão):
Neste ponto, você deve ver um prompt de login no seu terminal. Você pode ter que apertar o botão para obter a atenção do terminal. O "m" significa modem. Este programa é principalmente para modems e a partir de meados de 2000 será necessário recompilar para usá-lo para terminais de texto (a menos que você use o controle de fluxo de hardware - e isso geralmente requer um cabo feito à mão). Para a documentação dos terminais conectados diretamente, consulte a seção "Direta" do manual: mgetty.texi. Olhe para as últimas linhas de /etc/mgetty/mgetty.config para um exemplo de configurá-lo para um terminal. A menos que você diga "toggle-dtr no", ele achará que você tem um modem e soltará (negará) o pino DTR no PC em uma tentativa vã de reinicializar o modem inexistente. Em contraste com outros gettys, o mgetty não se conecta a um terminal até que alguém pressione qualquer tecla desse terminal para que você veja um? para o terminal em topo ou ps até que isso aconteça. Os logs em / var / log / mgetty / pode mostrar algumas mensagens de aviso que são aplicáveis somente a modems que você pode ignorar. Aqui está um exemplo da linha simples que você coloca em / etc / inittab:
Getty sai após o login (e pode reaparecer)
Se o getty rodar a partir da linha de comando: os programas são parados
agetty (pode ser nomeado getty)
S1: 23: respawn: / sbin / getty -L 19200 ttyS1 vt102 Detecção automática de problemas de paridade de Agetty
Bytes de dados de 8 bits (mais paridade)
getty (parte de getty_ps)
mgetty




