Eu tenho este programa que pode ser executado com uma interface de usuário de texto e uma interface gráfica de usuário.
Ele não possui nenhuma opção de linha de comando para forçar um ou outro, acho que, de alguma forma, detecta automaticamente se estamos no X ou não (por exemplo, se eu executá-lo em um terminal virtual, ele entra no modo de texto e, se o executar no um emulador de terminal X, abre uma janela gráfica separada).
Eu gostaria de forçá-lo ao modo de texto e fazê-lo rodar dentro do terminal X. Como eu faria isso?
DISPLAY=:0
se não estiver definido. Eu acredito que você pode corrigir isso executando-o sob um usuário diferente e usando o iptables para soltar o loopback X11, mas isso é bastante nojento.DISPLAY=invalid:0
?env
em vez de um subnível:env -u DISPLAY emacs foo.c
emacs
tem um sinalizador de linha de comando para desativar o uso do X. Basta digitaremacs -nw
. Mas, se não, você poderia usar oDISPLAY= emacs
que também funciona.DISPLAY=0.0.0.0:0
falha instantaneamente sem fazer uma pesquisa no servidor de nomes.Se você deseja desativar o X para um único comando, você pode escrever
Observe o espaço em branco estratégico depois
=
. De maneira mais geral, você pode definir variáveis de ambiente para um processo prefixando seu comando com uma sequência de<variable>=<value>
espaços separados 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 imprimindo seu ambiente. Tomemos, por exemplo:Isso imprimirá
Isso mostra que o ambiente do subshell é realmente diferente do pretendido. Observe que a substituição do shell ocorre antes da passagem dos argumentos individuais
echo
; portanto, existe apenas um espaço entreb
ed
na saída, como se a linha de comando estivesseecho a b d
(com dois espaços).fonte