Use o parâmetro de inicialização para executar determinadas ações após a inicialização

4

Estou me perguntando se posso usar o Grub 2 para informar ao sistema operacional quais ações executar após a inicialização.

Contexto:
Eu tenho um HTPC com o Debian Wheezy instalado. Às vezes eu quero usar o sistema como uma área de trabalho normal, mas às vezes eu gostaria de ter o XBMC iniciado.

Eu experimentei uma inicialização dupla com o OpenElec que não era muito conveniente porque não consegui montar o meu RAID-1 no OpenElec.

Minha próxima tentativa seria usar uma segunda instalação mínima do Debian com o XBMC. Com essa solução, ainda posso escolher entre a área de trabalho comum e a finalidade do HTPC no Grub.

Mas agora eu pensei que isso poderia ser uma perda de tempo e espaço em disco, já que eu já tenho o Debian instalado. Seria mais fácil se houvesse algum tipo de parâmetro de inicialização que eu pudesse usar para informar minha instalação regular do Debian

  • "Inicializar no desktop" ou
  • "Inicializar no XBMC"

Então, eu precisaria apenas de uma segunda entrada no Grub para lidar com esse parâmetro de inicialização.

Isso é de alguma forma possível?

    
por Marcel 30.03.2013 / 17:19

1 resposta

3

Qualquer parâmetro de linha de comando para o kernel do Linux aparecerá em /proc/cmdline . Você pode colocar qualquer coisa que você gosta lá (desde que não seja um parâmetro reconhecido pelo kernel ou qualquer um dos drivers ou o sistema initrd). Por exemplo, você pode criar menus sofisticados no grub e usá-los em um script de inicialização como /etc/rc.local para decidir o que fazer com ele.

Por exemplo, adicione um /etc/grub.d/09-xcmd com:

#! /usr/bin/tail -n+2
menuentry 'XMBC' {
  set xcmd='xcmd=xmbc'
  echo 'Now select a kernel'
  sleep 1
}

Em seguida, adicione a /etc/default/grub :

GRUB_CMDLINE_LINUX_DEFAULT="$GRUB_CMDLINE_LINUX_DEFAULT \${xcmd}"

Executar update-grub .

Em /etc/rc.local , você poderia ter:

case $(cat /proc/cmdline) in
  (*xcmd=*) exec sudo -Hu marcel startx;;
esac

E no seu ~/.xinitrc :

cmdline=$(cat /proc/cmdline)
case $cmdline in
  (*xcmd=*)
    xcmd=${cmdline##*xcmd=}
    xcmd=${xcmd%% *}
    "$xcmd" &
esac
    
por 30.03.2013 / 18:40