Auto startx antes do login no FreeBSD

1

Esse problema está me enlouquecendo!

Eu uso "/ etc / ttys" no FreeBSD para configurar os comandos que são executados quando o getty é executado.

Esta é a linha relevante do meu arquivo de configuração /etc/ttys :

ttyv8   "/usr/local/bin/startx" xterm on secure

Meu problema é que, na inicialização, o console atual alterna para ttyv8 (funcionando como esperado), então minha janela do VirtualBox é redimensionada (o que normalmente indica que o X Server está controlando a saída gráfica), mas o servidor X fecha imediatamente . O FreeBSD tenta novamente 5 vezes, aguarda 30 segundos e tenta novamente 5 vezes, aguarda 30 segundos, e assim por diante. Isso está me deixando louco!

No entanto, depois de efetuar login em um console de texto e executar startx , ele funciona completamente bem sem problemas. Eu não tenho um ~/.xinitrc , mas modifiquei o arquivo xinit padrão em /usr/local/etc/X11/xinit .

Quando eu tentei depurar todo o material adicionando um pipe ao meu comando tty:

ttyv8   "/usr/local/bin/startx > /tmp/startx.log" xterm on secure

o startx.log não existia. Simplesmente não funcionou. No entanto, o Xorg.0.log padrão é atualizado com todas as tentativas que o getty faz para iniciar o servidor x. O Xorg.0.log simplesmente não diz nada. Só que terminou com sucesso depois que os drivers etc. foram carregados. É como se meu xinitrc não tivesse sido lido.

Observe que não quero usar um gerenciador de login e que não quero nenhum mecanismo de login automático.

Obrigado antecipadamente.

    
por fameman 14.05.2018 / 18:25

2 respostas

4

ttyv8   "/usr/local/bin/startx" xterm on secure

Fechar, mas errado.

O manual para ttys dá um exemplo de como fazer exatamente isso. Você precisa especificar seu servidor X real com uma configuração window= e especificar o cliente X inicial a ser executado no segundo campo do registro:

# terminal emulate/window system
ttyv0   "/usr/local/bin/xterm -display :0"      xterm   on window="/usr/local/bin/X :0"

Pessoalmente, recomendo não usar esse mecanismo de ttys , por três motivos:

  • O comportamento de reinicialização não é bonito, como você descobriu. Na verdade, não há quase nenhuma configurabilidade disso em comparação a um gerenciador de serviços adequado, onde é possível simplesmente fazer coisas como configurar variáveis de ambiente para o cliente e servidor X e ativar / desativar serviços.
  • Não é assim que se faz isso quando se tem um gerenciador de desktop no mix. O Manual do FreeBSD mostra como executar os vários gerenciadores de destKop através dos seus respectivos scripts Mewburn rc , ativados / desativados por configurações em rc.conf . O TrueOS substitui isso pelo PCDM, chamado por um script OpenRC. Nenhuma entrada de banco de dados ttys está envolvida em qualquer uma delas.
  • Não é assim que se faz isso sob o gerenciamento de serviços, que possui pacotes de serviços para PCDM e vários gerenciadores de desktop, e para os quais um pacote de serviços seria usado para iniciar um servidor e cliente X simples, ambos habilitados e desabilitado da maneira normal para esses pacotes de serviço. Nenhuma entrada de banco de dados ttys envolvida.

Eu recomendo que você escreva um script Mewburn rc , um script OpenRC ou até mesmo um pacote de serviços nosh para executar seu servidor X e cliente.

Leitura adicional

por 14.05.2018 / 22:27
3

Estou usando o seguinte:

  1. Em ttyv0 meu usuário faz login automaticamente.
  2. Meu ~/.login verifica o tty. Se for ttyv0 , será executado startx .
  3. Após o final de startx (feche a sessão do xorg), pergunte sobre a parada / reinicialização.

Explicações:

1. Fazer login automaticamente : para /etc/ttys :

ttyv0   "/usr/libexec/getty autologin" xterm   on  secure

e para /etc/gettytab :

autologin::al=MYUSER

2. & 3. Conteúdo relevante de ~/.login . Estou usando tcsh , mas a ideia também funciona em sh :

if ($tty == "ttyv0") then
  echo Starting Xorg...
  startx
  echo "Halt (h) Reboot (r) Nothing (n) ?"
  set answer = $<
  if ($answer == "h") then
    /sbin/shutdown -p now
  else if ($answer == "r") then
    /sbin/shutdown -r now
  endif
endif
    
por 14.05.2018 / 19:43