Tengo este programa que puede ejecutarse tanto con una interfaz de usuario de texto como con una interfaz gráfica de usuario.
Carece de cualquier cambio de línea de comando para forzar uno u otro, más bien supongo que de alguna manera detecta automáticamente si estamos en X o no (por ejemplo, si lo ejecuto desde un terminal virtual, ingresa a su modo de texto, y si lo ejecuto desde un emulador de terminal X abre una ventana gráfica separada).
Me gustaría forzarlo al modo de texto y hacer que se ejecute dentro del terminal X. ¿Cómo voy a hacerlo?
DISPLAY=:0
si no está configurado. Creo que puede solucionarlo ejecutándolo bajo un usuario diferente y usando iptables para soltar el loopback X11, pero eso es bastante asqueroso.DISPLAY=invalid:0
?env
lugar de una subshell:env -u DISPLAY emacs foo.c
emacs
tiene un indicador de línea de comando para deshabilitar el uso de X. Simplemente escribaemacs -nw
. Pero si no fuera así, podría usarloDISPLAY= emacs
, que también funciona.DISPLAY=0.0.0.0:0
falla instantáneamente sin hacer una búsqueda en el servidor de nombres.Si desea deshabilitar X para un solo comando, puede escribir
Observe el espacio en blanco estratégico después
=
. De manera más general, puede establecer variables de entorno para un proceso al prefijar su comando con una secuencia de<variable>=<value>
espacios separados. Como el espacio sirve como separador,=
inmediatamente seguido de un espacio se borra la variable anterior. Podemos observar el efecto de estos prefijos utilizando una subshell como comando y luego imprimiendo su entorno. Toma por ejemplo:Esto imprimirá
Esto muestra que el entorno de la subshell de hecho es diferente según lo previsto. Tenga en cuenta que la sustitución de shell ocurre antes de que se pasen los argumentos individuales
echo
, por lo que solo hay un espacio entreb
yd
en la salida, como si la línea de comando fueraecho a b d
(con dos espacios).fuente