Nó có vẻ như là một vấn đề đơn giản, nhưng tôi không thể tìm thấy câu trả lời: Làm thế nào để bạn truy vấn (thông qua X11) những gì màn hình tồn tại và độ phân giải của họ?Cách truy vấn độ phân giải màn hình X11?
Trả lời
Kiểm tra display macros và screen macros từ Xlib manual.
Cụ thể:
- Từ first link:
ScreenCount()
,ScreenOfDisplay()
- Từ second link:
WidthOfScreen()
,HeightOfScreen()
Nếu Xinerama đang được sử dụng, hãy thử XineramaQueryScreens
. Nếu không, bạn có thể giả định một màn hình duy nhất và sử dụng (X)WidthOfScreen
/(X)HeightOfScreen.
(Cũng xem câu trả lời khác. Đó là điều khiển từ xa có thể ai đó đang sử dụng mô hình X màn hình cũ, nơi màn hình của bạn là :x.0
, :x.1
, vv)
Đối với các máy chủ X hiện đại, cũng có phần mở rộng XRandR, cung cấp mô hình cập nhật thông tin bố cục đa màn hình mới nhất, bao gồm cả màn hình chồng chéo và thay đổi màn hình động.
Tài liệu về nó có sẵn trong XRandR 1.3.1 Protocol spec và libXrandr man page.
Điều này có thể hữu ích cho cli và kịch bản
xwininfo -root
Nhưng xrandr có thể chính xác hơn, đặc biệt là khi có nhiều môi trường màn hình:
xrandr
Nó dường như 'xrandr' so với 'xwininfo -root' không làm cho bạn biết về màn hình hiện đang hoạt động. Tuy nhiên nó cho bạn biết về màn hình bằng proxy của cửa sổ gốc đang hoạt động. – CMCDragonkai
sạch xrandr
đầu ra để sử dụng ImageMagick
xrandr |grep \* |awk '{print $1}'
Nó không liên quan đến X11? –
Thư viện X11 chỉ hoạt động với unix giống như hệ điều hành, do đó, nó không phải là một giải pháp đa nền tảng.
Một mã đầy đủ
#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;
}
Một biên soạn
gcc -o setup setup.c -std=c11 `pkg-config --cflags --libs x11`
Một kết quả (thực tế cho máy tính của tôi)
Total count screens: 1
Screen 1: 1366X768
Dựa trên:
Cảm ơn bạn đã cung cấp mã. Bạn có biết câu trả lời cho câu hỏi của tôi không: http://stackoverflow.com/questions/42987932/is-a-monitor-in-gtk3-the-same-as-a-screen-in-x11. Tôi hỏi nếu các màn hình bạn đang tìm thấy trong mã này là giống như những gì Gtk3 3.22 gọi màn hình. –
+1 cho Xinerama – asveikau