web-dev-qa-db-fra.com

Comment une session graphique d'utilisateur en direct ubuntu (startx) est-elle démarrée dans un LiveCD?

J'essaie de créer une image ISO personnalisée à l'aide de ubuntu-builder. J'ai pris un 12,40 mini remix ISO comme point de départ. Voici mon exemple spécifique - cependant, je suis intéressé par le principe du processus (pour que je puisse l'appliquer à d'autres DE/WM).

lorsque j'exécute une nouvelle image ISO, créée directement à partir de la mini ISO de démarrage du remix, tout se passe comme prévu: je peux exécuter la nouvelle image ISO sur une machine virtuelle et le processus de démarrage se termine par une invite text-only Prompt pour le live ubuntu utilisateur.

Maintenant, j'essaie d'installer LXDE (il y a une entrée pour cela dans ubuntu-builder, apparemment, il installe les dépendances lxde-core et X; et je dois installer manuellement lxterminal, et comme les icônes manquent , probablement lxde-icon-theme également). Je dois aussi installer manuellement xinit, donc j’ai startx. Mais cela, en soi, ne fait pas grand chose: si je lance cette image ISO personnalisée dans une machine virtuelle, il se passe exactement la même chose qu'avec le fichier ISO "original" - le processus de démarrage se termine par une invite en mode texte Invite pour ubuntu utilisateur en direct.

Si je tape maintenant startx à cette invite, LXDE démarre (exécuter startlxde à cette invite se plaindra de X), de sorte que lorsque vous démarrez lxterminal à partir de ce bureau, il démarre sous le live ubuntu utilisateur.


Dans LiveCDCustomization - Boot init , il est mentionné:

Démarrage initial
Vous devez éditer les fichiers dans edit/usr/share/initramfs-tools/scripts/casper-bottom/* Par exemple, vous pouvez modifier le nom d’hôte ou l’utilisateur livecd.

... mais je ne comprends pas exactement ce qui est géré par quoi. Le ubuntu-builder décompresse ces fichiers sous /home/ubuntu-builder/FileSystem/usr/share/initramfs-tools/scripts/casper-bottom/ - mais, autant que je sache, la plupart ne font que lancer des commandes sed intégrées, je ne vois pas beaucoup de commandes d'exécution là-bas?

J'ai quand même essayé de copier l'un des scripts sous la forme d'un nouveau script, 51startx, qui, dans la section exécutable, contient:

log_begin_msg "$DESCRIPTION"

chroot /root startx
chroot /root startlxde

log_end_msg

Cela ne fait absolument rien - encore une fois, après le démarrage, je reçois le texte habituel Prompt ubuntu@ubuntu:~$.


Puis j'ai trouvé Modifier: Startx automatiquement, ajouter apt, etc. - backtrack-linux.org :

Pour avoir un login graphique, installez simplement gdm et lancez-le au démarrage:

aptitude update 
 aptitude install gdm

Ensuite, éditez /etc/rc.local et ajoutez une ligne AVANT "exit 0" comme ceci:

service gdm start

Ce n'est pas la meilleure façon, mais courez! . Cela doit fonctionner avec "update-rc.d gdm default", mais cette méthode échoue.

Et en effet - j'ai ajouté:

startx
startlxde

... sur /etc/rc.local - et cela démarre et lance LXDE automatiquement - cependant, lorsque je lance lxterminal, il se trouve sous l'utilisateur root - et non sous l'utilisateur réel ubuntu!


Alors, que dois-je faire pour pouvoir démarrer (tout) X et/ou tout environnement de bureau automatiquement au démarrage sous l'utilisateur live ubuntu?

Notez que dans ce cas, je ne voudrais pas utiliser un gestionnaire de bureau supplémentaire (par exemple, gdm) ni un greeter correspondant - mais cela Bon à savoir, si une solution de démarrage automatique de X fonctionnerait également pour un gestionnaire de bureau ou un greeter.

3
sdaau

OK, je pense que je suis quelque part - mais je ne comprends toujours pas, alors une réponse appropriée serait appréciée :)

Mais, fondamentalement, le processus de démarrage démarre, le processus init s'exécute quelque part et le noyau se charge - mais certains scripts de démarrage s'exécutent également. Ces scripts font partie de initramfs. Depuis le noyau de démarrage, ils sont appelés /scripts/.... Cependant, dans le système de fichiers non compressé de ubuntu-builder, ils se trouvent dans ./FileSystem/usr/share/initramfs-tools/scripts/. Finalement, dans une installation typique, cela finira par charger le gestionnaire d’affichage donné, qui " présente à l’utilisateur un écran de connexion qui demande un nom d’utilisateur et un mot de passe "; où apparemment un dessein d’un tel écran dans un DM est appelé un greeter . Une fois la connexion établie dans la machine DM, le contrôle est ensuite transmis à l'environnement de bureau/gestionnaire de fenêtres (DE/WM). Je ne sais toujours pas qui/quoi commence le DM en premier lieu; mais s'il est démarré, je suppose que le DM est ensuite le démarreur du DE/WM (en fonction de l'authentification et des paramètres de connexion). Ou:

(boot start) --> initramfs --> scripts --> (kernel?) --> DM --> (login) --> DE+WM --> (boot completion)

Je ne peux toujours pas faire la différence correctement entre DE et WM, mais par exemple, LXDE est apparemment un DE (comme son nom l'indique); et typiquement, il est utilisé avec openbox en tant que WM. Donc, en d'autres termes, ce que je veux ici, c'est ignorer le DM et aller directement à DE/WM en tant qu'utilisateur en direct ubuntu.

Retour aux scripts de démarrage - en particulier les init-bottom et casper-bottom sont visibles dans les messages du journal de démarrage - également disponibles dans le fichier /var/log/boot.log, une fois que l'ISO a fini de démarrer et que nous pouvons utiliser less. Ces scripts sont particulièrement intéressants:

$ Sudo grep -ri "Adding live" ./FileSystem/usr/share/initramfs-tools/
./FileSystem/usr/share/initramfs-tools/scripts/casper-bottom/25adduser:DESCRIPTION="Adding live session user..."

$ Sudo grep -ri dm ./FileSystem/usr/share/initramfs-tools/scripts/ | grep 'if \['
(./FileSystem/usr/share/initramfs-tools/scripts/casper-bottom/15autologin)
15autologin:if [ -d /root/etc/gdm ]; then
15autologin:if [ -f /root/etc/kde4/kdm/kdmrc ]; then
15autologin:if [ -f /root/etc/lxdm/lxdm.conf ]; then
15autologin:if [ -f /root/etc/xdg/lubuntu/lxdm/lxdm.conf ]; then
15autologin:if [ -d /root/etc/lightdm ]; then

Ainsi, le script autologin compte essentiellement sur un gestionnaire d'affichage (DM) étant déjà installé (dans l'image du CD) - et cherche simplement ses fichiers de configuration possibles, et le remplace à la place en utilisant sed, de sorte que le DM en question effectue une connexion automatique, une fois il est commencé (par quelque chose qui le commence habituellement). D'autre part, le script adduser crée l'utilisateur en direct ubuntu à partir de zéro au démarrage - et à ce titre, il existe aucun fichier que nous pourrions apriori éditer et stocker sur l’image du CD.

La bonne chose, cependant, est que ces scripts s'exécutent définitivement avant que /etc/rc.local ne s'exécute, qui s'exécute avant que le terminal bash ne soit finalement lancé à la fin du démarrage. Donc, ce que j'ai fait est utilisé le fichier /etc/rc.local pour "injecter" une séquence de démarrage X dans ~/.bashrc de l'utilisateur ubuntu:

$ tail -n 15 ./FileSystem/etc/rc.local 
#
# By default this script does nothing.

#sed -i 's/console/anyone/' /etc/X11/Xwrapper.config
#su - ubuntu -c "touch /home/ubuntu/.Xauthority"
#su - ubuntu -c startx
#sed -i 's/anyone/console/' /etc/X11/Xwrapper.config

echo ls -la /home/ubuntu
ls -la /home/ubuntu
# echo startx >> /home/ubuntu/.bashrc # this gives error "Server is already active for display 0"
echo 'if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then startx ; fi' >> /home/ubuntu/.bashrc
ls -la /home/ubuntu

exit 0

Donc, en bref:

  • Essayer de jouer avec .Xauthority ne va pas aider ici; l'échec sera "X: user not authorized to run the X server, aborting."
  • Pousser simplement startx dans .bashrc ne vous aidera pas ici; l'échec (après un long écran noir) sera "Server is already active for display 0"
  • Cependant, startx dans un if [ ... ] vérification réussira ( mais je ne comprends pas pourquoi un simple if [] ferait une différence? )!

Dans mon cas, cette commande startx lance à la fois LXDE et openbox, aussi bien le DE que le WM ( comment et pourquoi, je ne le fais toujours pas t comprendre ). Donc tout semble bien maintenant - sauf pour les icônes, et que j'ai pas d'options d'arrêt, de suspension, de mise en veille prolongée et de redémarrage . Mais au moins le problème immédiat dans mon OP est résolu. Cependant, j'apprécierais toujours une description plus appropriée de ce qui se passe ici.


Ci-dessous quelques liens/citations que j'ai trouvé utiles:

XDM (au complet, le gestionnaire d'affichage X Window) est le gestionnaire d'affichage par défaut du système X Window. Il s’agit d’un gestionnaire d’affichage X épuré. Il a été lancé avec la version 3 de X11 en octobre 1988 pour prendre en charge les terminaux X autonomes qui venaient d’arriver sur le marché.

Ce que je ne comprends pas, c'est pourquoi vous voulez utiliser xdm quand vous ne l'utilisez pas? Je veux dire, avoir xdm auto-login est exactement le contraire de ce pour quoi il avait été conçu: vous donner une invite de connexion graphique.

Utilisez le niveau d'exécution 3 et ajoutez 'su - -c startx' à /etc/init.d/rc.local ou (si vous utilisez inittab) changez "x: 5: respawn:/etc/X11/prefdm -nodaemon" en "x: 5: respawn: su - -c startx ".

Si vous créez votre propre fichier/etc/inittab, Ubuntu l'honorera.

Pour changer vos niveaux d'exécution de la manière Ubuntu, regardez dans /etc/init.d/ qui contient les scripts de démarrage. Recherchez ensuite dans /etc/rc#.d/ qui contient des liens symboliques vers des scripts dans /etc/init.d/. Le nom des liens symboliques détermine ce qui sera démarré/arrêté et dans quel ordre.

En bashrc essayer quelque chose comme

[-z "$ DISPLAY"] && startx && {sommeil 5; DISPLAY = 0: 0 setsid Guake; } 

pour startx automatique
éditez .bash_profile (ou un autre fichier qui s’exécute lorsque vous vous connectez) et ajoutez

if [-z "$ DISPLAY"] && [$ (tty) ==/dev/tty1]; puis 
 startx 
 fi
1
sdaau