[英]How do you run an application in bash and select which monitor it runs on?
我有一个难以搜索答案的问题(我总是得到监视器操作的答案)。 我正在编写一个bash shell脚本来帮助我编写代码,我有两个监视器。
当我运行我已编译的可执行文件时,我想告诉它在特定的监视器上运行(即与我的终端打开的监视器不同,因此我可以在一个屏幕上查看调试并将应用程序放在另一个屏幕上)。
我该怎么做呢? 就像是:
./myProject > but run on monitor 2
myProject
是我的二进制可执行文件。
谢谢大家。
如果在每个监视器上运行单独的显示(这些天不太可能),则DISPLAY
环境变量就是您想要的。
但是,如果您使用Xinerama(在多个监视器之间传播一个逻辑显示),
DISPLAY
标识符; 这叫做Xinerama。 DISPLAY
格式为host :
display-number .
screen-id ,所以例如在我的Xinerama设置中,两个监视器都是屏幕0
一部分,显示数字从0
计数,每个登录用户在同一主机上。 “Seats”是使用不同硬件的监视器+输入的逻辑组; 使用“虚拟控制台”切换可以发生多个“显示”,这就是Gnome和KDE允许多个用户在单个“座位”机器上登录的方式。 大多数GUI工具包允许您使用--geometry
或-geometry
开关指定窗口的几何体。
Qt使用较旧的MIT样式的-geometry
形式。 GTK + / Gnome使用GNU风格的 - --geometry
。
这假设您允许Qt对命令行进行后处理,例如将argv
传递给QtApplication
或类似命令行。
“逻辑显示”将具有分辨率,该分辨率是显示器布置的每个方向上的分辨率的总和。 例如,我现在连接了2×1920×1080显示器。 xrandr
报道:
Screen 0: minimum 320 x 200, current 3840 x 1080, maximum 8192 x 8192
要在右侧监视器上显示窗口,我可以给出一个几何字符串,其x
坐标在1920 ... 3839(含)之间。
通常的格式是: 宽度 x
高度 ±
x偏移量 ±
y偏移量 - 但如果您更喜欢采用默认值,则宽度和高度是可选的。 ±
是相对于上/左计数+
,或-
相对于下/右计数。
所以,例如:
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
(你通常希望避免在外壳中的两条线上分割Perl单行,但是'\\
... '
技巧是让它在SO上清晰可见。)
上面给出的 - --geometry
答案在很多情况下都不会起作用......
有很多几乎完全相同的问题,如各种StackExchange站点和AskUbuntu,我最终找到的答案(在基于Ubuntu 14.04的Linux Mint发行版上)是使用wmctrl
。 我正在留下答案,因为没有其他人在这个帖子中提到它。
(还有一个名为Devil's Pie
,另一个名为Compiz
如果你搜索那些,你会发现我正在谈论的Q&A)
wmctrl
是一种简单的unix工具,如果你正在编写Bash脚本,你可能正在寻找它。 我也看到有人建议使用xdotool
,具体取决于具体目标。
wmctrl
通过窗口标题或pid
提供窗口匹配(与所有类型的X管理窗口不兼容)
一些有用的资源:
wmctrl
手册页 wmctrl
和xdotool
都wmctrl
xdotool
工作。 ” 根据我每天工作的地方,我在左侧或右侧连接第二台显示器,我认为我的解决方案将涉及
xrandr
找到尺寸(如BRPocock的回答所示), 留下我的笔记和[最终] 这里生成的一些代码,以防它对其他人有用。
使用fifo
在显示器上打开一个终端窗口,希望输出显示和执行
mkfifo /tmp/myfifo
cat /tmp/myfifo
然后在源终端上做
./myProject >/tmp/myfifo
这假设它是一个控制台应用程序。 如果它是图形化的,那么您将需要另一种方法,这取决于您正在使用的窗口管理器+工具包。
您需要做的就是在运行应用程序之前设置DISPLAY
环境变量。
要找出需要将其设置为的内容,请在要显示的监视器上运行以下命令:
echo $DISPLAY
您应该看到,例如:0.1
或:0.0
。
然后,您可以指定您希望您的应用在该显示器上运行,如下所示:
DISPLAY=:0.1 ./my_app
由于您的应用程序使用QT,您可能正在使用KDE。 在System Settings > Window Behavior > Advanced
,将Placement
设置为Under Mouse
。 单击所需的监视器,ALT + Tab切换到您的终端,然后启动该程序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.