vários scripts de inicialização?

1

Eu quero que o kubuntu me pergunte no início - qual do perfil eu quero usar. Deve haver uma resposta padrão que deve ser executada automaticamente em 3 segundos. Como se Grub estivesse perguntando qual sistema operacional você gostaria de começar.

O racional tem várias opções de inicialização: normalmente eu tenho muitas coisas iniciando por padrão: krusader, firefox, konsole, emacs ... Então o carregamento completo leva cerca de 1 minuto. Mas às vezes - eu estou fugindo, e preciso apenas fazer uma única coisa - então eu só preciso, digamos, krusader. Eu fiz vários scripts de inicialização ... Então, estou pensando - é possível escolher entre eles no início?

Talvez isso possa ser feito com o Grub ...

Editar :

O Grub não me perguntou sobre o perfil de inicialização - nem sequer o "modo normal" ou o "modo de recuperação". Eu o fiz fazê-lo com o Grub Editor (o pacote é chamado kcm-grub2 ):

sudo sed -i '$ a\deb http://download.opensuse.org/repositories/home:ksmanis/xUbuntu_11.10/ /' /etc/apt/sources.list
wget -q http://download.opensuse.org/repositories/home:ksmanis/xUbuntu_11.10/Release.key -O- | sudo apt-key add -
sudo apt-get update
sudo apt-get install kcm-grub2

Após a instalação e reinicialização, em System settings - > Startup and Shutdown novo item apareceu: Grub2 Bootloader . Lá, verifiquei "Escolher automaticamente a entrada de inicialização padrão em 3 segundos".

Depois disso, seguindo a solução lumbric , copiei o registro gnu-linux menuentry para o final de o /etc/grub.d/40_custom e adicione um "perfil de produtividade" lá. Aqui está o texto do 40_custom :

modificado
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry 'Full' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root 392f79ba-0f1f-422f-ac76-11860e0f4869
        linux   /boot/vmlinuz-3.0.0-16-generic root=UUID=392f79ba-0f1f-422f-ac76-11860e0f4869 ro   quiet splash vt.handoff=7 productivity-profile=1
        initrd  /boot/initrd.img-3.0.0-16-generic
}
menuentry 'Public' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root 392f79ba-0f1f-422f-ac76-11860e0f4869
        linux   /boot/vmlinuz-3.0.0-16-generic root=UUID=392f79ba-0f1f-422f-ac76-11860e0f4869 ro   quiet splash vt.handoff=7 productivity-profile=2
        initrd  /boot/initrd.img-3.0.0-16-generic
}
menuentry 'Fastest' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        set gfxpayload=$linux_gfx_mode
        insmod gzio
        insmod part_msdos
        insmod ext2
        set root='(hd0,msdos1)'
        search --no-floppy --fs-uuid --set=root 392f79ba-0f1f-422f-ac76-11860e0f4869
        linux   /boot/vmlinuz-3.0.0-16-generic root=UUID=392f79ba-0f1f-422f-ac76-11860e0f4869 ro   quiet splash vt.handoff=7 productivity-profile=3
        initrd  /boot/initrd.img-3.0.0-16-generic
}

productivity-profile é escolhido pelo script bash do Start-up.

É isso. Agora eu tenho 5 perfis de inicialização: Clean, Recovery, Full, Public, Fastest.

    
por Adobe 20.02.2012 / 15:29

2 respostas

1

Com a ajuda de @Lekensteyn , criei uma versão na qual você pode selecionar o perfil no GRUB. A criação do menu personalizado ainda pode ser melhorada provavelmente.

Etapa 1: crie um menu personalizado do GRUB

Você precisa criar entradas de menu do GRUB com um parâmetro adicional. Você pode seguir estas instruções . Então, copie sua entrada padrão de /boot/grub/grub.cfg (as linhas com menuentry ... { ... } ) para /etc/grub.d/40_custom .

Em seguida, edite (a entrada copiada em /etc/grub.d/40_custom ) a linha em que diz linux /boot... e adicione na linha e de uma linha separada por um espaço:

productivity-profile=1

Você também pode editar o nome da entrada do menu, então altere a parte menuentry 'Ubuntu, with... para algo como menuentry 'Ubuntu (Profile 1), with... .

Adicione uma entrada de menu para cada um dos seus perfis (com um número único cada).

Você pode remover as permissões de execução dos outros arquivos em /etc/grub.d/ para remover essas entradas do menu. Não esqueça de executar sudo update-grub depois.

Note que depois de uma atualização do kernel, você teria que alterar seu menu manualmente se você seguir estas instruções! (Você pode melhorar esta resposta e descrever como editar os scripts em /etc/grub.d/ de acordo.´)

Etapa 2: verifique se a Etapa 1 foi bem-sucedida

Reinicialize e selecione um dos perfis. Em seguida, execute em um terminal:

cat /proc/cmdline 

Você deve receber algo como:

BOOT_IMAGE=/boot/vmlinuz-2.6.... root=...  productivity-profile=2

... onde o número no final da linha tem que ser o perfil escolhido.

Etapa 3: adote o script de acordo com suas necessidades e execute-o na inicialização

Em seguida, use este script para executar seus scripts de inicialização:

#!/bin/bash    

profile=$(cat /proc/cmdline |sed 's/.*productivity-profile=\([0-9]\).*//g')

echo Running profile $profile ...

case $profile in
   1)
      # Run script for profile 1
      ./script-profile1.sh
      ;;
   2)
      # Run script for profile 1
      ./script-profile2.sh
      ;;
   3)
      # Run script for profile 1
      ./script-profile3.sh
      ;;
   *)
      echo Error
      ;;
esac
    
por lumbric 20.02.2012 / 22:22
2

Você pode executar o seguinte script ao iniciar:

#!/bin/bash

echo 'Press a key...'
echo '[1] Full profile (default)'
echo '[2] whatever 2'
echo '[3] another one'

read -t 3 -n 1 -p "Choose profile: " profile

echo

case $profile in
   1)
      # Run script for profile 1
      ./script-profile1.sh
      ;;
   2)
      # Run script for profile 1
      ./script-profile2.sh
      ;;
   3)
      # Run script for profile 1
      ./script-profile3.sh
      ;;
   *)
      echo Invalid choice
      ;;
esac

Se você quiser, pode incluir um loop, para que ele seja perguntado novamente em caso de uma escolha inválida ou você pode programá-lo inteiramente em sua linguagem de programação favorita.

Mas eu concordo, seria mais legal escolher o perfil no começo do processo de inicialização. Você poderia ligar o computador, escolher o perfil e, em seguida, retornar quando tudo for iniciado. Mas eu não sei como usar parâmetros do GRUB.

    
por lumbric 20.02.2012 / 16:26