startx
es 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 tty
para 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 -novtswitch
pero 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 usaropenvt
ejecutar un comando en una nueva terminal virtual ychvt
para volver a cambiar.
Cree un script ~/.xinitrc.chvt
que 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.chvt
a diferencia de, sh -c …
es necesario porque startx
confunde los argumentos que contienen comodines y es necesario pasar la ruta absoluta debido a otra peculiaridad de startx. Alternativamente, llame xinit
directamente y configúrelo XAUTHORITY
usted 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/console
y 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 fgconsole
como root ejecutando visudo
y 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 fgconsole
programa.
¹ 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.