Un runlevel senza GDM con personalizzazione upstart


Edgy (nella versione Desktop) di default, per ogni runlevel, prevede l’avvio di GDM, il login grafico.
Per certe tipologie di installazione, questo non è “il massimo”… vediamo di seguito un modo per creare un runlevel senza GDM selezionabile da GRUB😉

Warning

ATTENZIONE! La modifica da apportare, potrebbe compromettere il corretto avvio del sistema, se non si è utenti esperti, si consiglia di NON proseguire

GRUB
Definiamo, prima di tutto di usare il runlevel 3, per avviare la nosta Ubuntu in modalità testo, quindi per prima cosa rimuoviamo l’avvio di GDM dal runlevel:
sudo rm -f /etc/rc3.d/S13gdm
ora andiamo a modificare il menù di grub per inserire l’avvio del nostro runlevel:
sudo gedit /boot/grub/menu.lst
quindi alla fine del file aggiungiamo:
title Ubuntu, kernel 2.6.17-10-generic (RUNLEVEL 3)
root (hd0,0)
kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro runlevel=3
initrd /boot/initrd.img-2.6.17-10-generic
quiet
savedefault
boot

Attenzione: la configurazione sopra riportata è da adattare in base a quella già presente nel vostro sistema

Per gestire in questo modo il runlevel (e la relativa variabile nel comando di avvio del kernel), occorre però modificare lo script /etc/event.d/rc-default di upstart in modo da gestire il nuovo parametro. Quindi facciamo una copia di backup del file:
sudo cp /etc/event.d/rc-default /etc/event.d/rc-default.salvato
quindi apriamo l’editor
sudo gedit /etc/event.d/rc-default
e andiamo a sostituire il contenuto come segue:

# rc - runlevel compatibility
#
# This task guesses what the "default runlevel" should be and starts the
# appropriate script.
start on rcS/stop
script
        runlevel --reboot || true
        if grep -q -w -- "-s\|single\|S" /proc/cmdline; then
            telinit S
        elif [ -r /etc/inittab ]; then
            RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)"
            if [ -n "$RL" ]; then
                telinit $RL
            else
                telinit 2
            fi
        else
            if grep -q " runlevel=[0-9]" /proc/cmdline
            then
                RL="$(sed -e "s/.* runlevel=\([0-9]\).*/\1/g" /proc/cmdline)"
                if [ -n "$RL" ]; then
                        telinit $RL
                else
                        telinit 2
                fi
            else
              telinit 2
            fi
        fi
end script


Questa modifica si rende necessaria perchè upstart, a differenza di init “standard”, non gestisce il runlevel come parametro di avvio nel kernel, ma utilizza quello definito in /etc/inittab (eventualmente da creare perchè non presente in Edgy) o eventualmente la modalità single-user definita all’avvio del sistema (il recovery mode da GRUB)
Fatta quindi la modifica, non rimane altro che riavviare e selezionare il nuovo runlevel😉

36 thoughts on “Un runlevel senza GDM con personalizzazione upstart

  1. Luca ha detto:

    Salve,per disabilitare la grafica, ho seguito la tua guida, ma ho commesso un errore nel file /etc/event.d/rc-default.
    Per rimediare ho provato ad usare il live cd di ubuntu, ma in dev/ non mi vede l’hard disk e le relative partizioni ne anche in /mnt, quindi non riesco ad accedere al mio linux per correggere il file errato…
    Come posso fare?

  2. MMM… brutta cosa… prova ad eseguire il boot del sistema andando a modificare a run-time la riga di boot del kernel, da così
    kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro
    a
    kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro init=/bin/bash
    se funziona dovresti avere così attiva una shell da root, devi solo eseguire il remount della partizione / in modalità lettura/scrittura:
    mount / -o remount,rw
    e puoi così sistemare il file corrotto o annullare le modifiche😉

    PS-Hai fatto il backup del file come consigliato, vero?🙂

  3. Andrea ha detto:

    Salve
    Ho letto il tuo articolo, molto interessante, ma personalmente ho necessita che il sistema si avvii di default in modalità testuale.. sai consigliarmi qualcosa?
    Ti ringrazio infinitamente🙂

  4. Basta configurare GRUB in modo da selezionare come scelta di default questa “title Ubuntu, kernel 2.6.17-10-generic (RUNLEVEL 3)” impostando adeguatamente il valore della variabile “default” nel file /boot/grub/menu.lst😉
    Sul wiki della community italiana di Ubuntu puoi trovare una guida su GRUB: http://wiki.ubuntu-it.org/Grub

    PS-Come riportato nel box sopra, la modifica da apportare, potrebbe compromettere il corretto avvio del sistema, se non si è utenti esperti è meglio non farla

  5. Andrea ha detto:

    Quoto! Ho già incasinato il sistema🙂 ma il buon DSL da live cd mi ha salvato il didietro😀 ho corretto il mio errore e proseguo col cambiare il valore di default
    Ti ringrazio!😉

  6. Andrea ha detto:

    Non so se questo è il posto giusto per fare domande, forse mi dovrei rivolgere ad un forum, ma vedo che sei abbastanza ferrato sull’argomento quindi ti espongo il mio problema😀
    Appena avvio il pc ( un vecchio 133Mhz con 192MB di ram e scheda video S3 e ubuntu 6.10 edgy ), quando viene avviato x il sistema si pianta, la scheda video non da nessun output ( classico led color arancio sul monitor ), quindi ho preso in considerazione la tua modifica.
    Ho corretto il problema, ho avviato in RUNLEVEL3 ed è arrivato fino alla finestra di login testuale, dopo qualche secondo è comparsa una scritta “Avvio di…” per una frazione di secondo, quindi impossibile da leggere, e di nuovo il sistema crasha come prima… Puoi suggerirmi qualcosa?
    Ormai sono 2 settimane che uso ubuntu in modalità recovery, vorrei sapere se è possibile installare ed eseguire programmi qualsiasi anche in tale modalità, per me andrebbe benissimo lo stesso, tanto il pc è interamente dedicato ad aMule🙂

    Ti ringrazio infinitamente🙂

  7. asdrubale ha detto:

    Mi sembra sbagliata la seguente istruzione !!

    RL=”$(sed -e “s/.* runlevel=([0-9]).*/1/g” /proc/cmdline)”

    mi ritorna sempre l’intera riga e non il valore del runlevel

  8. Era un problema di visualizzazione con WordPress la riga corretta è:
    RL=”$(sed -e “s/.* runlevel=\([0-9]\).*/1/g” /proc/cmdline)”
    ora è sistemata😉

  9. asdrubale ha detto:

    con
    RL=”$(sed -e “s/.* runlevel=\([0-9]\).*/1/g” ./cmdline)”

    echo $RL

    ritorna 1 quando mi dovrebbe tornare 3 poichè in cmdline ho

    root=UUID=df543c40-72c6-4828-aa87-0642f6264c44 ro runlevel=3 quiet splash
    😦

  10. asdrubale ha detto:

    ecco la stringa giusta per sed

    RL=”$(sed -e “s/.* runlevel=\([0-9]\).*/\1/g” ./cmdline)”

    mancava “\” davanti a 1

  11. asdrubale ha detto:

    perchè altrimenti nel caso in cui non ci sia runlevel=x la riga del sed ritorna tutta la stringa di cmdline e il test con -n andrebbe comunque a buon fine.

    quindi con l’egrep mi vado ad accertare che sia effettivamente un intero.

    ciao ciao

  12. asdrubale ha detto:

    a beh si, ci sarebbe quel primo :

    if grep -q ” runlevel=[0-9]” /proc/cmdline

    che discreterebbe la questione … va beh, questione di gusti😉

  13. Scusa eh ma non funziona mica nemmeno con le correzioni🙂

    Sto cercando di risolvere anche io questo problema… solo che a me interessa l’avvio in init 3 da live cd

  14. I problemi erano causati dal tema di WordPress… ora dovrebbe essere tutto ok…🙂
    MMM… non sono sicuro che sia possibile farlo con la Live…

  15. emaj ha detto:

    Ciao, su Feisty purtroppo non mi funziona! Nonostante selezioni il runlevel 3, Gnome parte lo stesso e al comando “runlevel”, ubuntu mi ritorna “2”….cioè è come se ignorasse del tutto il parametro “3” nella riga kernel di grub…
    Cosa mi puoi consigliare??
    Grazie

  16. @emaj:
    Ho corretto lo script sopra (questo nuovo tema mi sta facendo impazzire😦 ) perchè c’erano ancora degli errori, ora è giusto, certificato🙂
    Comunque con Feisty funziona, bisogna solo mettere:
    start on stopped rcS
    invece di
    start on rcS/stop😉

  17. emaj ha detto:

    @paper0k

    paper0k, help😦 non funziona ancora nonostante le modifiche da te suggerite!!! La stessa cosa si verifica sia sul nbook che sulla workstation!!
    L’istruzione “runlevel 3”, anche nella semplice forma “3” nella riga kernel, come ti dicevo, viene completamente ignorata!

  18. emaj ha detto:

    @paper0k

    volevo aggiungere peraltro, che avevo dimenticato di creare il file /etc/inittab
    Il problema a questo punto è che, una volta editato il suddetto file ad es. nella forma id:3:initdefault:, gdm NON partirà comunque in ogni caso, ma se di converso dovessi sostituire la riga con id:2:initdefault, non ci sarà script che tenga: gdm si avvierà!!!!
    C’è qualcosa che nn mi torna🙂

  19. @emaj
    Lo script intercetta “runlevel=3” non “runlevel 3” o solo 3, infatti in /boot/grub/menu.lst avevo suggerito:
    kernel /boot/vmlinuz-2.6.17-10-generic root=/dev/hda1 ro runlevel=3
    Se cambi /etc/inittab il runlevel viene impostato come default (cioè il parametro di avvio non è considerato) e quindi GDM lo devi lanciare manualmente😉

  20. emaj ha detto:

    @paper0k
    Si scusa, mi sono espresso male: avevo già letto ed interpretato lo script sin dall’inizio, ed ero al corrente del fatto che la riga corretta fosse “runlevel=3” e non “runlevel 3”
    però ti posso assicurare che nonostante ciò e nonostante il file /etc/inittab sia id:2:initdefault:, quando vado a selezionare l’avvio con runlevel 3, Feisty parte con tutto gdm e alla richiesta di runlevel, continua a ritornarmi N 2…..

  21. MMM… servono più info🙂
    Controlla, il contenuto di /proc/cmdline
    cat /proc/cmdline
    e lancia questo comando, ti dovrebbe dare 3 come risultato:
    sed -e "s/.* runlevel=\([0-9]\).*/\1/g" /proc/cmdline😉

  22. emaj ha detto:

    @papero0k

    Il file /etc/inittab, come tu m’insegni, non esiste originariamente nelle distribuzioni 6.10 e 7.04, infatti sono stato io a crearlo dopo svariati tentativi andati a vuoto.
    L’ho cancellato.
    La cancellazione ha creato i seguenti effetti:

    1 – Avvio (non richiesto) di gdm
    2 – Errore “failed to initialize HAL” al momento dell’avvio di gnome
    3 – passando su tty1, si legge la seguente riga: “init: rc3 main process killed by TERM signal” e poi “Starting gnome…”
    4 – al comando runlevel, Feisty ritorna “3 2”

    Mi devi perdonare lo stress che ti sto creando con tutte queste domande…..🙂

  23. emaj ha detto:

    Funziona!
    Ho già cancellato lo script precedente, ma sono sicuro ci fosse qualcosa di errato nella pubblicazione dello stesso su WordPress!
    Grazie mille x l’interessamento e scusa ancora il disturbo!
    emaj

  24. Credo di aver capito il problema… oltre a togliere i “\”, alcune volte se scrivo due trattini attaccati questi vengono “convertiti” in un trattino lungo…
    Capito il problema trovata la soluzione😀

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...