Como enganar um programa para pensar que não há nenhum servidor X em execução

28

Eu tenho este programa que pode ser executado com uma interface de usuário de texto e uma interface gráfica com o usuário.

Ele não tem nenhum comando de linha de comando para forçar um ou outro, mas acho que de alguma forma detecta automaticamente se estamos no X ou não (por exemplo, se eu o executar de um terminal virtual ele entra em seu modo de texto, e se eu executá-lo a partir de um emulador de terminal X, ele abre uma janela gráfica separada).

Eu gostaria de forçá-lo ao modo de texto e executá-lo dentro do terminal X. Como eu faria isso?

    
por Luka Aleksić 21.10.2018 / 19:49

2 respostas

40

Normalmente apenas

unset DISPLAY

na linha de comando do terminal. Alguns aplicativos são mais inteligentes do que isso e, na verdade, verificam as permissões e o tipo do console em relação ao pseudoterminal.

    
por 21.10.2018 / 19:55
31

Se você quiser desabilitar o X para um único comando, você pode escrever

DISPLAY= ./my_command

Observe o espaço em branco estratégico após = . Mais geralmente, você pode definir variáveis de ambiente para um processo prefixando seu comando com uma sequência de <variable>=<value> separada por espaços. Como o espaço serve como separador, = imediatamente seguido por um espaço limpa a variável anterior. Podemos observar o efeito desses prefixos usando um subshell como comando e, em seguida, imprimindo seu ambiente. Tomemos por exemplo:

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

Isso imprimirá

a b d

Isso mostra que o ambiente da subcamada é realmente diferente como pretendido. Observe que a substituição de shell acontece antes que os argumentos individuais sejam passados para echo , portanto, há apenas um espaço entre b e d na saída, como se a linha de comando fosse echo a b d (com dois espaços).

    
por 22.10.2018 / 03:00

Tags