シェルスクリプトは初めてです。 $DISPLAY
環境変数の意味がわかりません。
Ubuntu 13.10を使用しており、/bin/bash
Shellを使用しています。 2台のモニターがあります。
質問:
コマンドecho $DISPLAY
は、私のマシン(両方のモニター)で:0.0
を出力します。これは何を意味するのでしょうか?
どの場合に$DISPLAY
変数は空白またはNULLになりますか?
これに関する記事やチュートリアルはありますか?
Xウィンドウシステムの魔法のWordは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:D.Sと同等です。Hostはローカルホスト名です。
:0.0は、ローカルホストの最初のディスプレイに接続されている最初の画面について話していることを意味します
続きを読む here および here および here .
X(7) manページから:
ユーザーの観点から、すべてのXサーバーには次の形式の表示名があります。
ホスト名:displaynumber.screennumber
アプリケーションは、この情報を使用して、サーバーへの接続方法と、デフォルトで使用する画面を決定します(複数のモニターを備えたディスプレイ):
ホスト名ホスト名は、ディスプレイが物理的に接続されているマシンの名前を指定します。ホスト名が指定されていない場合、同じマシン上のサーバーと通信する最も効率的な方法が使用されます。 displaynumber「ディスプレイ」という語句は、通常、共通のキーボードとポインター(マウス、タブレットなど)を共有するモニターのコレクションを指すために使用されます。ほとんどのワークステーションには、キーボードが1つしかないため、ディスプレイが1つしかありません。ただし、大規模なマルチユーザーシステムには、複数のディスプレイがあり、複数の人が同時にグラフィックス作業を行うことができます。混乱を避けるために、マシンの各ディスプレイには、そのディスプレイのXサーバーが起動したときにディスプレイ番号(0から始まる)が割り当てられます。表示番号は常に表示名で指定する必要があります。 screennumber一部のディスプレイは、複数のモニター間で単一のキーボードとポインターを共有します。各モニターには独自のウィンドウセットがあるため、そのディスプレイのXサーバーが起動すると、各スクリーンにスクリーン番号(0から始まる)が割り当てられます。画面番号が指定されていない場合、画面0が使用されます。
既存の回答では、より広範な状況に対処できません。
グラフィカル環境を使用していない場合(つまり、Windowsなどを使用せずにシステムコンソールにログインしている場合、またはPuTTYを実行しているWindowsコンピューターなどからSSHなどでテキスト専用端末からリモートでログインしている場合) GUIは含まれず、DISPLAY
は通常設定されません。コンピューターと通信するための唯一の手段はコマンドラインです(ただし、方法がわかっていればGUIセッションにピボットする方法もあります)。
グラフィカルインターフェイス(Ubuntuでは、通常GDM greeterが使用されます)またはコンソール(eXceedまたはmobaXを実行しているWindowsコンピューター、またはVNCクライアントなどのリモートデスクトップソフトウェアなど)を使用してコンソールにログインしている場合DISPLAY
変数は、グラフィカルセッションを管理するプログラムによってセットアップされ、どのI/Oデバイスに接続するかをグラフィカルクライアントに示します。
従来、UbuntuコンピューターのGUIはX11の実装であるX.orgを実行していましたが、最近ではCanonicalによって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を何らかの目的でメモリ領域にマッピングするだけです。
https://help.ubuntu.com/community/EnvironmentVariables から:
可変ディスプレイ
値の例:
:0.0
localhost:10.0
terminal01:0.0
その目的は何ですか?
この変数は、実際のグラフィカルユーザーインターフェイスを表示する場所をグラフィカルアプリケーションに示すために使用されます。値は3つの部分で構成されます。ホスト名の後にコロン(:)、表示番号の後にドット(。)、画面が続きます数。
ホスト名部分を使用して、グラフィカル出力をネットワーク経由でリモートマシンに送信できます。出力がローカルマシンで実行されているXサーバー向けである場合は省略できます。ディスプレイ番号により、同じマシンで実行されている複数のXサーバーから選択できます(Ubuntuは複数のXサーバーを使用して、複数のグラフィカルデスクトップセッションを有効にします)。
画面番号は、同じXサーバーによって管理されている複数の物理画面から選択するために使用されますが、最近では「0」以外に設定されることはほとんどありません。 「DISPLAY」環境変数の値を手動で設定することは、必要に応じて「GDM」や「SSH」などの多くのアプリケーションによって自動的かつインテリジェントに調整できるため、今日ではほとんど必要ありません。