У меня есть эта программа, которая может работать как с текстовым пользовательским интерфейсом, так и с графическим пользовательским интерфейсом.
В нем отсутствует какой-либо переключатель командной строки для принудительного ввода одного или другого, скорее, я думаю, он каким-то образом автоматически определяет, находимся ли мы в X или нет (например, если я запускаю его с виртуального терминала, он переходит в текстовый режим, и если я запускаю его из эмулятор терминала X открывает отдельное графическое окно).
Я бы хотел перевести его в текстовый режим и запустить в X-терминале. Как мне это сделать?
DISPLAY=:0
что они не установлены. Я полагаю, что вы можете это исправить, запустив его под другим пользователем и используя iptables для удаления loopback X11, но это довольно грубо.DISPLAY=invalid:0
?env
вместо подоболочки:env -u DISPLAY emacs foo.c
emacs
имеет флаг командной строки, чтобы отключить использование X. Просто введитеemacs -nw
. Но если это не так, вы можете вместо этого использоватьDISPLAY= emacs
, что также работает.DISPLAY=0.0.0.0:0
мгновенно завершает работу без поиска сервера имен.Если вы хотите отключить X для одной команды, вы можете написать
Обратите внимание на стратегический пробел после
=
. В более общем смысле вы можете установить переменные среды для процесса, поставив перед командой префикс последовательности,<variable>=<value>
разделенной пробелами. Поскольку пробел служит разделителем,=
сразу после пробела очищается предыдущая переменная. Мы можем посмотреть на эффект этих префиксов, используя в качестве команды subshell и затем печатая его окружение. Взять например:Это напечатает
Это показывает, что среда подоболочки действительно отличается от запланированной. Обратите внимание, что подстановка оболочки происходит перед передачей отдельных аргументов
echo
, поэтому между выходными даннымиb
иd
в выходных данных есть только один пробел , как если бы командная строка былаecho a b d
(с двумя пробелами).источник