如果您在每台显示器上运行单独的显示器(现在不太可能),DISPLAY 环境变量就是您想要的。
但是,如果您使用 Xinerama(将一个逻辑显示分布在多台显示器上),则:
- 旁白:X11 词汇:“显示器”是一个或多个带有输入设备的“屏幕”;例如键盘和鼠标,又名“座位”。 “屏幕”是部分或全部显示在一个或多个“监视器”上的逻辑画布;当为一个“屏幕”使用多个监视器时,窗口可以部分显示在每个监视器上,但共享相同的 X11
DISPLAY 标识符;这被称为Xinerama。 DISPLAY 格式是 host : display-number . screen-id,例如在我的 Xinerama 设置中,两个显示器都是屏幕0 的一部分,显示编号从0 开始计数,每个登录用户都在同一主机上。 “席位”是使用不同硬件的监视器+输入的逻辑组;使用“虚拟控制台”切换可以发生多个“显示”,这就是 Gnome 和 KDE 允许多个用户在单个“座位”机器上登录的方式。
大多数 GUI 工具包允许您使用 --geometry 或 -geometry 开关指定窗口的几何形状。
“逻辑显示器”的分辨率是显示器排列的每个方向上的分辨率之和。例如,我现在连接了 2 × 1920×1080 显示器。 xrandr 报道:
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
要在右侧监视器上显示一个窗口,我可以给出一个几何字符串,其 x 坐标在 1920…3839(含)之间。
通常的格式是:widthxheight±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
不幸的是,我所知道的从 shell 确定每个监视器上显示区域的唯一编程方法是解析来自 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
(您通常希望避免在 shell 中将 Perl 单行拆分为两行,但 '\...' 的技巧是让它在 SO 上清晰可见。)