web-dev-qa-db-fra.com

que fait la commande startx?

En lisant à propos d’Ubuntu, j’ai trouvé la déclaration suivante .....

Si le gestionnaire d'affichage n'est pas démarré par défaut dans le niveau d'exécution par défaut, vous pouvez démarrer X différemment, après vous être connecté à une console en mode texte, en exécutant startx à partir de la ligne de commande.

Qu'est-ce que cela signifie d'être un niveau d'exécution par défaut? Et quand j'ai essayé ceci sur mon terminal, j'ai eu ceci:

anupam@JAZZ:~$ startx

X: user not authorized to run the X server, aborting.
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
17
lazarus

startxdémarre la xsession ou l'interface graphique sur laquelle vous voyez un écran de connexion et autre chose qu'une console ascii (session de texte).

Vous recevez cette erreur car la xsession est déjà démarrée et vous essayez d'exécuter la commande depuis l'intérieur de la xsession sur tty7.

tty7 est l'interface utilisateur qui existe à ctrl + alt + f7 (xsession par défaut).

tty1 est l'interface utilisateur qui existe à ctrl + alt + f1.

tty2 est l'interface utilisateur qui existe à ctrl + alt + f2 . . . etc.

tty1 - tty6 sont des sessions de texte et vous pouvez vous connecter avec votre nom d’utilisateur et votre mot de passe sur l’un de ces écrans. Après vous être connecté, vous pouvez exécuter la commande startxet la xsession démarrera dans tty7 si elle n’exécute pas déjà et tty8 si tty7 exécute déjà une xsession.


Niveaux d'exécution:

run-level 0 Halt - Arrête le système.

niveau d'exécution 1 Mode mono-utilisateur - Mode pour les tâches administratives.

run-level 2 Multi-utilisateur graphique avec mise en réseau - Démarre le système normalement.

niveau d'exécution 3-5 inutilisé mais configuré de la même manière que le niveau d'exécution 2

niveau d'exécution 6 Reboot - Redémarre le système.

Le ​​terme niveau d'exécution fait référence à un mode de fonctionnement dans l'un des systèmes d'exploitation d'ordinateur qui implémentent l'initialisation de type Unix System V. Classiquement, il existe sept niveaux d'exécution, numérotés de zéro à six; bien que jusqu'à dix, de zéro à neuf [citation nécessaire], puissent être utilisés. S est parfois utilisé comme synonyme pour l'un des niveaux. Un seul "niveau d'exécution" est exécuté au démarrage - les niveaux d'exécution ne sont pas exécutés de manière séquentielle, c'est-à-dire que le niveau d'exécution 2 OR 3 OR 4 est exécuté, mais pas 2 alors 3 puis 4. - en.wikipedia.org/wiki/Runlevel

9
mchid

Cela signifie simplement à un autre tty .

Citation de la question liée:

Par défaut, Ubuntu a 7 terminaux.

1-6 sont en ligne de commande uniquement, 7 exécute votre session X (votre bureau graphique normal).

Pour y accéder, utilisez ce raccourci clavier: Ctrl + Alt + F1

(changer F1 en F1-F6 pour accéder au terminal dont vous avez besoin)

Pour revenir à votre session X (le bureau normal), utilisez: Ctrl + Alt + F7

after logging on to a text-mode console signifie simplement vous connecter à un tty différent et taper la commande:

startx
4
Parto

Exemple minimal QEMU + Buildroot

Ma façon préférée d'apprendre ce que fait quelque chose est de faire un exemple minimal qui le gère.

Sur Ubuntu, cela est difficile, car un second startx pourrait entrer en conflit avec votre bureau actuel.

https://askubuntu.com/a/519164/52975 propose Xnest, mais avec QEMU + Buildroot, nous pouvons aller encore plus loin et créer une micro-distribution avec seulement X11 installé.

De cette façon, il devrait être plus facile de comprendre ce qui se passe.

J'ai décrit la création de la distribution à l'adresse suivante: https://unix.stackexchange.com/a/306116/32558

Une fois que l'image est exécutée sur QEMU, vous démarrez sur un TTY Shell.

Puis quand tu fais:

root
startx

il commence une interface graphique X11:

enter image description here

Jetons maintenant un coup d'œil au code source de startx dans cette distribution, qui n'est qu'un script shell.

C'est un simple wrapper sur /usr/bin/xinit, et il transmet /etc/X11/xinit/xinitrc à xinit.

Si vous ouvrez /etc/X11/xinit/xinitrc, il contient les lignes suivantes:

twm &
xclock -geometry 50x50-1+1 &
xterm -geometry 80x50+494+51 &
xterm -geometry 80x20+494-0 &

alors on voit que ça commence:

  • twm: un gestionnaire de fenêtres très simple et ancien
  • xclock et xterm que nous voyons à l'écran

Pour /usr/bin/xinit, nous pouvons faire:

man xinit

qui dit que:

Si aucun programme client spécifique n'est indiqué sur la ligne de commande, xinit recherchera un fichier dans le répertoire de base de l'utilisateur appelé .xinitrc à exécuter en tant que script Shell pour démarrer les programmes client. Si aucun fichier de ce type n'existe, xinit utilisera par défaut les éléments suivants:

xterm  -geometry  +1+1  -n  login  -display  :0

Si aucun programme serveur spécifique n'est indiqué sur la ligne de commande, xinit recherchera un fichier dans le répertoire de base de l'utilisateur appelé .xserverrc à exécuter en tant que script Shell pour démarrer le serveur. Si aucun fichier de ce type n'existe, xinit utilisera par défaut les éléments suivants:

X  :0

Comme le note Rmano, startx est une approche très ancienne. Il y a bien longtemps, le binaire X11 était installé setuid root.

Je viens d'essayer ceci dans un VM et en effet, startx échoue comme vous le décrivez, par défaut. chmod u+s /usr/lib/xorg/Xorg résout ce problème.

Je ne recommande pas de définir Xorg comme étant root. Le monde s'est éloigné de cela pour la bonne raison. Mais si vous jouez dans une machine virtuelle jetable, voici comment faire fonctionner startx.

1
Phil P