xinit (Español)

From ArchWiki

Esta traducción de Xinit fue revisada el 2022-09-28. Si existen cambios puede actualizarla o avisar al equipo de traducción.

De Wikipedia:

El programa xinit permite a un usuario iniciar manualmente un servidor de pantalla Xorg. El script startx(1) es un front-end para xinit(1).

xinit se utiliza normalmente para iniciar gestores de ventanas o entornos de escritorio. Aunque también puede utilizar xinit para ejecutar aplicaciones gráficas sin un gestor de ventanas, muchas aplicaciones gráficas esperan un gestor de ventanas compatible con Wikipedia:Extended Window Manager Hints. Los gestores de pantalla inician Xorg y, generalmente, xprofile.

Instalación

Instale el paquete xorg-xinit.

Configuración

xinit y startx toman un argumento opcional de la aplicación cliente, véase #Sobrescribir xinitrc. Si no proporciona uno, buscarán ~/.xinitrc para ejecutarse como un script del intérprete de línea de órdenes para iniciar las aplicaciones cliente.

xinitrc

.xinitrc es útil para ejecutar programas que dependen de X y establecer variables de entorno en el inicio del servidor X. Si está presente en el directorio personal del usuario, startx y xinit lo ejecutan. De lo contrario, startx ejecutará el /etc/X11/xinit/xinitrc predeterminado.

Nota: Xinit tiene su propio comportamiento predeterminado en lugar de ejecutar el archivo. Véase xinit(1) para más detalles.

Este xinitrc predeterminado iniciará un entorno básico con Twm, xorg-xclock y Xterm (asumiendo que los paquetes necesarios estén instalados). Por lo tanto, para iniciar un gestor de ventanas o un entorno de escritorio diferente, primero cree una copia del xinitrc predeterminado en su directorio personal:

$ cp /etc/X11/xinit/xinitrc ~/.xinitrc

Luego edite el archivo y reemplace los programas predeterminados con las órdenes deseadas. Recuerde que las líneas que siguen a una orden utilizando exec serían ignoradas. Por ejemplo, para iniciar xscreensaver en segundo plano y luego iniciar openbox, utilice lo siguiente:

~/.xinitrc
...
xscreensaver &
exec openbox-session
Nota: Por lo menos, asegúrese de que el último bloque if en /etc/X11/xinit/xinitrc esté presente en su archivo ~/.xinitrc para asegurarse de que los scripts en /etc/X11/xinit/xinitrc.d son ejecutados.

Los programas de ejecución prolongada que se inician antes que el gestor de ventanas, como un salvapantallas y una aplicación de fondo de pantalla, deben bifurcarse (fork) o ejecutarse en segundo plano añadiendo un signo &. De lo contrario, el script se detendría y esperaría a que cada programa terminase antes de ejecutar el gestor de ventanas o el entorno de escritorio. Tenga en cuenta que algunos programas no deben ser bifurcados, para evitar errores de secuencia (race bugs), como es el caso de xrdb. Antes de pasar exec se reemplazará el proceso del script con el proceso del gestor de ventanas, de modo que X no salga incluso si este proceso se bifurca en segundo plano.

xserverrc

El archivo xserverrc es un script del intérprete de línea de órdenes responsable de iniciar el servidor X. Tanto startx como xinit ejecutan ~/.xserverrc si existe, de lo contrario startx utilizará /etc/X11/xinit/xserverrc.

Para mantener un sesión autenticada con logind y para evitar eludir el bloqueo de pantalla al cambiar de terminal, Xorg debe iniciarse en el mismo terminal virtual donde se produjo el inicio de sesión [1]. Por lo tanto, se recomienda especificar vt$XDG_VTNR en el archivo ~/.xserverrc:

~/.xserverrc
#!/bin/sh

exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR

Véase Xserver(1) para obtener un listado de todas las opciones de la línea de órdenes.

Sugerencia: -nolisten local puede añadirse después de -nolisten tcp para deshabilitar la abstracción de sockets de X11 para ayudar con el aislamiento. Hay un breve resumen sobre cómo puede afectar esto a la seguridad de X11.

Alternativamente, si desea que X se muestre en una consola separada de la que se invoca al servidor, puede hacerlo utilizando el wrapper del servidor X proporcionado por /usr/lib/systemd/systemd-multi-seat-x. Para mayor comodidad, xinit y startx pueden configurarse para utilizar este contenedor modificando su ~/.xserverrc.

Nota: Para volver a habilitar la redirección de la salida de la sesión X en el archivo de registro de Xorg, añada la opción -keeptty. Véase Xorg#Session log redirection para más detalles.

Utilización

Para ejecutar Xorg como un usuario normal, introduzca:

$ startx

O si está configurado #xserverrc:

$ xinit -- :1
Nota: xinit no soporta múltiples pantallas cuando ya se ha iniciado otro servidor X. Para ello debe especificar la pantalla añadiendo -- :número_de_pantalla, donde número_de_pantalla es 1 o más.

Su gestor de ventanas (o entorno de escritorio) elegido debería comenzar ahora correctamente.

Para salir de X, ejecute la función de salida de su gestor de ventanas (asumiendo que tiene una). Si carece de dicha funcionalidad, ejecute:

$ pkill -15 Xorg
Nota: pkill eliminará todas las instancias de X en ejecución. Para terminar específicamente el gestor de ventanas en el terminal virtual actual, ejecute:
$ pkill -15 -t tty"$XDG_VTNR" Xorg

Véase también signal(7).

Consejos y trucos

Sobrescribir xinitrc

Si tiene un ~/.xinitrc en funcionamiento pero solo desea probar otro gestor de ventanas o entorno de escritorio, puede ejecutarlo introduciendo startx seguido de la ruta al gestor de ventanas:

$ startx /usr/bin/i3

Si el binario tiene argumentos, deben citarse para ser reconocidos como parte del primer parámetro de startx:

$ startx "/usr/bin/gestor-de-ventanas --key value"

Tenga en cuenta que se requiere la ruta completa. También puede especificar opciones personalizadas para el script #xserverrc añadiéndolas después del signo de guión doble --:

$ startx /usr/bin/enlightenment -- -br +bs -dpi 96

Véase también startx(1).

Nota: Dado que los scripts en /etc/X11/xinit/xinitrc.d/ se omiten, es posible que sea necesario configurar la variable de entorno DISPLAY. Puede probar i3 en la pantalla deseada ejecutando DISPLAY=:número_pantalla startx /usr/bin/i3.
Sugerencia: Esto se puede utilizar para iniciar programas gráficos normales pero sin ninguna de las funciones del gestor de ventanas básico. Véase también #Iniciar aplicaciones sin un gestor de ventanas y Ejecutando programa en una pantalla X separada

Inicio automático de X al inicio de sesión

Asegúrese de que startx esté configurado correctamente.

Coloque lo siguiente en su archivo de inicialización del login shell (por ejemplo ~/.bash_profile para Bash o ~/.zprofile para Zsh):

if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
  exec startx
fi

Puede reemplazar la comparación -eq con una como -le 3 (para vt1 a vt3) si desea usar inicios de sesión gráficos en más de un terminal virtual.

Las condiciones alternativas para detectar el terminal virtual incluyen "$(tty)" = "/dev/tty1", que no permite la comparación con -le, y "$(fgconsole 2>/dev/null || echo -1)" -eq 1, que no funciona en consolas en serie.

La orden exec garantiza que el usuario finalice la sesión cuando el servidor X se cierre, se bloquee o lo mate un atacante. Si desea correr el riesgo y permanecer conectado cuando finalice la sesión X, elimine exec.

Véase también Fish#Start X at login e inicio de sesión automático en Xorg sin gestor de pantallas.

Sugerencia: Este método se puede combinar con el inicio de sesión automático a la consola virtual.

Cambio entre entornos de escritorio/gestores de ventanas

Si está cambiando con frecuencia entre diferentes entornos de escritorio o gestores de ventanas, es conveniente utilizar un gestor de pantalla o expandir ~/.xinitrc para hacer posible el cambio.

El siguiente ejemplo muestra como iniciar un entorno de escritorio o gestor de ventanas en particular con un argumento:

~/.xinitrc
...

# Aquí Xfce se mantiene por defecto
session=${1:-xfce}

case $session in
    i3|i3wm           ) exec i3;;
    kde               ) exec startplasma-x11;;
    xfce|xfce4        ) exec startxfce4;;
    # No hay sesión conocida, intento ejecutarlo como orden
    *                 ) exec $1;;
esac

Para pasar el argumento session:

$ xinit session

o

$ startx ~/.xinitrc session

Iniciar aplicaciones sin un gestor de ventanas

Es posible iniciar solo aplicaciones específicas sin un gestor de ventanas, aunque lo más probable es que esto solo sea útil con una sola aplicación que se muestre en modo de pantalla completa. Por ejemplo:

~/.xinitrc
...

exec chromium

Alternativamente, se puede llamar al binario directamente desde el símbolo del sistema como se describe en #Sobrescribir xinitrc.

Con este método, debe establecer la geometría de cada ventana de la aplicación a través de sus propios archivos de configuración, si es posible.

Sugerencia: Esto puede ser útil para lanzar juegos gráficos, donde excluir la sobrecarga de un compositor puede ayudar a mejorar el rendimiento del juego.

Véase también Display manager#Starting applications without a window manager.

Redirección de salida utilizando startx.

Véase Xorg#Session log redirection para más detalles.