Linux 如何查询X11显示分辨率?
这似乎是一个简单的问题,但我找不到答案:如何查询(通过X11)存在哪些监视器及其分辨率?请从中查看 具体而言:Linux 如何查询X11显示分辨率?,linux,x11,Linux,X11,这似乎是一个简单的问题,但我找不到答案:如何查询(通过X11)存在哪些监视器及其分辨率?请从中查看 具体而言: 从:ScreenCount(),ScreenOfDisplay() 从:WidthOfScreen(),HeightOfScreen() 如果Xinerama正在使用,请尝试。否则,您可以使用单个屏幕并使用(X)屏幕宽度/(X)屏幕高度。 (另请参阅另一个答案。可能有人正在使用旧的X屏幕型号,您的屏幕是:X.0,:X.1,等等)。对于现代X服务器,还有XRandR扩展,它提供了最新的
- 从:
,ScreenCount()
ScreenOfDisplay()
- 从:
,WidthOfScreen()
HeightOfScreen()
(X)屏幕宽度
/(X)屏幕高度。
(另请参阅另一个答案。可能有人正在使用旧的X屏幕型号,您的屏幕是
:X.0
,:X.1
,等等)。对于现代X服务器,还有XRandR扩展,它提供了最新的多屏幕布局信息,包括重叠屏幕和动态屏幕更改
它的文档可在和中找到。这可能对cli和脚本编写有帮助
xwininfo -root
但xRandR可能更准确,尤其是在有多个监视器环境的情况下:
xrandr
清洁xrandr
输出以供imagemagick使用
结果如下:
1920x1080
库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;
}
结果(实际适用于我的计算机)
基于:
Python
gcc -o setup setup.c -std=c11 `pkg-config --cflags --libs x11`
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))
Bash
$ xrandr --listmonitors
$ xrandr
$ xrandr | grep '*' | awk {'print $1'}
与
xwininfo-root
相比,xrandr
似乎没有告诉您当前处于活动状态的监视器。但是,它告诉您有关活动根窗口的代理监视器。它与X11无关?感谢您提供代码。你知道我的问题的答案吗。我想问一下,您在这段代码中找到的屏幕是否与Gtk3 3.22所称的监视器相同。您对Cygwin/Xming/etc有何看法/经验。?X11可能不是可移植的,但如果经过移植/改编,它就和可移植的一样好,不是吗?不是我的专业领域——我习惯于使用SDL2之类的库来掩盖这些东西。
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'}