¿Qué hace el comando startx?

18

Mientras leía sobre Ubuntu encontré la siguiente declaración .....

Si el administrador de visualización no se inicia de manera predeterminada en el nivel de ejecución predeterminado, puede iniciar X de una manera diferente, después de iniciar sesión en una consola en modo de texto, ejecutando startx desde la línea de comandos.

¿Qué significa ser un nivel de ejecución predeterminado? Y cuando probé esto en mi terminal, obtuve esto:

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
Lázaro
fuente
Acabo de ejecutar startx pero recibí el mismo error que tú, así que lo hice sudo. Lo convierte me inició sesión en la cuenta raíz. Lo que hice para devolverle a mi usuario fue cerrar sesión desde la raíz.

Respuestas:

25

Érase una vez (1), cuando la memoria de las computadoras se medía en kilobytes y los discos en megabytes, ejecutar la interfaz gráfica todo el tiempo se consideraba perjudicial.

La mayoría de las computadoras Unix se utilizaron para cálculos científicos y simulación en entornos de múltiples usuarios, y la interfaz gráfica que se ejecuta en ellos reduciría la memoria y la potencia de CPU disponibles para ellos.

Entonces, cuando necesitabas una interfaz gráfica, la comenzaste con startx(2).

startxbásicamente ejecuta un Xserver (el "controlador" gráfico) y un comando que se ejecuta en él, que generalmente es un administrador de ventanas . De manera predeterminada, los comandos que se ejecutan están en el ~/.xinitrcarchivo de su directorio de inicio, o en algún otro archivo genérico del sistema.

Se piensa que los sistemas modernos tienen un sistema gráfico que funciona todo el tiempo, por lo que probablemente nadie haya verificado el funcionamiento startxdurante años, lo que explica una gran cantidad de comportamiento extraño que puede tener.

Si quieres experimentar y sentir los viejos tiempos, lo mejor es hacer lo siguiente:

A) instalar Xnesty fvwm. Xnest es un servidor gráfico dentro de un servidor, un tipo de servidor que se abrirá como una ventana en su sistema normal. Fvwm es un administrador de ventanas muy simple que era muy popular en aquel entonces. También necesitarás fuentes antiguas de pixmap.

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

B) escriba este archivo en algún lugar, por ejemplo en su directorio de inicio, y llámelo ~/test:

#!/bin/bash 
#
xterm & 
exec fvwm2

C) Ejecutar (aviso: startxnormalmente se ejecuta con primero el comando del cliente, luego un doble guión y luego un comando del servidor. Como dije, la mayoría de los sistemas nuevos no tienen valores predeterminados sensibles startxsolo).

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

... y tienes una pantalla de estación de trabajo de los 80:

ingrese la descripción de la imagen aquí

(Puede tener el menú haciendo clic en el escritorio "Xnest").

... y si se siente realmente aventurero, puede iniciar una sesión nativa en otra consola virtual (lea las otras respuestas) yendo a una de ellas con Ctrl-Alt-F1, inicie sesión y

startx ~/test 

que normalmente se abrirá en Ctrl-Alt-F8.

Aviso : los entornos de escritorio modernos no están diseñados para ejecutarse simultáneamente, para el mismo usuario, en dos consolas diferentes. Por lo tanto, no use gnome-shello unitycosas modernas al hacer estos experimentos, o podría estropear su configuración.


Notas al pie:

(1) Hablando de alrededor de 1980-90 aquí.

(2) Por ejemplo, tenía una computadora portátil con 256k de RAM. Fue dolorosamente lento en la interfaz gráfica (¡en blanco y negro!), Pero rápido en la consola. Así que hice la mayor parte de mi trabajo (de edición C, LaTeXy archivos similares) en modo consola, y se conecta con el medio ambiente gráfico sólo cuando realmente se necesita.

Rmano
fuente
44
Gracias @ Rmano, gran explicación lo entendí totalmente ...
lazarus
9

startx inicia la sesión x o la interfaz gráfica donde ve una pantalla de inicio de sesión y cualquier cosa más que una simple consola ASCII (sesión de texto).

Está recibiendo este error porque la sesión x ya está iniciada y está intentando ejecutar el comando desde dentro de la sesión x en tty7.

tty7 es la interfaz de usuario que existe en ctrl+ alt+ f7(xsession predeterminada).

tty1 es la interfaz de usuario que existe en ctrl+ alt+ f1.

tty2 es la interfaz de usuario que existe en ctrl+ alt+ f2. . . y así.

tty1 - tty6 son sesiones de texto y puede iniciar sesión con su nombre de usuario y contraseña en una de estas pantallas. Después de iniciar sesión, puede ejecutar el comando startxy la xsession se iniciará en tty7 si aún no se está ejecutando y tty8 si tty7 ya está ejecutando una xsession.


Niveles de ejecución:

nivel de ejecución 0 Detener: apaga el sistema.

modo de usuario único de nivel de ejecución 1: modo para tareas administrativas.

nivel de ejecución 2 Multiusuario gráfico con funciones de red: inicia el sistema normalmente.

nivel de ejecución 3-5 No utilizado pero configurado igual que el nivel de ejecución 2

reinicio de nivel de ejecución 6: reinicia el sistema.

El término nivel de ejecución se refiere a un modo de operación en uno de los sistemas operativos de la computadora que implementan la inicialización de estilo V del sistema Unix. Convencionalmente, existen siete niveles de ejecución, numerados del cero al seis; aunque se pueden usar hasta diez, de cero a nueve [cita requerida]. S a veces se usa como sinónimo de uno de los niveles. Solo se ejecuta un "nivel de ejecución" en el arranque: los niveles de ejecución no se ejecutan secuencialmente, es decir, se ejecuta el nivel de ejecución 2 O 3 O 4, no 2, luego 3 y luego 4. - es.wikipedia.org/wiki/Runlevel

mchid
fuente
Thanx mchid me ayudó mucho,
lazarus
pero cuando inicio sesión en tty1 y realicé $ startx, obtuve una ventana de escritorio sin ninguna barra de inicio y otras opciones ... (en tty8) -ctrl + Alt + F8, es que mi startx no estaba bien configurado o muestra algunas limitaciones opciones en startx (como aquí solo Escritorio)
lazarus
1
@jazzz Ese es su entorno x predeterminado. Lo más probable es que tenga instalados múltiples entornos de escritorio. Debería poder CTRL + T para obtener un terminal para poder ejecutar comandos como unityo gnome-shell --replaceo incluso gnome-panelo metacity --replace.
mchid
@jazzz Además, si acepta esta respuesta, haga clic en el icono de la izquierda para cerrarla. ¡Gracias!
mchid
lo siento, llego un poco tarde para otra consulta con respecto a esto --- ¿es la nueva ventana que obtuve por Ctrl + Alt + F8, como dije anteriormente, es similar al espacio de trabajo?
lazarus
4

Simplemente significa en un tty diferente .

Citando la pregunta vinculada:

Por defecto, Ubuntu tiene 7 tty's.

1-6son solo línea de comando, 7ejecuta su sesión X (su escritorio gráfico normal).

Para acceder a ellos, use este atajo de teclado: Ctrl+ Alt+F1

(cambiando F1a F1-F6 para acceder al terminal que necesita)

Para volver a su sesión X (el escritorio normal), use: Ctrl+ Alt+F7

after logging on to a text-mode console simplemente significa iniciar sesión en un tty diferente y escribir el comando:

startx
Parto
fuente
1

Como señala Rmano, startx es un enfoque muy antiguo. Hace mucho tiempo cuando se usaba esto, el binario X11 se instaló setuid root.

Acabo de probar esto en una máquina virtual y, de hecho, startxfalla como usted describe, por defecto. chmod u+s /usr/lib/xorg/Xorgaunque eso lo arregla.

No recomiendo hacer que Xorgsea ​​root setuid. El mundo se ha alejado de eso por Buena Razón. Pero si estás jugando en una máquina virtual desechable, así es como hacer que startxfuncione.

Phil P
fuente
1

Ejemplo mínimo de QEMU + Buildroot

Mi forma favorita de aprender qué hace algo es haciendo un ejemplo mínimo que lo ejecute.

En Ubuntu, esto es difícil ya que un segundo startxpodría entrar en conflicto con su escritorio actual.

/ubuntu//a/519164/52975 propone Xnest, pero con QEMU + Buildroot podemos ir aún más mínimo y crear una microdistro con solo X11 instalado.

De esta manera, debería ser más fácil entender lo que está sucediendo.

Describí la creación de la distribución en: /unix//a/306116/32558

Una vez que tienes la imagen ejecutándose en QEMU, comienzas en un shell TTY.

Entonces cuando lo haces:

root
startx

inicia una GUI X11:

ingrese la descripción de la imagen aquí

Ahora eche un vistazo a la fuente startxdentro de esa distribución, que es solo un script de shell.

Es un simple envoltorio más /usr/bin/xinit, y que pasa /etc/X11/xinit/xinitrca xinit.

Si abre /etc/X11/xinit/xinitrc, contiene las siguientes líneas:

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

entonces vemos que comienza:

  • twm: un administrador de ventanas muy simple y antiguo
  • xclocky xtermque vemos en pantalla

Para /usr/bin/xinit, podemos hacer:

man xinit

que dice que:

Si no se proporciona un programa de cliente específico en la línea de comando, xinit buscará un archivo en el directorio de inicio del usuario llamado .xinitrc para ejecutarse como un script de shell para iniciar programas de cliente. Si no existe dicho archivo, xinit usará lo siguiente como predeterminado:

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

Si no se proporciona un programa de servidor específico en la línea de comando, xinit buscará un archivo en el directorio de inicio del usuario llamado .xserverrc para ejecutarse como un script de shell para iniciar el servidor. Si no existe dicho archivo, xinit usará lo siguiente como predeterminado:

X  :0
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente