Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] Eliminare Login Manager per X (autostart X al boot)
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools)
View previous topic :: View next topic  
Author Message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Fri Aug 06, 2004 2:43 pm    Post subject: [HOWTO] Eliminare Login Manager per X (autostart X al boot) Reply with quote

Versione 1

Questa guida si rivolge principalmente a chi vuole eliminare il proprio graphical login manager, che e', solitamente, incluso nella distribuzione dell'ambiente grafico preferito (kde,gnome), e che potrebbe essere GDM, KDM. Entrance, o quel che volete.

Le ragioni per far questo potrebbero essere, ad esempio, la monoutenza del proprio PC (o quantomeno dell'ambiente grafico), o voler accelerare il boot del proprio PC (un ottimo motivo per chi usa un portatile e se lo porta a lavoro :)).

Le cose da tenere a mente sono, per questa guida:
  • Il virtual terminal su cui far apparire X e' il tty7, ovvero quello di default
  • I messaggi di output (e debug) di X, andranno sulla tty8, normalmente non occupata da login o altro
  • X partira' con il servizio local, e allo shutdown, se ancora aperto, verra' killato insieme ad alcuni servizi accessori di supporto alle applicazioni, rimasti ancora aperti (che voi specificherete esplicitamente)
  • Ci sara' una sola sessione di X aperta; anche questo e' di default in tutte le distribuzioni
  • La sicurezza non verra trattata affatto in questa guida.
    Sebbene per me questo sia un aspetto di primaria importanza (principalmente per il fatto che il mio pc e' un notebook e lo porto spesso per lavoro in ambienti potenzialmente ostili), questa guida da per scontato che abbiate sopperito alla mancanza di autenticazione iniziale con altri metodologie da voi scelte: a parere mio l'ideale, e che io uso con soddisfazione, e' implementare
    Code:
    *  sys-libs/pam_usb
          Homepage:    http://www.pamusb.org/
          Description: A PAM module that enables authentication using an USB-Storage device (such as an USB Pen) through DSA private/public keys.
    Gia' presente in portage, che permette anche di bloccare il pc quando la chiave usb non e' inserita.
    Probabilmente questo argomento sara' oggetto di integrazione successiva di questa guida :)
  • Alcuni si chiederanno in cosa sia diverso questo dall'editare /etc/rc.conf e cambiare il contenuto della variabile XSESSION: la spiegazione e' che in questo modo e' possibile eseguire comandi personalizzati all'avvio di x, settare variabili di sistema, locale, o permettere configurazioni personalizzate (nel mio caso specifico, faccio partire gnome-session --failsafe per avere gnome come ambiente, e poi fvwm --replace come wm
    Ovviamente, dovrete affinare ~/.xinitrc e ~/.Xdefaults in base alle vostre personali esigenze.


Veniamo alla configurazione del servizio local:
I file da configurare sono due, presenti in /etc/conf.d[b], ossia [b]local.start e local.stop.
Se gia li avete usati, e gia avete inserito le vostre routine/script, potete accodati (meglio: inserire i nuovi comandi in cima al resto) a quelli gia esistenti.
Le cose da inserire al momento dello start sono poche:
Code:
nano /etc/conf.d/local.start

Code:
source /sbin/functions.sh
einfo "Starting X"
chown marlboro:wheel /var/log/Xorg.*.log
su - vostrousername -c 'source /etc/profile;startx 2>/dev/vc/8 &' 2>/dev/vc/8


Due o tre cose sono da chiarire:
  • Non essendo piu presente il vostro Login Manager, dovrete comunicare a X cosa lanciare dopo che e' stato avviato.
    L'esempio seguente avvia gnome 2.6, chiudendo l'accesso a X solo al pc:
    Code:
    nano ~/.xinitrc

    Code:
    xhost +127.0.0.1
    gnome-session

    il vostro nome utente deve essere presente nel gruppo [b]tty: editate il file /etc/groups e fate in modo che dopo il : vi sia inserito.
  • Tenete sempre sott'occhio i messaggi di output di X per capire cosa avete sbagliato, eventualmente, nella tty8.


Viceversa, editiamo local.stop: qui le cose si fanno piu complesse.
Code:
nano /etc/conf.d/local.stop

Code:
TO_BE_KILLED="X gconf evolution bonobo"


source /sbin/functions.sh

function stopme ()
{
   [ ! $(pgrep $1) ] && exit 0
        einfo "  Stopping $1.."
        pkill $1
   sleep 1
        [ $(pgrep $1) ] && killme $1

}

function killme ()
{
        for ((e=1; e<10; e++))
        do
                ewarn "    $1 didn't shut down, trying to kill it by brute force."
                pkill -9 $1
                sleep 2
                [ "$?" == 0 ] && break
        done
        ewarn "    $1 cannot be killed, continuing.."
}

for prog in ${TO_BE_KILLED}; do stopme ${prog}; done


Note:
  • Da notare la variabile TO_BE_KILLED: essa specifica quali processi (o pattern) uccidere una volta che X e' stato terminato. A volte capita che alcuni programmi rimangano aperti, nel caso dell'esempio: gestore delle configurazioni di gnome, server-gestore di evolution, gestore delle librerie bonobo di gnome.
  • Questo dipende dall'ambiente che usate ed e' comunque soggettivo, dovrete decidere voi cosa inserire, facendo delle prove: killate X a mano da console tty e vedete quali processi appartenenti alle applicazioni sono rimasti ancora aperti tramite ps
  • Chiaramente X dovra' comunque rimanere presente in cima alla lista, qualunque cosa ci mettiate.
  • Lo script tenta di terminare i processi in maniera pulita, poi se non rispondono li uccide 'by-bruteforce' (un po' come fa windows xp allo shutdown, peccato che lui lo faccia male :))


Eliminiamo il login manager al boot, non ci serve piu':
Code:
rc-update del xdm

A questo punto aggiungiamo local al runlevel, presumibilmente default]
Code:
rc-update add local default


Il piu' e' fatto. Controlliamo che lo script funzioni in questo modo:
  • Facciamo login come [b]root in tty1[/b]
  • Facciamo login come utente in [btty2[/b]
  • Da tty2, con X non avviato (ovviamente), lanciamolo con startx
  • Torniamo a tty1, lanciamo /etc/init.d/local stop. Se avete fatto tutto bene, vedrete che sarete trasportati alla console da dove e' stato lanciato X.
  • Lanciamo X da tty1, come root, simulando il boot: /etc/init.d/local start. Se avete fatto tutto bene, vedrete X nella tty7 e i suoi messaggi in tty8


Adesso avete il vostro X senza la zavorra del login manager :)

Buona implementazione!
_________________
Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica :)


Last edited by FonderiaDigitale on Fri Aug 06, 2004 2:58 pm; edited 1 time in total
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 31345
Location: here

PostPosted: Fri Aug 06, 2004 2:46 pm    Post subject: Reply with quote

Ottimo howto :D . Sara' messo nei post utilissimi
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Fri Aug 06, 2004 3:36 pm    Post subject: Reply with quote

alla faccia di qualcuno :roll: che, mesi fa, mi aveva additato quale miscredente, per aver chiesto (soluzione fornita da teknux) qualcosa del genere (ma meno complesso ;-))

@Shev prrrrrrrrrrrrrrrr!!!!! :P

:lol:

Coda
Back to top
View user's profile Send private message
FonderiaDigitale
Veteran
Veteran


Joined: 06 Nov 2003
Posts: 1710
Location: Rome, Italy

PostPosted: Fri Aug 06, 2004 3:38 pm    Post subject: Reply with quote

eh, lo so che e' complesso, ma dovrebbe essere fault-tolerant.
*DOVREBBE*
_________________
Come disse un amico, i sistemisti sono un po' come gli artigiani per l'informatica :)
Back to top
View user's profile Send private message
codadilupo
Advocate
Advocate


Joined: 05 Aug 2003
Posts: 3135

PostPosted: Fri Aug 06, 2004 5:26 pm    Post subject: Reply with quote

intendiamoci: per meno complesso, intendevo anche, meno completo ;-)
D'altr'onde, già ero contento di riuscire ad avviare X, figurati se mi mettevo anche a cercare di stopparlo :D

Coda
Back to top
View user's profile Send private message
Tiro
l33t
l33t


Joined: 14 Feb 2003
Posts: 752
Location: italy

PostPosted: Fri Aug 06, 2004 8:32 pm    Post subject: Reply with quote

superfigo! :)
Back to top
View user's profile Send private message
shev
Bodhisattva
Bodhisattva


Joined: 03 Feb 2003
Posts: 4084
Location: Italy

PostPosted: Sat Aug 07, 2004 9:34 am    Post subject: Reply with quote

codadilupo wrote:
@Shev prrrrrrrrrrrrrrrr!!!!! :P


Ma lo confermo anche adesso, io non userei mai una soluzione simile. Preferisco mettere un password ogni tanto, giusto per non prendere brutte abitudini :D

Ciò non toglie che qualcuno possa trovare utile questa soluzione, quindi i complimenti di rito per l'ottimo howto ci vanno sempre. Io parlavo di puri gusti personali.

/me che corre di nascosto a provare la soluzione di fonderia :lol:
_________________
Se per vivere ti dicono "siediti e stai zitto" tu alzati e muori combattendo
Back to top
View user's profile Send private message
fedeliallalinea
Administrator
Administrator


Joined: 08 Mar 2003
Posts: 31345
Location: here

PostPosted: Sat Aug 07, 2004 9:46 am    Post subject: Reply with quote

Shev wrote:
Ma lo confermo anche adesso, io non userei mai una soluzione simile. Preferisco mettere un password ogni tanto, giusto per non prendere brutte abitudini :D

Anche io preferisco questa soluzione ma questione di gusti. Prima o poi comunque provero' questa soluzione :D
_________________
Questions are guaranteed in life; Answers aren't.
Back to top
View user's profile Send private message
lucapost
Veteran
Veteran


Joined: 24 Nov 2005
Posts: 1419
Location: <ud|me|ts> - Italy

PostPosted: Sun Jan 14, 2007 2:13 pm    Post subject: Reply with quote

Non mi funge. Questi sono i file interessati:
Code:
jarod ~ # cat /etc/conf.d/local.start |grep -v '#'

source /sbin/functions.sh
einfo "Starting X"
chown lucapost:wheel /var/log/Xorg.*.log
su - lucapost -c 'source /etc/profile;startx 2>/dev/vc/8 &' 2>/dev/vc/8

Code:
jarod ~ # cat /etc/conf.d/local.stop |grep -v '#'

TO_BE_KILLED="X fluxbox xinit startx"


source /sbin/functions.sh

function stopme ()
{
   [ ! $(pgrep $1) ] && exit 0
        einfo "  Stopping $1.."
        pkill $1
   sleep 1
        [ $(pgrep $1) ] && killme $1

}

function killme ()
{
        for ((e=1; e<10; e++))
        do
                ewarn "    $1 didn't shut down, trying to kill it by brute force."
                pkill -9 $1
                sleep 2
                [ "$?" == 0 ] && break
        done
        ewarn "    $1 cannot be killed, continuing.."
}

for prog in ${TO_BE_KILLED}; do stopme ${prog}; done

Code:
jarod ~ # cat /home/lucapost/.xinitrc |grep -v '#'
feh --bg-scale /mnt/documenti/immagini/Natura/img_0365.jpg &
conky &
fluxbox

inoltre i gruppi dell'utente:
Code:
jarod ~ # groups lucapost
tty wheel audio cdrom video usb users portage plugdev games cdrw lucapost

ma ahimè ricevo questo:
Code:
jarod ~ # /etc/init.d/local start
 * Starting local ...
 /etc/conf.d/rc: line 230: svcdir: readonly variable

Alla riga 230 di /etc/conf.d/rc ho:
Code:
svcdir="/var/lib/init.d"

Come devo comportarmi?
_________________
LP
Back to top
View user's profile Send private message
lucapost
Veteran
Veteran


Joined: 24 Nov 2005
Posts: 1419
Location: <ud|me|ts> - Italy

PostPosted: Sat Mar 24, 2007 5:34 pm    Post subject: Reply with quote

alla fine ho risolto così, ho creato il seguente initscript /etc/init.d/ics:

Code:
#!/sbin/runscript

#Qui indico l'utente che deve avviare X, ed il windowmanager
export UTENTE=lucapost
export WM=dwm


depend() {
        need localmount cron
        before local
}

start() {
        ebegin "Starting X"
        source /etc/profile
        /bin/su - $UTENTE -c 'source /etc/profile;startx  &' 2>/dev/tty6
        eend $?
}

stop() {
       TO_BE_KILLED="X $WM xinit startx"
 
       function stopme ()
       {
                if [ `pgrep $1|wc -l` -gt 0 ]
                then
                  einfo "  Stopping $1.."
                  pkill $1
                fi
       }

       ebegin "Stopping X"

       for prog in ${TO_BE_KILLED}; do stopme ${prog}; done

       eend $?
}

.
Ho aggiunto l'initscript al runlevel di default, e voilà!!!
Inoltre ho aggiundo un alias al ~/.bashrc di root e dell'utente per rendere il riavvio di X un pò più veloce:
Code:
cat /root/.bashrc
alias ics="/etc/init.d/ics restart"

cat /home/lucapost/.bashrc
alias ics="sudo /etc/init.d/ics restart"

Ho installato app-admin/sudo e ho aggiunto al file /etc/sudoers la riga:
Code:
lucapost jarod=/etc/init.d/ics restart

dove lucapost è l'utente che avvia il server grafico, e jarod l'hostname (man sudo).

Le cose brutte sono che si ha bisogno di sudo e che non si deve lanciare lo script da un terminale X, altrimenti poi non riparte :cry:
La cosa bella è che posso avviare l'initscipt da utente e che gentoo non si incazza se precedentemente mi è scappato un CTRL+ALT+BACKSPACE!!! :lol:

ps: si ringrazia Cazzantonio per la collaborazione...
_________________
LP
Back to top
View user's profile Send private message
lucapost
Veteran
Veteran


Joined: 24 Nov 2005
Posts: 1419
Location: <ud|me|ts> - Italy

PostPosted: Mon Nov 26, 2007 9:03 pm    Post subject: Reply with quote

meglio ancora così:
Code:
 ~/> cat /etc/inittab |grep auto
c6:1234:respawn:/sbin/mingetty --autologin lucapost tty6


Code:

 ~/> cat .bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
if [ $(tty) == /dev/tty6 ]; then
  startx 2>&1
fi


rimarrà sempre il login attivo su tty6, ma è il metodo più veloce...
_________________
LP
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Risorse italiane (documentazione e tools) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum