How to get each monitor's geometry with xlib when there is more than one screen ?

Hacksign evilsign at gmail.com
Tue Sep 29 01:56:33 PDT 2015


My monitor configuration is listed at the end of this email post.
My problem:
     can not get each monitor's width & height widh xlib.
here is my code:
----------------------------------------------------------
hacksign at XSign [16:51:41] : ~/Code/XSTest
 >> make
gcc XScreenWidth.c -lX11 -o test
hacksign at XSign [16:51:41] : ~/Code/XSTest
 >> ./test
Screen Width:4480    Screen Height:1440
Screen count:1
hacksign at XSign [16:51:43] : ~/Code/XSTest
 >> cat XScreenWidth.c
#include <X11/Xlib.h>
#include <stdio.h>

int main(int argc, char** argv){
     const char* dp_name = ":0.0";
     Display* dp = XOpenDisplay(dp_name);
     int screen_num = DefaultScreen(dp);
     Screen* pScreen = ScreenOfDisplay(dp, screen_num);
     printf("Screen Width:%d\tScreen Height:%d\n", pScreen->width, 
pScreen->height);
     int screen_count = ScreenCount(dp);
     printf("Screen count:%d\n", screen_count);
     XCloseDisplay(dp);
     return 0;
}
----------------------------------------------------------
and the xrandr output:
----------------------------------------------------------
hacksign at XSign [16:51:47] : ~/Code/XSTest
 >> xrandr
Screen 0: minimum 8 x 8, current 4480 x 1440, maximum 32767 x 32767
eDP1 connected primary 2560x1440+0+0 (normal left inverted right x axis 
y axis) 310mm x 174mm
    2560x1440     60.00*+
    1920x1440     60.00
    1856x1392     60.01
    .........
DP1 disconnected (normal left inverted right x axis y axis)
DP2 disconnected (normal left inverted right x axis y axis)
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 connected 1920x1080+2560+0 (normal left inverted right x axis y 
axis) 531mm x 299mm
    1920x1080     60.00*+  59.94
    1280x1024     75.02    60.02
    ...........
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
----------------------------------------------------------
I just got the monitor0's width + monitor1's width.
How can I get something like this :
monitor[0].width = 2560
  monitor[1].width = 1920 ?
-----------------------------------------------------------
X11 monitor configuration:
-----------------------------------------------------------
Section "Module"
     Load  "glx"
EndSection

Section "Monitor"
     Identifier "Monitor0"
     DisplaySize 541 304
     Option        "DPMS"
     Option      "Primary" "true"
EndSection

Section "Monitor"
     Identifier "Monitor1"
     DisplaySize 508 285
     Option         "DPMS"
     Option         "RightOf" "Monitor0"
     Option      "Primary" "false"
EndSection

Section "Device"
     Identifier     "Card0"
     Driver      "intel"
     BusID         "PCI:0:2:0"
     Option         "ZaphodHeads" "eDP1,DP1,DP2,HDMI1,HDMI2"
     #Option         "AccelMethod" "uxa"
     Option         "AccelMethod" "sna"
     Option "monitor-eDP1" "Monitor0"
     Option "monitor-HDMI2" "Monitor1"
EndSection

Section "Screen"
     Identifier "Screen0"
     Device     "Card0"
     Monitor         "Monitor0"
     SubSection "Display"
         Depth 24
         Modes "2560x1440" "1920x1080" "1024x768" "800x600"
     EndSubsection
EndSection

Section "ServerLayout"
     Identifier         "default"
     Screen             0 "Screen0" 0 0
EndSection


More information about the xorg mailing list