这似乎是一个简单的问题,但我找不到答案:您如何查询(通过X11)监控存在哪些及其解决方案?
答案 0 :(得分:13)
从display macros查看screen macros和Xlib manual。
具体做法是:
ScreenCount()
,ScreenOfDisplay()
WidthOfScreen()
,HeightOfScreen()
答案 1 :(得分:11)
这可能对cli和脚本编写有帮助
xwininfo -root
但是,当存在多个监视器环境时,xRandR可能更准确:
xrandr
答案 2 :(得分:5)
对于现代X服务器,还有XRandR扩展,它提供了最新的多屏幕布局信息模型,包括重叠屏幕和动态屏幕更改。
提供了相关文档答案 3 :(得分:4)
如果正在使用Xinerama,请尝试XineramaQueryScreens
。否则,您可以采用单个屏幕并使用(X)WidthOfScreen
/ (X)HeightOfScreen.
(另请参阅另一个答案。有人可能会使用旧的X屏幕模型,屏幕为:x.0
,:x.1
等。
答案 4 :(得分:2)
库X11只能使用类似unix的操作系统,因此它不是跨平台的解决方案。
完整代码
#include <stdio.h>
#include <X11/Xlib.h>
int
main(const int argc, const char *argv[])
{
Display *display;
Screen *screen;
// open a display
display = XOpenDisplay(NULL);
// return the number of available screens
int count_screens = ScreenCount(display);
printf("Total count screens: %d\n", count_screens);
for (int i = 0; i < count_screens; ++i) {
screen = ScreenOfDisplay(display, i);
printf("\tScreen %d: %dX%d\n", i + 1, screen->width, screen->height);
}
// close the display
XCloseDisplay(display);
return 0;
}
汇编
gcc -o setup setup.c -std=c11 `pkg-config --cflags --libs x11`
结果(我的电脑实际存在)
Total count screens: 1
Screen 1: 1366X768
基于:
答案 5 :(得分:1)
xrandr
输出
xrandr |grep \* |awk '{print $1}'
答案 6 :(得分:1)
Python
import os
from Xlib import X, display
d = display.Display()
s = d.screen().root
output = os.popen("xrandr --listmonitors | grep '*' | awk {'print $4'}").read().splitlines()
num_sc = s.xinerama_get_screen_count().screen_count
width = s.get_geometry().width
height = s.get_geometry().height
print("Total count screens: %s" % num_sc)
for i in range(num_sc):
print("\tScreen %s(%s): %sX%s" % (i, output[i], width, height))
重击
$ xrandr --listmonitors
$ xrandr
$ xrandr | grep '*' | awk {'print $1'}