View previous topic :: View next topic |
Author |
Message |
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Fri Aug 06, 2004 2:43 pm Post subject: [HOWTO] Eliminare Login Manager per X (autostart X al boot) |
|
|
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: | 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':
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 |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 31354 Location: here
|
Posted: Fri Aug 06, 2004 2:46 pm Post subject: |
|
|
Ottimo howto . Sara' messo nei post utilissimi _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Fri Aug 06, 2004 3:36 pm Post subject: |
|
|
alla faccia di qualcuno che, mesi fa, mi aveva additato quale miscredente, per aver chiesto (soluzione fornita da teknux) qualcosa del genere (ma meno complesso )
@Shev prrrrrrrrrrrrrrrr!!!!!
Coda |
|
Back to top |
|
|
FonderiaDigitale Veteran
Joined: 06 Nov 2003 Posts: 1710 Location: Rome, Italy
|
Posted: Fri Aug 06, 2004 3:38 pm Post subject: |
|
|
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 |
|
|
codadilupo Advocate
Joined: 05 Aug 2003 Posts: 3135
|
Posted: Fri Aug 06, 2004 5:26 pm Post subject: |
|
|
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
Coda |
|
Back to top |
|
|
Tiro l33t
Joined: 14 Feb 2003 Posts: 752 Location: italy
|
Posted: Fri Aug 06, 2004 8:32 pm Post subject: |
|
|
superfigo! |
|
Back to top |
|
|
shev Bodhisattva
Joined: 03 Feb 2003 Posts: 4084 Location: Italy
|
Posted: Sat Aug 07, 2004 9:34 am Post subject: |
|
|
codadilupo wrote: | @Shev prrrrrrrrrrrrrrrr!!!!! |
Ma lo confermo anche adesso, io non userei mai una soluzione simile. Preferisco mettere un password ogni tanto, giusto per non prendere brutte abitudini
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 _________________ Se per vivere ti dicono "siediti e stai zitto" tu alzati e muori combattendo |
|
Back to top |
|
|
fedeliallalinea Administrator
Joined: 08 Mar 2003 Posts: 31354 Location: here
|
Posted: Sat Aug 07, 2004 9:46 am Post subject: |
|
|
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 |
Anche io preferisco questa soluzione ma questione di gusti. Prima o poi comunque provero' questa soluzione _________________ Questions are guaranteed in life; Answers aren't. |
|
Back to top |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Sun Jan 14, 2007 2:13 pm Post subject: |
|
|
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 |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Sat Mar 24, 2007 5:34 pm Post subject: |
|
|
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
La cosa bella è che posso avviare l'initscipt da utente e che gentoo non si incazza se precedentemente mi è scappato un CTRL+ALT+BACKSPACE!!!
ps: si ringrazia Cazzantonio per la collaborazione... _________________ LP |
|
Back to top |
|
|
lucapost Veteran
Joined: 24 Nov 2005 Posts: 1419 Location: <ud|me|ts> - Italy
|
Posted: Mon Nov 26, 2007 9:03 pm Post subject: |
|
|
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 |
|
|
|
|
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
|
|