获取 Xlib 中所有屏幕的编号

Get numbers of all screens in 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.2.1. Display Macros) provides enough information. Normally the default screen-number is 0, e.g., when connecting to the local host you could use :0.0 as indicated in the documentation for XOpenDisplay

即"normally"。如果您 运行 VNC,通常 that 运行s 在不同的 display(第一个 0显示的简单连接字符串)。

但是(阅读文档),当应用程序调用 XOpenDisplay 时, 要求提供给定的屏幕编号(X 服务器 may/may不荣誉):

screen_number
Specifies the screen to be used on that server. Multiple screens can be controlled by a single X server. The screen_number sets an internal variable that can be accessed by using the DefaultScreen() macro or the XDefaultScreen() function if you are using languages other than C (see "Display Macros").

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

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