获取Xlib中所有屏幕的数量

时间:2015-12-25 17:56:00

标签: linux x11 xlib

我已经搜索了很长时间,而且我无法找到有关如何为连接到计算机的每个屏幕获取screen_number的任何信息。 Here我找到了一个宏列表,其中一些(例如ScreenOfDisplay(display,screen_number))使用了参数screen_number。然而,没有这样的宏可以给我一个这些数字的列表(每个连接屏幕一个)。我知道如何获取默认屏幕的数量(DefaultScreen())和所有屏幕的数量(ScreenCount()),但其他屏幕怎么样?我注意到默认屏幕的screen_number是0,虽然我只有一个屏幕连接到我的电脑,所以我无法测试当有更多屏幕时会发生什么。我认为screen_number可以用一个非常简单的方式分配,第一个屏幕是screen_number = 0,第二个是screen_number = 1,第三个是screen_number = 2,依此类推但是我说...我不能测试天气这是真的,即使我有多个屏幕,我怎么能确定它适用于所有计算机。如果你们中的任何人有更多的X11经验并且知道它的工作原理的详细信息,请告诉我是否我是对的。

2 个答案:

答案 0 :(得分:3)

ScreenCount(dpy)宏和int XScreenCount(Display*)功能都返回连接到显示器的屏幕数。有效屏幕编号为0到ScreenCount(dpy)-1Xlib.h中的宏确认:

#define ScreenCount(dpy)    (((_XPrivDisplay)dpy)->nscreens)
#define ScreenOfDisplay(dpy, scr)  (&((_XPrivDisplay)dpy)->screens[scr])

答案 1 :(得分:1)

您的来源(2.2.1. Display Macros)提供了足够的信息。通常,默认屏幕编号为0,例如,当连接到本地主机时,您可以使用:0.0文档中指示的0

那是“正常”。如果你运行VNC,通常 在不同的显示器上运行(显示的简单连接字符串中的第一个XOpenDisplay)。

但是(阅读文档),当应用程序调用{​​{1}}时,会询问给定的屏幕号(X服务器可能/可能不会遵守):

  

<强> screen_number   
  指定要在该服务器上使用的屏幕。多个屏幕可以由单个X服务器控制。 screen_number设置一个内部变量,如果您使用的是C语言以外的语言,请使用XOpenDisplay宏或DefaultScreen()函数访问该内部变量(请参阅XDefaultScreen())。