Linux强制应用程序在特定显示器上全屏显示

时间:2013-03-15 15:13:11

标签: c++ linux fullscreen multiple-monitors

对于工作,我正在开发一个非常专业的软件,需要运行两个全屏应用程序,每个监视器一个。为了简单起见,我目前正在使用带有AMD Radeon HD显卡的LUbuntu 64位(无法回想起确切的版本,但这是相当新的)。

如果可能的话,我想坚持使用SDL2,但如果我需要对它进行一些黑客攻击或者移动到不同的库,我对此非常满意。

所以,我的问题是,是否可以在Linux中的不同显示器上运行两个全屏应用程序(如果是这样,我需要采取哪种设置步骤)?我最好的选择是枚举显示器以获得它们的左上角x / y位置,以便我可以告诉SDL将我的窗口移动到该显示器上以全屏显示它?

注意:我没有将此发布到askubuntu,因为我不确定这个问题是否严格围绕Ubuntu平台。

更新

以下是xrandr -q的输出:

Screen 0: minimum 320 x 200, current 3200 x 1080, maximum 3200 x 3200
DFP1 disconnected (normal left inverted right x axis y axis)
DFP2 disconnected (normal left inverted right x axis y axis)
DFP3 disconnected (normal left inverted right x axis y axis)
DFP4 disconnected (normal left inverted right x axis y axis)
DFP5 disconnected (normal left inverted right x axis y axis)
DFP6 disconnected (normal left inverted right x axis y axis)
DFP7 disconnected (normal left inverted right x axis y axis)
DFP8 disconnected (normal left inverted right x axis y axis)
DFP9 connected 1920x1080+1280+0 (normal left inverted right x axis y axis) 533mm x 312mm
   1280x1024      50.0 +   75.0     60.0     30.0     24.0  
   1920x1080      60.0 +   50.0*    59.9     30.0     25.0     30.0     24.0     30.0     30.0     24.0  
   1776x1000      50.0     59.9     25.0     24.0     30.0     30.0  
   1680x1050      50.0     60.0     30.0     24.0  
   1400x1050      50.0     60.0     30.0     24.0  
   1600x900       50.0     60.0     30.0     24.0  
   1440x900       50.0     59.9     30.0     24.0  
   1280x960       50.0     60.0     30.0     24.0  
   1280x800       50.0     59.8     30.0     24.0  
   1152x864       50.0     59.9     75.0     30.0     24.0  
   1280x768       50.0     59.8     30.0     24.0  
   1280x720       60.0     50.0     59.9     30.0     24.0  
   1024x768       50.0     75.0     70.1     30.0     24.0     60.0  
   1152x648       50.0     59.9  
   800x600        50.0     30.0     24.0     72.2     75.0     60.3     56.2  
   720x576        59.9     30.0     24.0     50.0  
   720x480        50.0     30.0     24.0     60.0     59.9  
   640x480        50.0     30.0     24.0     75.0     72.8     67.0     60.0     59.9  
DFP10 connected 1280x1024+0+0 (normal left inverted right x axis y axis) 376mm x 301mm
   1280x1024      60.0*+   76.0     75.0     72.0  
   1280x960       76.0     75.0     72.0     60.0  
   1152x864       75.0     60.0  
   1280x768       76.0     75.0     72.0     60.0  
   1280x720       76.0     75.0     72.0     60.0  
   1024x768       75.0     70.1     60.0  
   800x600        72.2     75.0     60.3  
   640x480        75.0     72.8     67.0     59.9  
   640x350        60.0     70.1  
CRT1 disconnected (normal left inverted right x axis y axis)

我已经尝试搜索一些论坛,以便更好地解释如何处理这些信息,似乎我应该这样做:

xrandr --output DFP9 --auto --output DFP10 --auto

当我这样做时,我仍然只有一个显示器(“:0”)。

2 个答案:

答案 0 :(得分:1)

你的设置是什么?你真的有2个单独的X显示器,或者你是否正在使用Xinerama来组合这两个?

如果你使用2个显示器,它们应该有自己的-display或DISPLAY env变量。您可以使用它来执行新的应用程序。

$ echo $DISPLAY
:0.0
$ xterm -display :0.0

在另一个显示中打开一个shell以获取另一个显示env变量。

还有-geometry,格式为[Wth,Ht + X + Y]

$ xterm -geometry 132x80+500+0

启用Xinerama时,您的其他显示通常为+ X + Y偏移。

当然,这确实需要应用程序处理命令行参数。然后在初始化窗口时将它们传递给X.对于xterm,宽度和高度是文本字符的单位,其中X / Y是屏幕像素。

答案 1 :(得分:0)

如果您可以控制X配置,并且生产工作站上不显示其他应用程序,您可能需要禁用“Xinerama”功能并设置两个屏幕。然后,您可以将应用连接到:0.0:0.1,并从每个应用中获取屏幕大小。