cosa fa il comando startx?


18

Durante la lettura di Ubuntu ho trovato la seguente dichiarazione .....

Se il display manager non viene avviato per impostazione predefinita nel runlevel predefinito, è possibile avviare X in modo diverso, dopo aver effettuato l'accesso a una console in modalità testo, eseguendo startx dalla riga di comando.

Cosa significa essere un runlevel predefinito? E quando ho provato questo sul mio terminale ho ottenuto questo:

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

Ho appena avviato startx ma ho avuto lo stesso errore di te, quindi l'ho fatto sudo. Lo trasforma mi ha registrato nell'account di root. Quello che ho fatto per tornare al mio utente è stato il logout da root.

Risposte:


25

C'era una volta (1), quando la memoria dei computer veniva misurata in kilobyte e i dischi in megabyte, l'esecuzione dell'interfaccia grafica per tutto il tempo era considerata dannosa.

La maggior parte dei computer Unix sono stati utilizzati per calcoli scientifici e simulazioni in ambienti multiutente e l'interfaccia grafica in esecuzione su di essi ridurrebbe la memoria e la potenza della CPU a loro disposizione.

Quindi, quando hai bisogno di un'interfaccia grafica, l'hai appena avviata con startx(2).

startxfondamentalmente esegue un Xserver (il "driver" grafico) e un comando che lo esegue, che in genere è un gestore di finestre . Per impostazione predefinita, i comandi eseguiti sono nel ~/.xinitrcfile nella directory home o in caso contrario in alcuni file di sistema generici.

I sistemi moderni sono pensati dal basso verso l'alto per avere un sistema grafico in esecuzione tutto il tempo, quindi nessuno ha probabilmente controllato il funzionamento di startxper anni - questo spiega un sacco di comportamenti strani che puoi avere.

Se vuoi sperimentare e provare i bei vecchi tempi, la cosa migliore è fare quanto segue:

A) installa Xneste fvwm. Xnest è un server grafico all'interno di un server, un tipo di server che si aprirà come una finestra nel tuo normale sistema. Fvwm è un gestore di finestre molto semplice che all'epoca era molto popolare. Avrai anche bisogno di vecchi caratteri pixmap.

sudo apt-get install xnest fvwm 
sudo apt-get install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi-transcoded xfonts-75dpi 

B) scrivi questo file da qualche parte, ad esempio nella tua home directory, e chiamalo ~/test:

#!/bin/bash 
#
xterm & 
exec fvwm2

C) Esegui (nota: startxnormalmente viene eseguito prima con il comando client, poi con un doppio trattino e poi con un comando server. Come ho già detto, la maggior parte dei nuovi sistemi non ha impostazioni predefinite ragionevoli da startxsolo.).

cd ~
startx ~/test -- /usr/bin/Xnest -ac :1 -geometry 800x600

... e hai una schermata della workstation 80ies:

inserisci qui la descrizione dell'immagine

(Puoi avere il menu facendo clic sul desktop "Xnest").

... e se ti senti davvero avventuroso, puoi avviare una sessione nativa su un'altra console virtuale (leggi le altre risposte) andando a una di esse con Ctrl-Alt-F1, eseguendo il login e

startx ~/test 

che normalmente si aprirà su Ctrl-Alt-F8.

Avviso : i moderni ambienti desktop non sono progettati per funzionare contemporaneamente, per lo stesso utente, in due console diverse. Quindi non usare gnome-shello unitycose moderne durante questi esperimenti, altrimenti potresti confondere la tua configurazione.


Note:

(1) Parlando qui intorno al 1980-90.

(2) Ad esempio, avevo un laptop con 256k di RAM. È stato dolorosamente lento nell'interfaccia grafica (B&N!), Ma scattante nella console. Così ho fatto la maggior parte del mio lavoro (editing C, LaTeXe file simili) in modalità console, e sono passato per l'ambiente grafico solo quando realmente necessario.


4
Grazie @ Rmano, un'ottima spiegazione ha capito ...
lazarus,

9

startx avvia xsession o l'interfaccia grafica in cui viene visualizzata una schermata di accesso e qualcosa di più di una semplice console ASCII (sessione di testo).

Questo errore viene visualizzato perché xsession è già stata avviata e si sta tentando di eseguire il comando dall'interno di xsession su tty7.

tty7 è l'interfaccia utente esistente in ctrl+ alt+ f7(xsession predefinita).

tty1 è l'interfaccia utente che esiste in ctrl+ alt+ f1.

tty2 è l'interfaccia utente che esiste in ctrl+ alt+ f2. . . e così via.

tty1 - tty6 sono sessioni di testo e puoi accedere con il tuo nome utente e password su una di queste schermate. Dopo aver effettuato l'accesso, è possibile eseguire il comando startxe xsession verrà avviato in tty7 se non è già in esecuzione e tty8 se tty7 sta già eseguendo una xsession.


Livelli di esecuzione:

run-level 0 Halt - Arresta il sistema.

run-level 1 Modalità utente singolo - Modalità per attività amministrative.

run-level 2 Multiutente grafico con rete: avvia normalmente il sistema.

livello di esecuzione 3-5 Non utilizzato ma configurato come il livello di esecuzione 2

run-level 6 Reboot: riavvia il sistema.

Il termine runlevel si riferisce a una modalità operativa in uno dei sistemi operativi per computer che implementano l'inizializzazione in stile V di Unix System. Convenzionalmente, esistono sette runlevel, numerati da zero a sei; sebbene si possano usare fino a dieci, da zero a nove [citazione necessaria]. S è talvolta usato come sinonimo di uno dei livelli. Viene eseguito solo un "runlevel" all'avvio - i livelli di esecuzione non vengono eseguiti in sequenza, ovvero viene eseguito il runlevel 2 OR 3 OR 4, non 2 quindi 3 quindi 4. - it.wikipedia.org/wiki/Runlevel


Grazie mchid mi ha aiutato molto,
lazzaro

ma quando accedo a tty1 ed eseguo $ startx, ho una finestra desktop senza alcuna barra di avvio e altre opzioni ... (su tty8) -ctrl + Alt + F8, è che il mio startx non era ben configurato o mostra un numero limitato opzioni su startx (come qui solo desktop)
lazarus

1
@jazzz Questo è l'ambiente x predefinito. Molto probabilmente hai installato più ambienti desktop. Dovresti essere in grado di CTRL + T per ottenere un terminale in modo da poter eseguire comandi come unityo gnome-shell --replaceo anche gnome-panelo metacity --replace.
mchid

@jazzz Inoltre, se accetti questa risposta, fai clic sull'icona a sinistra per chiuderla. Grazie!
mchid

mi dispiace sono in ritardo per un'altra domanda riguardo a questo --- è la nuova finestra che ho ottenuto da Ctrl + Alt + F8, come ho detto sopra è simile allo spazio di lavoro?
lazzaro,

4

Significa semplicemente con una diversa tty .

Citando la domanda collegata:

Di default Ubuntu ha 7 tty.

1-6sono solo a riga di comando, 7esegue la tua sessione X (il tuo normale desktop grafico).

Per accedervi, utilizzare questa scorciatoia da tastiera: Ctrl+ Alt+F1

(passando F1a F1-F6 per accedere al terminale di cui hai bisogno)

Per tornare alla tua sessione X (il desktop normale), usa: Ctrl+ Alt+F7

after logging on to a text-mode console significa semplicemente accedere a un diverso tty e digitare il comando:

startx

1

Come osserva Rmano, startx è un approccio molto vecchio. Molto tempo fa, quando veniva utilizzato, il binario X11 era installato setuid root.

Ho appena provato questo in una macchina virtuale e startx, per impostazione predefinita , non riesce come descritto. chmod u+s /usr/lib/xorg/Xorgrisolve questo però.

Non consiglio di fare il Xorgsetuid root. Il mondo si è allontanato da quello per Good Reason. Ma se stai giocando in una macchina virtuale usa e getta, ecco come far startxfunzionare.


1

QEMU + Buildroot esempio minimo

Il mio modo preferito per imparare cosa fa qualcosa è fare un esempio minimo che lo esegue.

Su Ubuntu, questo è difficile poiché un secondo startxpotrebbe essere in conflitto con il tuo desktop attuale.

/ubuntu//a/519164/52975 propone Xnest, ma con QEMU + Buildroot possiamo andare ancora più minimali e creare una micro-distribuzione con solo X11 installato.

In questo modo dovrebbe essere più facile capire cosa sta succedendo.

Ho descritto la creazione della distro su: /unix//a/306116/32558

Una volta che hai l'immagine in esecuzione su QEMU, inizi su una shell TTY.

Quindi quando lo fai:

root
startx

avvia una GUI X11:

inserisci qui la descrizione dell'immagine

Ora dai un'occhiata alla fonte per startx all'interno di quella distro, che è solo uno script di shell.

È un semplice wrapper /usr/bin/xinite passa/etc/X11/xinit/xinitrc a xinit.

Se si apre /etc/X11/xinit/xinitrc, contiene le seguenti righe:

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

quindi vediamo che si avvia:

  • twm: un gestore di finestre molto semplice e vecchio
  • xclocke xtermche vediamo sullo schermo

Per /usr/bin/xinit, possiamo fare:

man xinit

che dice che:

Se sulla riga di comando non viene fornito alcun programma client specifico, xinit cercherà un file nella directory home dell'utente chiamato .xinitrc da eseguire come script shell per avviare i programmi client. Se tale file non esiste, xinit utilizzerà come segue l'impostazione predefinita:

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

Se sulla riga di comando non viene fornito alcun programma server specifico, xinit cercherà un file nella directory home dell'utente chiamato .xserverrc da eseguire come script shell per avviare il server. Se tale file non esiste, xinit utilizzerà come segue l'impostazione predefinita:

X  :0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.