各モニターで別々のディスプレイを実行する場合 (最近はあまりありません)、DISPLAY
環境変数が必要です。
ただし、Xinerama (1 つの論理ディスプレイを複数のモニターに分散) を使用する場合:
- 余談: X11 語彙: 「ディスプレイ」とは、入力デバイスを備えた 1 つ以上の「画面」です。たとえば、キーボードとマウス、別名「シート」。「画面」は、1 つ以上の「モニター」に部分的または完全に表示される論理キャンバスです。1 つの「画面」に複数のモニターを使用する場合、各モニターにウィンドウを部分的に表示できますが、同じ X11
DISPLAY
識別子を共有します。これはシネラマと呼ばれます。DISPLAY
形式はhost :
display-number .
screen-idであるため、たとえば、私の Xinerama セットアップでは、両方のモニターが、0
からカウントアップされるディスプレイ番号の画面の一部です。0
同じホストにログインしている各ユーザーと。「シート」は、異なるハードウェアを使用しているモニター + 入力の論理グループです。複数の「ディスプレイ」は、「仮想コンソール」切り替えを使用して発生する可能性があります。これは、Gnome と KDE が複数のユーザーが単一の「シート」マシンにサインインできるようにする方法です。
--geometry
ほとんどの GUI ツールキットでは、または-geometry
スイッチを使用してウィンドウのジオメトリを指定できます。
「論理ディスプレイ」には、モニターの配置の各方向の解像度の合計である解像度があります。たとえば、現在 2 × 1920×1080 ディスプレイを接続しています。xrandr
レポート:
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
右側のモニターにウィンドウを表示するには、x
座標が 1920 ~ 3839 (両端を含む) のジオメトリ文字列を指定します。
通常のフォーマットは次のとおりです: width x
height ±
x-offset ±
y-offset — ただし、デフォルトを使用したい場合は、幅と高さはオプションです。は±
、+
上/左-
に対して相対的にカウントするか、下/右に対して相対的にカウントします。
たとえば、次のようになります。
gedit --geometry 800x600+1920+0 # set size at top-left of right screen
gedit --geometry +1920+100 # default size at top-left of right screen
gedit --geometry -0+0 # default size at top-right of entire display
残念ながら、シェルから各モニターのディスプレイの領域を決定するために私が知っているプログラムによる唯一の方法は、からの出力を解析することxrandr
です。例えば
$ xrandr
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
LVDS1 connected (normal left inverted right x axis y axis)
1366x768 60.0 +
1024x768 60.0
800x600 60.3 56.2
640x480 59.9
VGA1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 510mm x 287mm
1920x1080 60.0*+
1680x1050 60.0
1280x1024 60.0
1440x900 59.9
1280x720 60.0
1024x768 60.0
800x600 60.3
640x480 60.0
720x400 70.1
HDMI1 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 510mm x 287mm
1920x1080 60.0*+
1680x1050 59.9
1280x1024 60.0
1440x900 59.9
1280x720 60.0
1024x768 60.0
800x600 60.3
640x480 60.0
720x400 70.1
DP1 disconnected (normal left inverted right x axis y axis)
$ xrandr | perl -ne 'if (/(\d+)x(\d+)\+(\d+)\+(\d+)/) '\
> ' { print "$3,$4 - ", $3 + $1 - 1, ",", $4 + $2 - 1, "\n" }'
0,0 - 1919,1079
1920,0 - 3839,1079
(通常、シェルで Perl のワンライナーを 2 行に分割することは避けたいと思うでしょうが、'\
そこにある …<code>' のトリックは、SO 上で読みやすくするためのものです。)