実行中のXサーバーがないと考えるようにプログラムをだます方法


28

テキストユーザーインターフェイスとグラフィカルユーザーインターフェイスの両方で実行できるこのプログラムがあります。

どちらか一方を強制するコマンドラインスイッチがありませんが、Xにあるかどうかを何らかの形で自動検出します(たとえば、仮想端末から実行する場合はテキストモードになり、実行する場合はXターミナルエミュレーターは、別のグラフィカルウィンドウを開きます)。

強制的にテキストモードにし、Xターミナル内で実行するようにします。それをどうやってやるの?

回答:


40

通常は

unset DISPLAY

ターミナルのコマンドラインで。一部のアプリケーションはそれよりも賢く、実際にコンソールと疑似端末の許可とタイプを確認します。


7
残念ながら、いくつかの本当に頑固なソフトウェアはDISPLAY=:0、それが設定されていないと仮定します。別のユーザーで実行し、iptablesを使用してループバックX11をドロップすることで修正できると思いますが、それはかなりひどいことです。
ケビン

2
多分@ケビンDISPLAY=invalid:0
sourcejedi

2
@PeterCordesか、を介してコマンドを実行することができますenv代わりにサブシェルの:env -u DISPLAY emacs foo.c
pabouk

2
@PeterCordesにemacsは、Xの使用を無効にするコマンドラインフラグがありますemacs -nw。しかし、そうでなければ、代わりにを使用することもできDISPLAY= emacsます。
カスペルド

2
DISPLAY=0.0.0.0:0ネームサーバールックアップを実行せずに即座に失敗します。
pts

31

単一のコマンドに対してXを無効にする場合は、次のように記述できます。

DISPLAY= ./my_command

の後の戦略的な空白に注意してください=。より一般的には、<variable>=<value>スペースで区切られたシーケンスをコマンドの前に付けることにより、プロセスの環境変数を設定できます。スペースはセパレータとして機能するため、=すぐにスペースが続くと、前の変数がクリアされます。サブシェルをコマンドとして使用し、その環境を出力することにより、これらのプレフィックスの効果を確認できます。例えば:

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

これは印刷されます

a b d

これは、サブシェルの環境が実際に意図したとおりに異なることを示しています。シェルの置換は個々の引数がに渡される前に発生するechoため、コマンドラインが(2つのスペースを含む)かのように、出力と出力の間bdはスペースが1つしかありませんecho a b d

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.