$ DISPLAY環境変数とは何ですか?


75

私はシェルスクリプトの初心者です。$DISPLAY環境変数が何なのかわかりません。

Ubuntu 13.10を使用しており、/bin/bashシェルを使用しています。2台のモニターがあります。

質問:

  1. コマンドecho $DISPLAY:0.0私のマシン(両方のモニター)で印刷されます。これは何を意味するのでしょうか?

  2. どの場合、$DISPLAY変数は空白またはNULLになりますか?

  3. これに関する記事やチュートリアルはありますか?


今日はecho $DISPLAY印刷され:0ませ:0.0
Chandrayya GK

これが空白またはエラーの場合に役立ちますチェック:askubuntu.com/questions/432610/...
Maythux

回答:


86

XウィンドウシステムのマジックワードはDISPLAYです。ディスプレイは次のもので構成されています(簡略化されています)。

  • キーボード、
  • ネズミ
  • と画面。

ディスプレイは、Xサーバーと呼ばれるサーバープログラムによって管理されます。サーバーは、接続する他のプログラムに表示機能を提供します。

リモートサーバーは、一般にローカルコンピューターにあるXディスプレイサーバーを指すDISPLAY環境変数の定義を介して、Xネットワークトラフィックをリダイレクトする必要がある場所を認識しています。

表示環境変数の値は次のとおりです。

hostname:D.S

どこ:

hostnameは、Xサーバーが実行されているコンピューターの名前です。省略されたホスト名はローカルホストを意味します。

Dはシーケンス番号(通常は0)です。1台のコンピューターに複数のディスプレイが接続されている場合、これはさまざまです。

Sは画面番号です。ディスプレイには、実際には複数の画面を含めることができます。通常、画面は1つだけですが、0がデフォルトです。

値の例

localhost:4
google.com:0
:0.0

hostname:D.Sホストホスト名のディスプレイDの画面Sを意味します。このディスプレイのXサーバーは、TCPポート6000 + Dでリッスンしています。

host/unix:D.SホストhostのディスプレイDの画面Sを意味します。このディスプレイのXサーバーは、UNIXドメインソケット/tmp/.X11-unix/XDでリッスンしています(ホストからのみ到達可能です)。

:D.S host / unix:DSと同等です。hostはローカルホスト名です。

:0.0は、ローカルホストの最初のディスプレイに接続されている最初の画面について話していることを意味します

詳細はこちらこちらこちらをご覧ください

X(7)のマニュアルページから:

ユーザーの観点から、すべてのXサーバーには次の形式の表示名があります。

ホスト名:displaynumber.screennumber

アプリケーションは、この情報を使用して、サーバーへの接続方法と、デフォルトで使用する画面を決定します(複数モニターのディスプレイ上)。

ホスト名ホスト名は、ディスプレイが物理的に接続されているマシンの名前を指定します。ホスト名が指定されていない場合、同じマシン上のサーバーと通信する最も効率的な方法が使用されます。displaynumber「ディスプレイ」というフレーズは、通常、共通のキーボードとポインター(マウス、タブレットなど)を共有するモニターのコレクションを指すために使用されます。ほとんどのワークステーションには、キーボードが1つしかないため、ディスプレイが1つしかありません。ただし、大規模なマルチユーザーシステムには、複数のディスプレイがあり、複数の人が同時にグラフィックス作業を行うことができます。混乱を避けるために、マシンの各ディスプレイには、そのディスプレイのXサーバーが起動したときにディスプレイ番号(0から始まる)が割り当てられます。表示番号は常に表示名で指定する必要があります。screennumber一部のディスプレイは、2つ以上のモニター間で単一のキーボードとポインターを共有します。各モニターには独自のウィンドウセットがあるため、そのディスプレイのXサーバーが起動されると、各スクリーンにスクリーン番号(0から始まる)が割り当てられます。画面番号が指定されていない場合、画面0が使用されます。


この$ DISPLAYがnullまたはBLANKになる場合。
Chandrayya GK 14年

通常、これはディスプレイに問題がない限り発生してはなりません。ほとんどの場合、ディスプレイマネージャを再起動すると問題が解決します。ただし、これはデフォルトのアクションではありません。
Maythux 14年


@ChandrayyaGKたとえば、GNOMEやKDEなどのデスクトップ環境を使用していないが、TTY(など/dev/tty1)で直接ログインすると、空白になります$DISPLAY
フランクリンゆう

@Maythux 0の場合、画面番号が省略されているように見えることがあります。私のGNOMEは:0を提供し$DISPLAYます。
フランクリンゆう

10

既存の回答では、より広範な状況に対処できません。

グラフィカル環境を使用していない場合(つまり、ウィンドウなどを使用せずにシステムコンソールにログインしている場合、またはPuTTYを実行しているWindowsコンピューターなどから、SSHなどを介してテキスト専用端末からリモートでログインしている場合) GUIは関与せず、DISPLAY通常は設定されません。コンピューターと通信するための唯一の手段はコマンドラインです(ただし、方法を知っていればGUIセッションにピボットする方法もあります)。

グラフィカルインターフェイス(Ubuntuでは、通常GDM greeterが使用されます)またはコンソール(eXceedまたはmobaXを実行しているWindowsコンピューター、またはVNCクライアントなどのリモートデスクトップソフトウェアなど)を使用してコンソールにログインしている場合DISPLAY変数は、グラフィカルセッションを管理するプログラムによって設定され、どのI / Oデバイスに接続するかをグラフィカルクライアントに示します。

従来、UbuntuコンピューターのGUIはX.org(X11実装)を実行していましたが、最近では、CanonicalによってMirと呼ばれる近代化された代替が導入されました。さらに最近では、Mirは放棄され、Waylandと呼ばれるほぼ同様の目標を持つ別のプロジェクトを支持すると考えています。これらの置き換えは、ここでは説明しませんが、完全なX11スタックの複雑さを軽減することを目的としています。これらは、ここで説明しているのと同じDISPLAY規則に従っています。

X11では、ホスト部分はDISPLAYリモートサーバーである可能性があり、Ubuntuコンピューターを「グラフィカルターミナル」として使用して、そのリモートサーバー上のファイルとプログラムにアクセスします(この場合、コンピューターはキーボードを提供する「サーバー」 、マウス、およびリモートで実行されている「クライアント」プログラムへの1つ以上のディスプレイデバイス...サーバー)。より一般的には、X11(またはMir、またはWayland)サーバーとクライアントプログラム(デスクトップマネージャー、Webブラウザー、メールクライアント、カレンダープログラムなどのさまざまなグラフィカルクライアント)はすべてコンピューターで実行されます。これは、DISPLAY値の「サーバー」部分によって示されます。後者の場合、通常は空です(デフォルト値を意味しますlocalhost)。

X11サーバーは、1つ以上のグラフィカルセッションを実行できます。たとえば、コンソールログインとリモートVNCセッションを同時に実行できます。この場合(同じX11サーバーインスタンスによって管理されている場合)、X11用語では複数の「ディスプレイ」があります。実際には、1つのセッション(1つのログインイベントとこれから生成されるデスクトップインスタンス)は、X11の1つのディスプレイです。

そのようなディスプレイの1つは、1つ以上の画面を持つことができます。従来、これは1つのモニターを意味していましたが、元のアーキテクチャにはウィンドウをある画面から別の画面に移動できないなどの不幸な特性がありました。XineramaやXrandrなどのアドオンは、1つの画面がさまざまな方法で複数のモニターを接続することが多い点まで状況をさらに混乱させました。

複数のモニターシステムを使用したことがある場合は、モニターをさまざまな方法で配置し、モニターにモニターの一部を表示し、他の部分をモニターに割り当てない長方形の領域を作成できることをおそらく発見しました。これはX11が作成する「スクリーン」であり、複数のディスプレイカードがある場合、これらのスクリーンを複数持つことができ、それぞれが1つ以上のモニターに割り当てられます(または理論的にはモニターなしで実行します。Xvfbはこれを利用してモニターなしでX11を実行します。GUIをどんな目的でもメモリ領域にマッピングするだけです。


実際、ミールはユニティと共に放棄されました。長い間、gdmではなくlightdmがデフォルトでしたが、Unityが上昇する前のように、答えのその部分が再び正しくなったのかもしれません。私はMATEを使用しているので、簡単に確認することはできません
...-Zanna

Linuxをコンソールから(Windowsなしで)実行していましたが、それがすべてを説明しています。実際に理にかなっている:p
ジャン=フランソワT.

3

https://help.ubuntu.com/community/EnvironmentVariablesから:

可変ディスプレイ

値の例:

:0.0
localhost:10.0
terminal01:0.0

それは何のためですか?

この変数は、実際のグラフィカルユーザーインターフェイスを表示する場所をグラフィカルアプリケーションに示すために使用されます。値は3つの部分で構成されます。ホスト名の後にコロン(:)、表示番号の後にドット(。)、画面が続きます数。

ホスト名の部分を使用して、グラフィカル出力をネットワーク経由でリモートマシンに送信できます。出力がローカルマシンで実行されているXサーバー向けである場合は省略できます。ディスプレイ番号により、同じマシンで実行されている複数のXサーバーから選択できます(Ubuntuは複数のXサーバーを使用して、複数のグラフィカルデスクトップセッションを有効にします)。

画面番号は、同じXサーバーによって管理されている複数の物理画面から選択するために使用されますが、最近では「0」以外に設定されることはほとんどありません。「DISPLAY」環境変数の値を手動で設定することは、必要に応じて「GDM」や「SSH」などの多くのアプリケーションによって自動的かつインテリジェントに調整できるため、今日ではほとんど必要ありません。


3

echo $ DISPLAYは、私のマシン(両方のモニター)で:0.0を出力します。これはどういう意味ですか?

:0.0はディスプレイ番号0とスクリーン番号0を意味します

どの場合、$ DISPLAYは空白またはNULLになりますか?

$ DISPLAYにエラーがあり、これが正常に発生しない場合

これに関する記事やチュートリアルはありますか?

いくつかのチュートリアルとリソースはここにあります:

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