我有一个很难找到答案的问题(我总是得到显示器操作的答案)。我正在编写一个bash shell脚本来帮助我进行代码开发,并且我有两个监视器。

当我运行已编译的可执行文件时,我想告诉它在特定的监视器上运行(即与打开终端的监视器不同,因此我可以在一个屏幕上查看调试,而在另一个屏幕上查看应用程序)。

我将如何去做呢?就像是:

./myProject > but run on monitor 2

其中myProject是我的二进制可执行文件。

谢谢大家

最佳答案

如果您在每个监视器上运行单独的显示(最近不太可能),则需要DISPLAY环境变量。

但是,如果您使用Xinerama(在多个监视器上分布一个逻辑显示),请执行以下操作:

  • 旁:X11词汇:一个“显示器”是带有输入设备的一个或多个“屏幕”。例如键盘和鼠标,又称“座位”。 “屏幕”是逻辑 Canvas ,部分或全部显示在一个或多个“监视器”上;当将多个监视器用于一个“屏幕”时,窗口可以部分显示在每个监视器上,但是共享相同的X11 DISPLAY标识符;这就是所谓的Xinerama。 DISPLAY格式为主机:显示编号.屏幕ID,因此例如在我的Xinerama设置中,两个显示器都是屏幕0的一部分,该显示器上的显示编号从0递增,并且每个登录用户在同一主机上。 “座位”是使用不同硬件的监视器+输入的逻辑组;使用“虚拟控制台”切换可以出现多个“显示”,这就是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(含)之间。

    常用格式为: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/

    10-16 18:23