Cómo engañar a un programa para que piense que no hay ningún servidor X ejecutándose

28

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?

Luka Aleksić
fuente

Respuestas:

40

Por lo general solo

unset DISPLAY

en la línea de comando de la terminal. Algunas aplicaciones son más inteligentes que eso, y en realidad verifican los permisos y el tipo de consola versus pseudoterminal.

Thomas Dickey
fuente
77
Desafortunadamente, algunos software realmente obstinados asumirán DISPLAY=:0si 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.
Kevin
2
@Kevin tal vez DISPLAY=invalid:0?
sourcejedi
2
@PeterCordes o puede ejecutar el comando a través de en envlugar de una subshell:env -u DISPLAY emacs foo.c
pabouk
2
@PeterCordes emacstiene un indicador de línea de comando para deshabilitar el uso de X. Simplemente escriba emacs -nw. Pero si no fuera así, podría usarlo DISPLAY= emacs, que también funciona.
kasperd el
2
DISPLAY=0.0.0.0:0falla instantáneamente sin hacer una búsqueda en el servidor de nombres.
pts
31

Si desea deshabilitar X para un solo comando, puede escribir

DISPLAY= ./my_command

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:

$ A=a B=b C= D=d sh
$ echo $A $B $C $D

Esto imprimirá

a b d

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 entre by den la salida, como si la línea de comando fuera echo a b d(con dos espacios).

tobi_s
fuente