我有可以与文本用户界面和图形用户界面一起运行的程序。
它没有任何命令行开关来强制一个或另一个,而是我猜测它会以某种方式自动检测我们是否在X中(例如,如果我从虚拟终端运行它,则进入文本模式,如果我从X终端运行它, X终端仿真器,它将打开一个单独的图形窗口)。
我想将其强制为文本模式,并使其在X终端中运行。我将如何去做?
我有可以与文本用户界面和图形用户界面一起运行的程序。
它没有任何命令行开关来强制一个或另一个,而是我猜测它会以某种方式自动检测我们是否在X中(例如,如果我从虚拟终端运行它,则进入文本模式,如果我从X终端运行它, X终端仿真器,它将打开一个单独的图形窗口)。
我想将其强制为文本模式,并使其在X终端中运行。我将如何去做?
Answers:
通常只是
unset DISPLAY
在终端的命令行中。某些应用程序比这更聪明,并且可以实际检查控制台的权限和类型,而不是伪终端。
DISPLAY=invalid:0
吗?
env
而不是子env -u DISPLAY emacs foo.c
emacs
确实具有禁用X的命令行标志。只需键入emacs -nw
。但是,如果没有,您可以改用DISPLAY= emacs
,它也可以正常工作。
DISPLAY=0.0.0.0:0
不执行名称服务器查找而立即失败。
如果要为单个命令禁用X,则可以编写
DISPLAY= ./my_command
注意=
。之后的战略空白。更一般而言,您可以通过在命令前添加一系列<variable>=<value>
以空格分隔的前缀来设置进程的环境变量。由于空格用作分隔符,因此=
紧随其后的空格将清除前面的变量。我们可以通过使用subshell作为命令,然后打印其环境来查看这些前缀的效果。举个例子:
$ A=a B=b C= D=d sh
$ echo $A $B $C $D
这将打印
a b d
这表明子外壳的环境确实与预期的不同。请注意,shell替换是在将各个参数传递给之前发生的echo
,因此输出之间b
和之间只有一个空格d
,就像命令行中echo a b d
有两个空格一样。
DISPLAY=:0
它尚未设置。我相信您可以通过在其他用户下运行它并使用iptables丢弃回送X11来解决此问题,但这非常麻烦。