我有一个很难找到答案的问题(我总是得到显示器操作的答案)。我正在编写一个bash shell脚本来帮助我进行代码开发,并且我有两个监视器。
当我运行已编译的可执行文件时,我想告诉它在特定的监视器上运行(即与打开终端的监视器不同,因此我可以在一个屏幕上查看调试,而在另一个屏幕上查看应用程序)。
我将如何去做呢?就像是:
./myProject > but run on monitor 2
其中
myProject
是我的二进制可执行文件。谢谢大家
最佳答案
如果您在每个监视器上运行单独的显示(最近不太可能),则需要DISPLAY
环境变量。
但是,如果您使用Xinerama(在多个监视器上分布一个逻辑显示),请执行以下操作:
DISPLAY
标识符;这就是所谓的Xinerama。 DISPLAY
格式为主机:
显示编号.
屏幕ID,因此例如在我的Xinerama设置中,两个显示器都是屏幕0
的一部分,该显示器上的显示编号从0
递增,并且每个登录用户在同一主机上。 “座位”是使用不同硬件的监视器+输入的逻辑组;使用“虚拟控制台”切换可以出现多个“显示”,这就是Gnome和KDE允许多个用户在一台“座席”计算机上登录的方式。 大多数GUI工具箱都允许您使用
--geometry
或-geometry
开关指定窗口的几何形状。-geometry
形式。 GTK +/Gnome使用GNU风格的--geometry
。 argv
传递给QtApplication
或类似的代码。 “逻辑显示”将具有一个分辨率,该分辨率是显示器排列各个方向上的分辨率之和。例如,我现在有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-但是width和height是可选的,如果您希望采用默认值。 ±
是+
,相对于顶部/左侧计数,或者-
,相对于底部/右侧计数。因此,例如:
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上清晰易懂。)关于linux - 您如何在bash中运行应用程序并选择在哪个监视器上运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18360569/