Як обманути програму на думку, що не працює X-сервер


28

У мене є ця програма, яка може працювати як з текстовим інтерфейсом користувача, так і з графічним інтерфейсом користувача.

Не вистачає жодного перемикача командного рядка, щоб примусити те чи інше, швидше я думаю, він якось автоматично визначає, ми знаходимося в X чи ні (наприклад, якщо я запускаю його з віртуального терміналу, він переходить у його текстовий режим, і якщо я запускаю його з емулятор терміналу X, він відкриває окреме графічне вікно).

Я хотів би перевести його в текстовий режим і запустити його всередині X-терміналу. Як би я пішов робити це?

Відповіді:


40

Зазвичай просто

unset DISPLAY

в командному рядку терміналу. Деякі програми розумніші за це, і насправді перевіряють дозволи та тип консолі порівняно з псевдотерміналом.


7
На жаль, деякі дійсно вперті програмні засоби припускатимуть, DISPLAY=:0якщо його не встановлено. Я вважаю, що ви можете це виправити, запустивши його під іншим користувачем та використовуючи iptables для скидання петлі X11, але це досить грубо.
Кевін

2
@Kevin можливо DISPLAY=invalid:0?
sourcejedi

2
@PeterCordes або ви можете виконати команду envзамість env -u DISPLAY emacs foo.c
нижньої частини

2
@PeterCordes emacsмає прапор командного рядка, щоб відключити використання X. Просто введіть emacs -nw. Але якщо цього не сталося, ви могли замість цього використовувати DISPLAY= emacs, що також працює.
kasperd

2
DISPLAY=0.0.0.0:0не вдається негайно, не роблячи пошуку сервера імен.
пт

31

Якщо ви хочете відключити X для однієї команди, ви можете написати

DISPLAY= ./my_command

Зверніть увагу на стратегічне порожнє місце після =. Більш загально, ви можете встановити змінні середовища для процесу, префіксуючи свою команду послідовністю, <variable>=<value>розділеною пробілами. Оскільки простір служить роздільником, =одразу після цього пробіл очищає попередню змінну. Ми можемо подивитися на ефект цих префіксів, використовуючи підкабель в якості команди, а потім друкуючи його середовище. Візьмемо для прикладу:

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

Це надрукується

a b d

Це показує, що навколишнє середовище нижньої оболонки дійсно відрізняється за призначенням. Зауважте, що підміна оболонки відбувається перед передачею окремих аргументів echo, тому між bі dу виході є лише один пробіл , як би командний рядок був echo a b d(з двома пробілами).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.