截图在Wayland上显示为黑色

时间:2017-01-10 02:51:50

标签: c++ wayland

我发现这个code可以在Ted Mielczarek的网站上截取屏幕截图。

ListView lv = (ListView) findViewById(R.id.my_list);
registerForContextMenu(lv);

我按照描述进行了编译,看起来很有效,因为它生成的图像尺寸正确,但屏幕截图完全是黑色的。  black screenshot

这在运行Wayland的系统上似乎是common issue(我正在使用Wayland运行Archlinux),所以我的问题是:

需要对此代码进行哪些修改才能在Wayland(和X)上生成适当的屏幕截图?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题。

我用Xlib截屏,但是这个方法在Wayland上不起作用。每次跑到xgetimage都报错。查了资料,发现Wayland不允许这样的截图。但是,通过这种方式,我仍然可以获得正确的屏幕尺寸。

现在我使用DBUS调用系统的会话总线来截图,这是我在阅读Gnome截图源码中学到的。

这是一个简单的总结代码:

    method_name = "Screenshot";
    method_params = g_variant_new ("(bbs)",
                                     TRUE,
                                     FALSE, /* flash */
                                     filename);

    connection = g_application_get_dbus_connection (g_application_get_default ());
    g_dbus_connection_call_sync (connection,
                               "org.gnome.Shell.Screenshot",
                               "/org/gnome/Shell/Screenshot",
                               "org.gnome.Shell.Screenshot",
                               method_name,
                               method_params,
                               NULL,
                               G_DBUS_CALL_FLAGS_NONE,
                               -1,
                               NULL,
                               &error);

文档链接在这里: https://developer.gnome.org/references

Gnome 的 GitHub 截图在这里: https://github.com/GNOME/gnome-screenshot