Wayland 上的屏幕截图显示为黑色

2024-02-23

我找到了这个code http://ted.mielczarek.org/code/screenshot/在 Ted Mielczarek 网站上截取屏幕截图。

/*
 * gdk-screenshot.cpp: Save a screenshot of the root window in .png format.
 *  If a filename is specified as the first argument on the commandline,
 *  then the image will be saved to that filename. Otherwise, the image will
 *  be saved as "screenshot.png" in the current working directory.
 *
 * Compile with:
 * g++ -o gdk-screenshot gdk-screenshot.cpp `pkg-config --cflags --libs gdk-x11-2.0`
 */

#include <gdk/gdk.h>
#include <gdk/gdkx.h>

int main(int argc, char** argv)
{
  gdk_init(&argc, &argv);
  GdkWindow* window = window = gdk_get_default_root_window ();
  GdkPixbuf* screenshot = gdk_pixbuf_get_from_drawable (NULL, window, NULL,
                            0, 0, 0, 0,
                            gdk_screen_width(),
                            gdk_screen_height());
  GError* error = NULL;
  const char* filename = (argc > 1) ? argv[1] : "screenshot.png";
  return TRUE == gdk_pixbuf_save (screenshot, filename, "png",
                  &error, NULL);
}

I compiled it as described and it appears to work, in that it produces an image with the correct dimensions, but the screenshot is entirely black. black screenshot

这似乎是一个common https://bugzilla.redhat.com/show_bug.cgi?id=1398556 issue https://bugs.freedesktop.org/show_bug.cgi?id=98672在运行 Wayland 的系统上(我正在使用 Wayland 运行 Archlinux),所以我的问题是:

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


我有类似的问题。

我使用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 https://developer.gnome.org/references

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wayland 上的屏幕截图显示为黑色 的相关文章

随机推荐

  • 使用带有用户名和密码的 http 进行 Git 克隆

    我尝试使用 git 克隆http 用户 电子邮件受保护 http user password host com但我在添加用户或密码时遇到一些问题 因为用户使用的电子邮件包含其他 而密码使用感叹号 该命令看起来像http 电子邮件受保护 电子
  • PharData extractTo方法在linux环境下提取.tar.gz失败

    我想将 tar gz 文件提取到特定文件夹中 我使用 cURL 从 MailChimp 批量操作下载 tar gz 文件 我使用下面的代码来提取 tar 文件 phar new PharData upload test tar gz pha
  • 如果调用者返回太早,则异步 AWS Lambda 不会执行

    我正在尝试调用异步 lambda 函数within另一个 lambda 函数 我发现如果调用函数退出得太快 它就不会被执行 换句话说 以下内容永远不会起作用 LambdaFunction2 永远不会被调用 function lambdaFu
  • 在 OpenCV 中更新 Mat 的子矩阵

    我正在使用 OpenCV 和 C 我有一个像这样的矩阵 X Mat X Mat zeros 13 6 CV 32FC1 我只想更新它的一个 4x3 子矩阵 但我对如何有效地访问该矩阵存有疑问 Mat mat43 Mat eye 4 3 CV
  • 恢复备份mysql

    我在 mysql 中有一个 250MB 的数据库备份 如何将其恢复到另一台服务器上的新数据库中 或者只是使用php我的管理员为了恢复海豚
  • 分组数据框中日期范围重叠

    我如何知道两行的日期范围是否重叠 输入数据框 A B Start End Timestamp A1 B1 2022 01 15 2022 02 15 2021 05 17 A1 B1 2021 07 15 2021 10 17 2021 0
  • 在 Excel 中设置文本字符串列表的格式

    我正在尝试将 Excel 中出现的单词列表的字体变成红色 到目前为止 我能够找到一个单词 但我需要搜索整个数组 我是 VBA 新手 正在苦苦挣扎 到目前为止 我已经找到了一个解决方案 但它涉及查找单个字符串 F1 Sub test4Stri
  • 获取隐藏元素的偏移量

    如何获取隐藏元素的坐标 offset 不支持使用隐藏元素 有什么提示吗 如果你的元素有 hide 调用它 或者如果它有display none在CSS中 浏览器根本不费心去渲染它 在这种情况下 答案不是直接的 在最近的jQueries中 你
  • 在 Parse.com Cloud 代码 beforeSave 函数中访问原始字段

    最终目标是使用以下方法检测现有 Parse 对象和传入更新之间的更改beforeSave云代码中的函数 从 parse com 提供的 Cloud Code 日志中 我们可以看到以下内容的输入 beforeSave包含一个名为origina
  • cudart_static - 什么时候有必要?

    由于较新的驱动程序附带 CUDA 运行时 我可以在驱动程序下载页面中选择 9 1 或 9 2 我的问题是 我的库 内部使用 CUDA 内核 是否应该附带 lcudart static 我在使用 9 1 CUDA 驱动程序的系统上启动使用 9
  • 如何更改 catalina.out 的路径?

    我无法找到移动的设置catalina out记录到 var log jira 我成功设置了以下文件的路径access log log catalina log host manager log localhost log and manag
  • Python中是否可以动态生成命令Click

    我正在尝试生成click来自配置文件的命令 本质上 这个模式 import click click group def main pass commands foo bar baz for c in commands def f print
  • 使用正确的权限在 ASP.NET/C# 中启动服务

    在我的网站 用 ASP NET C 编写 上 我希望管理员能够启动某个服务 我为此的代码是 ServiceController svcController new ServiceController InvidualFileConversi
  • 什么时候可以不正常化? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何更改 c3 饼图中图例的文本

    如何更改饼图图例的文本 我在我的 php 页面中使用 c3 图表 我已经阅读了 c3 图表的文档 但没有运气 目前我正在使用这段代码 它显示图例true但我无法更改我尝试过的文本 var chart c3 generate bindto c
  • 了解域对象+数据映射器模式?

    我过去一直使用各种 ORM 并将所有逻辑放在模型中 无论其性质如何 SQL MongoDB 查询 甚至获取远程 JSON 对象 但是 当需要确保松散耦合以实现高水平的可测试性时 这种方法的问题很快就会出现 今天我读到了有关将模型分为两部分的
  • 为什么 css .hover div 会“闪烁”?

    我的网站上有一些 选项卡 包含文本 当鼠标悬停时 选项卡会展开并显示更多文本 出于我们的意图和目的 选项卡是某种菜单 但问题是 当鼠标悬停在上面时 选项卡会正确展开 因为悬停应该使它这样做 但然后很快 闪 回其原始大小 然后立即恢复到其悬停
  • TortoiseGit 到 Gitlab 存储库 HTTP 基本访问被拒绝

    自从 TortoiseGit 从 2 6 0 0 更新到 2 7 0 0 后 我无法再通过使用 TortoiseGit 访问我的 GitLab 我设法在 2 6 上获取 拉取和推送 但截至今天 在 2 7 上这不起作用 我有两台设置完全相同
  • 在 C# 事件处理程序中,为什么“sender”参数必须是对象?

    根据Microsoft 事件命名指南 https msdn microsoft com en us library h0eyck3s 28VS 71 29 aspx the senderC 事件处理程序中的参数 是always类型对象 即使
  • Wayland 上的屏幕截图显示为黑色

    我找到了这个code http ted mielczarek org code screenshot 在 Ted Mielczarek 网站上截取屏幕截图 gdk screenshot cpp Save a screenshot of th