Ubuntu (xfce) предоставляет виртуальные рабочие столы или рабочие пространства. Я хотел бы получить скриншот приложения, которое размещено на другом виртуальном рабочем столе. Я успешно создаю xcb-соединение и могу найти окно приложения по его названию. Проблема в том, что xcb_get_image_reply
не удается. Я делаю что-то вроде этого:
auto cookie = xcb_get_image(m_XCBConnection, XCB_IMAGE_FORMAT_Z_PIXMAP, m_XCBWindow, x, y, width, height, ~0);
xcb_generic_error_t * err = nullptr;
auto image = xcb_get_image_reply(m_XCBConnection, cookie, &err);
// xcb_connection_has_error( m_XCBConnection ) returns no error
if ( err ) {
// here I have err->error_code == 8
free( err );
}
Если я правильно понимаю Кодировки ошибок XCB и Объяснение общих ошибок XCB Я получаю ошибку, описанную как:
Совпадение Окно InputOnly используется в качестве ЧЕРТЕЖА. В графическом запросе аргумент GCONTEXT не имеет того же корня и глубины, что и целевой аргумент DRAWABLE. У некоторого аргумента (или пары аргументов) правильный тип и диапазон, но он не может соответствовать другим способом, требуемым запросом.
Но я понятия не имею, что мне с этим делать.
Примечание: вышеуказанное решение отлично работает, если оба приложения находятся на одном виртуальном рабочем столе.