search



Iniciando Ubuntu em modo texto

Atualização (11/06/2011): no Ubuntu 11.04, a configuração para iniciar em modo texto é bem simples:
sudo vi /etc/default/grub

# Trocar a linha abaixo de 
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# para
GRUB_CMDLINE_LINUX_DEFAULT="text"
Depois, atualizar o grub e reiniciar:
sudo update-grub
sudo reboot
O que fizeram é basicamente a solução que sugeri no texto original - criar e checar por parâmetro específico na carga do gdm, via /etc/init/gdm.conf. Já facilita bastante a vida (não precisa mais criar entradas novas no grub), mas ainda não é possível trocar estados sem reiniciar a máquina...



Para alterar o modo de inicialização do Linux pra não carregar o ambiente gráfico (por exemplo, quando precisar de uma série de boots pra testar mudanças de configuração de memória), temos que trocar seu run level para 3:
sudo vi /etc/init/rc-sysinit.conf

# localizar e alterar o valor da linha abaixo:
env DEFAULT_RUNLEVEL=3

Na próxima carga do sistema operacional, o nível indicado será acatado. Os valores possíveis e seus significados:
  0   System Halt Usar o comando shutdown -h*
1 Rescue Mode Single user, interface texto, somente login como root
2 Graphic Multi-User Modo default de operação
3 Text Multi-User Ambiente funcional, mas sem carregar X (Gnome, KDE, etc.)
4 Não utilizado 
5 Não utilizado 
6 System Restart Usar o comando shutdown -r*


Se já estiver com o sistema carregado e quiser trocar o modo de execução sem reiniciar a máquina, o comando é esse:
   sudo telinit 3

Essa é a teoria geral. No Ubuntu (e outros derivados do Debian), especificamente, o modo 3 comporta-se da mesma forma que o 2, que é o default!

Achei várias sugestões pra mudar esse comportamento, tentei várias, nenhuma foi satisfatória. Mesmo colocando regras explícitas pra que o gdm (Gnome Desktop Manager) não seja carregado, isso não aconteceu.

O que fiz foi criar uma nova opção no boot loader do Ubuntu, grub, passando um parâmetro específico, que é checado no script do upstart, mecanismo responsável pela carga do sistema e seus serviços.

  • 1. Habilitar exibição das opções de boot. O padrão do grub é não exibir o menu de opções. Então, se você tiver certeza que sempre ficará com o SHIFT pressionado durante sua carga (logo depois da exibição do splash screen da BIOS da máquina), não precisa executar esse passo. Eu recomendo, pelo menos nas primeiras vezes...
    sudo vi /etc/default/grub
    
    # comentar a linha abaixo:
    GRUB_HIDDEN_TIMEOUT=0
    


  • 2. Criar a nova opção de inicialização. A versão do grub disponível no Ubuntu 10 mudou um tanto a estrutura dos arquivos de configuração (pra quem conhece, não existe mais menu.lst). As opções ficam no arquivo /boot/grub/grub.cfg, mas não podemos editá-lo - devemos incluir nosso script em outro arquivo, /etc/grub.d/40_custom.
    sudo vi /etc/grub.d/40_custom
    
    # incluir as linhas abaixo
    menuentry "Ubuntu, with Linux 2.6.32-22-generic (text-only mode)" {
    	set root='(hd0,5)'
    	linux	/boot/vmlinuz-2.6.32-22-generic \
                 root=UUID=69093b74-33e4-4063-a1fc-f06be98bc49f ro text-mode
    	initrd	/boot/initrd.img-2.6.32-22-generic
    }
    

    Gerei o bloco acima a partir da entrada recovery do /boot/grub/grub.cfg. O importante é o "text-mode" inserido na penúltima linha - esse é o parâmetro que será checado no script de carga do ambiente gráfico.
    Pra constar, o bloco que usei como base:
    menuentry 'Ubuntu, with Linux 2.6.32-22-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    	recordfail
    	insmod ext2
    	set root='(hd0,5)'
    	search --no-floppy --fs-uuid --set 69093b74-33e4-4063-a1fc-f06be98bc49f
    	linux	/boot/vmlinuz-2.6.32-22-generic \
                 root=UUID=69093b74-33e4-4063-a1fc-f06be98bc49f ro single 
    	initrd	/boot/initrd.img-2.6.32-22-generic
    }
    

    Com a nova opção criada, atualizar o arquivo lido pelo grub executando o comando:
    sudo update-grub
    


  • 3. Checar existência do parâmetro text-mode. Só falta verificar se o valor esperado foi passado e, se for o caso, não carregar o gdm.
    Pra isso, aproveitei a checagem que o upstart já faz - se estiver iniciando em modo recovery, a carga do gdm é cancelada. Só precisamos ajustar o teste existente:
    sudo vi /etc/init/gdm.conf
    
    # encontrar o trecho abaixo e incluir o valor "text-mode" na comparação:
    case "${ARG}" in (-s|s|S|single)
        plymouth quit || :  # We have the ball here
        exit 0
        ;;
    
    # fica assim:
    case "${ARG}" in (-s|s|S|single|text-mode)
    

    Curiosidade: o plymouth é o responsável pelo gráfico que mostra uma barra de progresso ou animação similar, indicando a carga do sistema. Se essa instrução "quit" não fosse executada, o terminal usado pelo modo gráfico (Ctrl+Alt+F7) ficaria direto executando a tal animação.


É isso, tudo configurado, agora é só reiniciar o sistema e selecionar a nova entrada.

Funciona, mas não é o mundo ideal por duas razões: não conseguimos "trocar" de estado sem reiniciar a máquina (o que seria possível se a troca de runlevel fosse suficiente), e também estamos atrelados ao kernel indicado na nova entrada do grub - quando uma nova versão for instalada, esse script deve ser ajustado, ou continuará usando o kernel antigo.

Referências:


Abraço!
Posted by Fabio Mazanatti at May 08, 2010 - 18:30
Tags:


The author does not allow comments to this entry