Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HowTo] Ouvrir une session graphique au démarrage
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Wed Mar 10, 2004 6:27 pm    Post subject: [HowTo] Ouvrir une session graphique au démarrage Reply with quote

Bonjour à tous !

Etant le seul utilisateur de mon portable -- utilisateur physique, j'entends -- et ce portable n'étant pas une bête de course, loin de là, j'ai une sainte horreur des kdm, gdm et autres xdm qui, en plus de ne me servir à rien, consomment de la mémoire et me font perdre du temps. Bref, vous l'aurez compris, ça m'énerve ! :evil:

Mon objectif du jour a donc été, hormis de réviser pour mes exams :(, de trouver un moyen d'ouvrir ma session graphique automatiquement au démarrage, sans devoir me loguer où que ce soit. Oui, je sais, les accros de la sécurité vont bondir, mais c'est pourtant bien confortable.

Ma solution s'inspire largement du service xdm, destiné à lancer le display manager que je haïs tant. Voici, dans un premier temps, les modification à apporter pour bénéficier de cette fonctionnalité.

Dans /etc/inittab, ajouter à la fin :
Code:
xu:b:once:/etc/X11/startUS.sh


Créer le fichier /etc/init.d/xuser contenant :
Code:
#!/sbin/runscript
# Copyright 1999-2004 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License, v2 or later
 
# This script is largely inspired from /etc/init.d/xdm
#
# Don't forget to set XUSER to the desired username in /etc/conf.d/xuser
#
# Yoann Aubineau
# yoann@yaubi.com
# 2004.03.10
 
# Start X Font Server before X
depend() {
        use xfs hotplug
}
 
start() {
        USER="$(echo ${XUSER} | awk '{ print tolower($1) }')"
 
        ebegin "Starting X session for ${USER}"
        save_options "user" "${USER}"
 
        /sbin/telinit b &>/dev/null
        eend 0
}
 
stop() {
        local retval=0
        local curvt="$(fgconsole)"
 
        ebegin "Stopping X session"
 
        rm -f ${svcdir}/options/xuser/user
 
        if [ "$(ps -A | grep -e "startx")" ]
        then
                start-stop-daemon --stop \
                        --name "startx"
                retval=$?
        fi
 
        #switch back to original vt
        chvt "${curvt}" &>/dev/null
 
        eend ${retval} "Error stopping ${myservice}."
 
        return ${retval}
}


Créer le fichier /etc/X11/startUS.sh contenant :
Code:
#!/bin/sh
 
source /etc/init.d/functions.sh
source /etc/profile
 
if [ -e ${svcdir}/options/xuser/user ]
then
        retval=0
 
        USER="`cat ${svcdir}/options/xuser/user`"
        export GDK_USE_XFT=1
        /sbin/start-stop-daemon --start --background \
                --exec "/bin/su" -- - ${USER} -l -c "/usr/X11R6/bin/startx &> /dev/null"
 
        retval=$?
 
        #wait; sleep 2
 
        if [ "${retval}" -ne 0 ]
        then
                einfo "ERROR: could not start the X session..."
                killall -9 "startx" &> /dev/null
        fi
fi


Remplacer le service xdm par xuser :
Code:
$ rc-update del xdm
$ rc-update add xuser default


Créer le fichier /etc/conf.d/xuser contenant :
Code:
# Config file for /etc/init.d/xuser
 
XUSER=yoann #type your username here


Voici comment tout cela fonctionne :
Lors de la procédure d'initialisation du système, le service xuser est lancé. Le script /etc/init.d/xuser récupère et enregistre le nom de l'utilisateur pour lequel on veut lance une session graphique, puis active le runlevel b et se termine. init reçoit cette activation mais ne la prends pas en compte tant que la procédure d'initialisation en cours n'est pas terminée. Lorsque que c'est finalement le cas, init exécute les actions définies pour le runlevel b, c'est à dire lance le script /etc/X11/startUS.sh. Celui-ci se charge de lancer startx pour l'utilisateur en ayant soin de préserver les variables d'environnement, dont les locales et le répertoire personnel.

Pourquoi le script /etc/init.d/xuser ne fait-il pas tout, tout seul ? Pourquoi se compliquer la tâche en définissant un runlevel à part ?
Tout simplement parce que les scripts d'initialisation (ceux présents dans /etc/init.d/, dont /etc/init.d/xuser) sont lancés avant que les consoles ne soient chargées. Du coup, si on lance startx dès le début, le serveur X va s'approprier la première console disponible, à savoir vt2. En passant par un nouveau runlevel, on s'assure que les consoles sont bien chargées avant que le serveur ne démarre.

Voilà pour mes 2¢ :)
Feedback welcome !

Yoann
Back to top
View user's profile Send private message
Bastux
Guru
Guru


Joined: 15 Dec 2002
Posts: 369
Location: France - Paris

PostPosted: Wed Mar 10, 2004 6:58 pm    Post subject: Reply with quote

Je vais tester ça ce soir et te dire si ya des trucs ki cloche.
Mais à première vue je dirais... bon boulot! :lol:
Back to top
View user's profile Send private message
Bastux
Guru
Guru


Joined: 15 Dec 2002
Posts: 369
Location: France - Paris

PostPosted: Wed Mar 10, 2004 7:03 pm    Post subject: Reply with quote

ça me parait bizarre que tu puisse pas lancer xuser après l'apparition des consoles...

ça dépend surement d'un after ou un truc comme ça.
Perso j'utilise bootsplash et c lui défini le bootsplash des autres consoles, ça veut forcément dire que les consoles arrivent AVANT bootsplash (le service).

En bidouillant ton xuser, tu dois pouvoir éviter le lancement du X avant les consoles.

La partie du inittab c la seule crade, le reste est nickel :D
Back to top
View user's profile Send private message
Bastux
Guru
Guru


Joined: 15 Dec 2002
Posts: 369
Location: France - Paris

PostPosted: Wed Mar 10, 2004 7:08 pm    Post subject: Reply with quote

C'est très bizarre...

Je viens de lire dans la doc gentoo sur les script d'init qu'effectivemenet init lançait les services PUIS les consoles...

Donc ce que je viens de dire n'a plus de sens.

Par contre moi j'ai une autre question du coup :
Comment les autres services de démarrage font pour se lancer dans le vty7?
Back to top
View user's profile Send private message
Bastux
Guru
Guru


Joined: 15 Dec 2002
Posts: 369
Location: France - Paris

PostPosted: Wed Mar 10, 2004 7:15 pm    Post subject: Reply with quote

Après étude de /etc/inittab et /etc/init.d/xdm j'ai compris :D

En fait on peut pas faire autrement, X utilise la même chose en faisant un

Code:

x:a:once:/etc/X11/startDM.sh


à la fin. Il est expliqué au début du fichier pourquoi :

Quote:

# Any Display manager (gdm,kdm,xdm) have the following problem: if
# it is started before any getty, and no vt is specified, it will
# usually run on vt2. When the getty on vt2 then starts, and the
# DM is already started, the getty will take control of the keyboard,
# leaving us with a "dead" keyboard.
#
# Resolution: add the following line to /etc/inittab
#
# x:a:once:/etc/X11/startDM.sh
#
# and have /etc/X11/startDM.sh start the DM in daemon mode if
# a lock is present (with the info of what DM should be started),
# else just fall through.


Donc bien vu ;)

Désolé de m'être énervé avec tous mes posts, mais au moins j'ai appris qq chose today :D


Bon boulot


Last edited by Bastux on Wed Mar 10, 2004 7:36 pm; edited 2 times in total
Back to top
View user's profile Send private message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Wed Mar 10, 2004 7:16 pm    Post subject: Reply with quote

Le seul service qui utilise un vt est xdm. Il est donc obligé de mettre en oeuvre la technique du runlevel. C'est d'ailleurs de xdm que j'ai tiré la solution à mon problème :).
Quant aux autres services, ils ne font qu'afficher un cours message, sans monopoliser de vt, donc il n'y a pas de problème de ce coté là.

[EDIT] Tu as été plus rapide que moi :) [/EDIT]
Back to top
View user's profile Send private message
Bastux
Guru
Guru


Joined: 15 Dec 2002
Posts: 369
Location: France - Paris

PostPosted: Wed Mar 10, 2004 7:36 pm    Post subject: Reply with quote

Sinon petit détail. Je ne suis pas sur ke le "einfo" de startUS.sh fonctionne car là tu es dans bash et cette commande n'existe pas avec bash.
A confirmer.
Back to top
View user's profile Send private message
yaubi
Apprentice
Apprentice


Joined: 15 Jan 2003
Posts: 194
Location: Oxford, UK

PostPosted: Wed Mar 10, 2004 7:47 pm    Post subject: Reply with quote

Non, effectivement, ce n'est pas une commande interne de bash, mais une fonction spécifique aux scripts d'initialisation de Gentoo disponible dans le fichier /etc/init.d/functions.sh :)

/etc/X11/startUS.sh wrote:
source /etc/init.d/functions.sh
Back to top
View user's profile Send private message
Bastux
Guru
Guru


Joined: 15 Dec 2002
Posts: 369
Location: France - Paris

PostPosted: Wed Mar 10, 2004 8:27 pm    Post subject: Reply with quote

yaubi wrote:
Non, effectivement, ce n'est pas une commande interne de bash, mais une fonction spécifique aux scripts d'initialisation de Gentoo disponible dans le fichier /etc/init.d/functions.sh :)

/etc/X11/startUS.sh wrote:
source /etc/init.d/functions.sh


Autant pour moi :)
J'avais pas vu le source /etc/init.d/functions.sh...

Jvous jure parfois j'arrive à dire des trucs intelligents me jugez pas!!! :lol:
Back to top
View user's profile Send private message
foulmetal
n00b
n00b


Joined: 09 Jul 2004
Posts: 20
Location: Nantes

PostPosted: Sun Jan 02, 2005 8:04 pm    Post subject: ya pas plus simple ? Reply with quote

Et pourquoi ne pas lancer X directement depuis une session login en console ?
Tout ce qu'il faut faire c'est uniquement ouvrir son ~/.bashrc ou son ~/.zshrc et d'y ajouter les lignes suivantes :
Code:
$TTY=$(tty)
if [ $TTY = /dev/tty1 -o $TTY = /dev/vc/1 ]; then
   startx
fi

Ça va exécuter une session X uniquement à partir de la première console (et forcément ça la réquisitionne).

C'est déjà plus simple à mettre en œuvre, c'est beaucoup moins de bidouillage et d'autre part on ne casse pas la sécurité ;)
Back to top
View user's profile Send private message
Polo
l33t
l33t


Joined: 27 Jan 2004
Posts: 649
Location: Angers, France

PostPosted: Sun Jan 02, 2005 9:18 pm    Post subject: Reply with quote

oui, c'est très possible, mais ce qu'il voulait, c'etait justement de ne pas se logguer....
Et avec startx dans le .bashrc , tu doit quand meme te logguer
(après je suis pas dans le tête de yaubi :D )
Back to top
View user's profile Send private message
gulivert
l33t
l33t


Joined: 17 Jun 2004
Posts: 838
Location: Switzerland

PostPosted: Mon Jan 03, 2005 10:39 am    Post subject: Reply with quote

Rooo trop bonn ton script, c'est marrant car pas plus tard que samedi j'essayais de faire un script ini pour me loguer et lancer X automatiquement sans utiliser xdm ou autres. Comme koi :D
Merci je test ce soir, fait plaisir .... :wink:
_________________
Macbook Unibody 5.1 - Kernel 2.6.34 - Xorg 1.8.0 - Gnome 2.30
Back to top
View user's profile Send private message
gulivert
l33t
l33t


Joined: 17 Jun 2004
Posts: 838
Location: Switzerland

PostPosted: Wed Jan 05, 2005 6:02 pm    Post subject: Reply with quote

Hello

Ben je viens de tester tes scripts et j'ai deux soucis avec.

1.- Lorsque l'ordi se lance, j'ai bien le service xuser qui se lance juste avant le service local, puis sa arrive au prompt.
Depuis ce moment là je dois attendre environ 2 minutes avant que X se lance ..... Ben heu :cry:

2.- Lorsque X se lance il démarre bien sous une session Fvwm avec le user gulivert, mais le problème, c'est que la session fvwm est la session par default, en clair, sa ne charge pas mon theme fvwm qui se trouve dans /home/gulivert/.fvwm et ça charge le theme tout pourri de Fvwm
Une idée???
Peut être bien que le premier pb et lié au deuxième......

Merci d'avance
_________________
Macbook Unibody 5.1 - Kernel 2.6.34 - Xorg 1.8.0 - Gnome 2.30
Back to top
View user's profile Send private message
gulivert
l33t
l33t


Joined: 17 Jun 2004
Posts: 838
Location: Switzerland

PostPosted: Sat Jan 08, 2005 7:01 pm    Post subject: Reply with quote

ben personne :?: :?: :cry:
_________________
Macbook Unibody 5.1 - Kernel 2.6.34 - Xorg 1.8.0 - Gnome 2.30
Back to top
View user's profile Send private message
Darkael
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1321
Location: France

PostPosted: Sun Jan 09, 2005 2:26 am    Post subject: Reply with quote

gulivert wrote:
Hello

Ben je viens de tester tes scripts et j'ai deux soucis avec.

1.- Lorsque l'ordi se lance, j'ai bien le service xuser qui se lance juste avant le service local, puis sa arrive au prompt.
Depuis ce moment là je dois attendre environ 2 minutes avant que X se lance ..... Ben heu :cry:


Est-ce que tu as bien rendu exécutable le scriptUS.sh ? Sinon je sais pas... Par contre je crois que j'avais proposé une alternative à cette méthode, plus laide mais qui prenait beaucoup moins de lignes. Elle pourra peut-être marcher pour toi, si t'as le courage de chercher dans le forum...
[EDIT]
Bon, finalement, c'était pas très dur à trouver:
http://forums.gentoo.org/viewtopic.php?p=1530570#1530570
Back to top
View user's profile Send private message
gulivert
l33t
l33t


Joined: 17 Jun 2004
Posts: 838
Location: Switzerland

PostPosted: Sun Jan 09, 2005 12:43 pm    Post subject: Reply with quote

Oui oui j'ai bien rendu les scripts executables... Le sript se lance bien mais du genre 2 minutes apres le boot, et c'est pas ma session fvwm qui se lance mais celle par default, tous ça bien sous le login gulivert pourtant :roll:

Je vais essayer ton script, merci
_________________
Macbook Unibody 5.1 - Kernel 2.6.34 - Xorg 1.8.0 - Gnome 2.30
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French 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