В общем, пытаюсь средствами X11 снять скриншоты отдельных окон. Все окна отображаются нормально, кроме окон Unity (DE).
К примеру вместо верхней панели скриншотится следующее:

(т.е. фоновое изображение - обои на раб. столе)
#include <gtk/gtk.h>
#define WNCK_I_KNOW_THIS_IS_UNSTABLE 1
#include <libwnck/libwnck.h>
#include <gdk/gdkx.h>
int main (int argc, char **argv)
{
gtk_init ( &argc, &argv );
WnckScreen *wnck_screen;
wnck_screen = wnck_screen_get_default();
wnck_screen_force_update( wnck_screen );
GList* wnck_windows;
GList* win_iter;
wnck_windows = wnck_screen_get_windows( wnck_screen );
for (win_iter = g_list_first(wnck_windows);win_iter;win_iter = g_list_next(win_iter)) {
gulong Xid = wnck_window_get_xid( win_iter->data );
printf( "%s\n", wnck_window_get_name(win_iter->data) );
printf( "xid=%ld\n", Xid );
GdkWindow *window = gdk_x11_window_foreign_new_for_display( gdk_display_get_default(), Xid );
GdkPixbuf *screenshot = gdk_pixbuf_get_from_window( window, 0, 0, gdk_window_get_width(window), gdk_window_get_height(window) );
gdk_pixbuf_save( screenshot, g_strdup_printf("win-%ld.png", Xid), "png", NULL, NULL );
}
return 0;
}
Хотя здесь я привожу код на gtk (используется gdk обертка для иксов), но и на чистых иксах результат тот же.
Причём, на общем скриншоте всё отображается нормально.
У меня есть предположение, что дело в том что unity завязана на compiz`е.
Может кто знает как это исправить и снять скриншот unity не вырезая его из общего скриншота?