Как получить имя / номер виртуального рабочего стола в Linux? - PullRequest
0 голосов
/ 20 декабря 2011

Я разрабатываю приложение диспетчера значков для openbox, и мне нужно знать конкретный виртуальный рабочий стол, на котором создается значок, чтобы восстановить его при перезагрузке.

Существует ли какой-либо стандартный способ определения информации о текущем виртуальном рабочем столе?

1 Ответ

1 голос
/ 20 декабря 2011

Если ваш оконный менеджер совместим с EWMH, вы можете использовать свойства, перечисленные здесь:

http://standards.freedesktop.org/wm-spec/1.4/ar01s03.html

, в частности, _NET_NUMBER_OF_DESKTOPS и _NET_DESKTOP_NAMES.


Модифицированный код с этого сайта перечислит все доступные виртуальные рабочие столы.Он открывает канал к wmctrl -d, который возвращает список с текущим virt.desktop, обозначенным *:

#include <stdio.h>
#include <stdlib.h>

#ifdef WIN32
FILE *popen ( const char* command, const char* flags) {return _popen(command,flags);}
int pclose ( FILE* fd) { return _pclose(fd);}
#endif

int main(int argc, char* argv[])
{
    char psBuffer[4096];
    FILE *iopipe;

    if( (iopipe = popen( "wmctrl -d", "r" )) == NULL )
        exit( 1 );

    while( !feof( iopipe ) )
    {
        if( fgets( psBuffer, 4095, iopipe ) != NULL )
            printf( psBuffer );
    }

    printf( "\nProcess returned %d\n", pclose( iopipe ) );
    return 0;
}

Захваченный вывод будет выглядеть примерно так: (man wmctrl для объяснения)

0  * DG: 1680x1050  VP: 0,0  WA: 36,36 3564x1044  (Unnamed desktop)
1  - DG: 1680x1050  VP: 0,0  WA: 36,36 3564x1044  desktop 2
2  - DG: 1680x1050  VP: 0,0  WA: 36,36 3564x1044  desktop 3
3  - DG: 1680x1050  VP: 0,0  WA: 36,36 3564x1044  desktop 4
4  - DG: 1680x1050  VP: 0,0  WA: 36,36 3564x1044  desktop 5
5  - DG: 1680x1050  VP: 0,0  WA: 36,36 3564x1044  desktop 6
...