Obtaining List of all Xorg Displays

后端 未结 2 1476
耶瑟儿~
耶瑟儿~ 2020-12-30 06:00

I would like to know how I can obtain a list of all Xorg displays on my system, along with a list of screens associated with each display. I spent some time looking through

2条回答
  •  南方客
    南方客 (楼主)
    2020-12-30 06:42

    The only way I know of to get a list of displays is to check the /tmp/.X11-unix directory.

    Once you do that, you can use Xlib to query each display for more information.

    Per example:

    #include 
    #include 
    #include 
    #include 
    
    int main(void) {
        DIR* d = opendir("/tmp/.X11-unix");
    
        if (d != NULL) {
            struct dirent *dr;
            while ((dr = readdir(d)) != NULL) {
                if (dr->d_name[0] != 'X')
                    continue;
    
                char display_name[64] = ":";
                strcat(display_name, dr->d_name + 1);
    
                Display *disp = XOpenDisplay(display_name);
                if (disp != NULL) {
                    int count = XScreenCount(disp);
                    printf("Display %s has %d screens\n",
                        display_name, count);
    
                    int i;
                    for (i=0; i

    Running the above gives me this output with my current displays/screens:

    Display :0 has 1 screens
     0: 3046x1050
    Display :1 has 2 screens
     0: 1366x768
     1: 1680x1050
    

    Never found a better way of listing X displays other than that. I'd very much like to know if any better alternative exists.

提交回复
热议问题