Ejecute startx en segundo plano sin cambiar a la nueva terminal virtual

Ejecute startx en segundo plano sin cambiar a la nueva terminal virtual

startxes capaz de crear un nuevo servidor X en una nueva terminal virtual. Sin embargo, incluso si lo ejecuto en segundo plano, es decir. sudo startx &, todavía cambia automáticamente al nuevo terminal virtual. ¿Es posible crear un nuevo terminal virtual permaneciendo en el antiguo?

Además, ¿cómo puedo saber el nombre del archivo del nuevo terminal? (Anteriormente, podía usar ttypara verificar en la nueva ventana, pero ¿cómo puedo lograr lo mismo en la anterior?)

Respuesta1

Suponiendo que esté utilizando X.org, esto no parece ser posible. El servidor X admite unaopciónllamado -novtswitchpero eso solo se aplica cuando el servidor X sale, no cuando se inicia. Dada la discusión enError #246267 de Fedora, parece que esta opción también se aplica al inicio, pero se eliminó porque causaba que el servidor X fallara en una gran cantidad de hardware: el servidor X necesita acceder al hardware de video cuando se inicia.

La mejor opción sería permitir un parpadeo breve a otro vt y volver a cambiar. En Linux, puedes usaropenvtejecutar un comando en una nueva terminal virtual ychvtpara volver a cambiar.

Cree un script ~/.xinitrc.chvtque contenga

#!/bin/sh
echo "New X session running on vt$X_FGCONSOLE" >"$ORIGINAL_TTY"
chvt "$ORIGINAL_FGCONSOLE"
exec ~/.xinitrc

y correr

ORIGINAL_FGCONSOLE=$(fgconsole) ORIGINAL_TTY=$(tty) openvt -s -- sh -c 'export X_FGCONSOLE=$(fgconsole); startx ~/.xinitrc.chvt -- vt$X_FGCONSOLE'

(El script separado, ~/.xinitrc.chvta diferencia de, sh -c …es necesario porque startxconfunde los argumentos que contienen comodines y es necesario pasar la ruta absoluta debido a otra peculiaridad de startx. Alternativamente, llame xinitdirectamente y configúrelo XAUTHORITYusted mismo).

Dependiendo de dónde esté ejecutando este script, es posible que no tenga permiso para ejecutarlo fgconsole(“No se pudo obtener un descriptor de archivo que haga referencia a la consola”), porque necesita poder abrirse /dev/consoley no puede hacerlo si algún otro usuario (root, en la práctica) es propietario. De lo contrario, no sé cómo saber cómo volver a la consola original. Una solución, si tiene acceso root, sería reemplazar ORIGINAL_FGCONSOLE=$(fgconsole) …por

ORIGINAL_FGCONSOLE=$(sudo fgconsole)

y déle a su cuenta el permiso para ejecutarse fgconsolecomo root ejecutando visudoy agregando la línea

zzy ALL = (root) NOPASSWD: /bin/fgconsole

después de cualquier otra línea que se aplique a su cuenta. Es seguro salvo que haya un error en el fgconsoleprograma.

¹ Si estás usando Linux, estás usando X.org, y si no estás usando Linux, todavía es un buen cambio que estés usando X.org.

información relacionada