View previous topic :: View next topic |
Author |
Message |
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Wed Mar 10, 2004 6:27 pm Post subject: [HowTo] Ouvrir une session graphique au démarrage |
|
|
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 !
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 |
|
|
Bastux Guru
Joined: 15 Dec 2002 Posts: 369 Location: France - Paris
|
Posted: Wed Mar 10, 2004 6:58 pm Post subject: |
|
|
Je vais tester ça ce soir et te dire si ya des trucs ki cloche.
Mais à première vue je dirais... bon boulot! |
|
Back to top |
|
|
Bastux Guru
Joined: 15 Dec 2002 Posts: 369 Location: France - Paris
|
Posted: Wed Mar 10, 2004 7:03 pm Post subject: |
|
|
ç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 |
|
Back to top |
|
|
Bastux Guru
Joined: 15 Dec 2002 Posts: 369 Location: France - Paris
|
Posted: Wed Mar 10, 2004 7:08 pm Post subject: |
|
|
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 |
|
|
Bastux Guru
Joined: 15 Dec 2002 Posts: 369 Location: France - Paris
|
Posted: Wed Mar 10, 2004 7:15 pm Post subject: |
|
|
Après étude de /etc/inittab et /etc/init.d/xdm j'ai compris
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
Bon boulot
Last edited by Bastux on Wed Mar 10, 2004 7:36 pm; edited 2 times in total |
|
Back to top |
|
|
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Wed Mar 10, 2004 7:16 pm Post subject: |
|
|
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 |
|
|
Bastux Guru
Joined: 15 Dec 2002 Posts: 369 Location: France - Paris
|
Posted: Wed Mar 10, 2004 7:36 pm Post subject: |
|
|
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 |
|
|
yaubi Apprentice
Joined: 15 Jan 2003 Posts: 194 Location: Oxford, UK
|
Posted: Wed Mar 10, 2004 7:47 pm Post subject: |
|
|
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 |
|
|
Bastux Guru
Joined: 15 Dec 2002 Posts: 369 Location: France - Paris
|
Posted: Wed Mar 10, 2004 8:27 pm Post subject: |
|
|
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!!! |
|
Back to top |
|
|
foulmetal n00b
Joined: 09 Jul 2004 Posts: 20 Location: Nantes
|
Posted: Sun Jan 02, 2005 8:04 pm Post subject: ya pas plus simple ? |
|
|
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 |
|
|
Polo l33t
Joined: 27 Jan 2004 Posts: 649 Location: Angers, France
|
Posted: Sun Jan 02, 2005 9:18 pm Post subject: |
|
|
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 ) |
|
Back to top |
|
|
gulivert l33t
Joined: 17 Jun 2004 Posts: 863 Location: Switzerland
|
Posted: Mon Jan 03, 2005 10:39 am Post subject: |
|
|
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
Merci je test ce soir, fait plaisir .... _________________ Macbook Pro Unibody 9.1 - Kernel 4.4.6 - Awesome 3.5 |
|
Back to top |
|
|
gulivert l33t
Joined: 17 Jun 2004 Posts: 863 Location: Switzerland
|
Posted: Wed Jan 05, 2005 6:02 pm Post subject: |
|
|
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
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 Pro Unibody 9.1 - Kernel 4.4.6 - Awesome 3.5 |
|
Back to top |
|
|
gulivert l33t
Joined: 17 Jun 2004 Posts: 863 Location: Switzerland
|
Posted: Sat Jan 08, 2005 7:01 pm Post subject: |
|
|
ben personne _________________ Macbook Pro Unibody 9.1 - Kernel 4.4.6 - Awesome 3.5 |
|
Back to top |
|
|
Darkael Veteran
Joined: 10 Aug 2004 Posts: 1321 Location: France
|
Posted: Sun Jan 09, 2005 2:26 am Post subject: |
|
|
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
|
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:
https://forums.gentoo.org/viewtopic.php?p=1530570#1530570 |
|
Back to top |
|
|
gulivert l33t
Joined: 17 Jun 2004 Posts: 863 Location: Switzerland
|
Posted: Sun Jan 09, 2005 12:43 pm Post subject: |
|
|
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
Je vais essayer ton script, merci _________________ Macbook Pro Unibody 9.1 - Kernel 4.4.6 - Awesome 3.5 |
|
Back to top |
|
|
|