Если ваш оконный менеджер совместим с 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