关于archlinux kde wayland 截屏获取的图片是全黑的。

有大佬遇到过这种情况吗? 用Java和Golang都试过了。

❯ neofetch
                   -`                    [email protected]
                  .o+`                   ----------
                 `ooo/                   OS: Arch Linux x86_64
                `+oooo:                  Host: OMEN by HP Laptop 16-b1xxx
               `+oooooo:                 Kernel: 5.19.7-arch1-1
               -+oooooo+:                Uptime: 4 hours, 38 mins
             `/:-:++oooo+:               Packages: 805 (pacman)
            `/++++/+++++++:              Shell: zsh 5.9
           `/++++++++++++++:             Resolution: 1920x1080
          `/+++ooooooooooooo/`           DE: Plasma 5.25.5
         ./ooosssso++osssssso+`          WM: kwin
        .oossssso-````/ossssss+`         Theme: [Plasma], Breeze [GTK2/3]
       -osssssso.      :ssssssso.        Icons: [Plasma], breeze-dark [GTK2/3]
      :osssssss/        osssso+++.       Terminal: WezTerm
     /ossssssss/        +ssssooo/-       CPU: 12th Gen Intel i7-12700H (20) @ 4
   `/ossssso+/:-        -:/+osssso+-     GPU: NVIDIA GeForce RTX 3060 Mobile /
  `+sso+:-`                 `.-/+oso:    GPU: Intel Alder Lake-P
 `++:.                           `-/+/   Memory: 8800MiB / 15667MiB
 .`                                 `/

截不了图,只能复制出来。

java是javafx,golang是github.com/kbinani/screenshot

javafx 应该是运行在 x11 模式的gtk3 上

Wayland 从设计上就是不让一个程序“看”到屏幕的其它位置。老的软件直接调用 X 的截图走 XWayland 就只能拿到一个黑的图片。

Wayland 下的截屏需要通过桌面环境提供的 portal ,至少需要 xdg-desktop-portalxdg-desktop-portal-kde 两个包

要获取截屏需要用 dbus 来调用 org.freedesktop.portal.Screenshot ,调用以后会返回一个 handle

参数里面的 IN & OUT 就是输入 & 输出

中间 s, s{sv} 是 dbus 的类型 D-Bus Specification Type system

DFeet 里面可以看到这个 method

至于 dbus 怎么用,还有 portal 具体怎么调,现有的文档 gap 特别多,要完整实现不怎么容易。

flameshot 实现的关键代码在这里 https://github.com/flameshot-org/flameshot/blob/master/src/utils/screengrabber.cpp

github 搜一下 “org.freedesktop.portal.Screenshot” 应该有现成的实现。

1 个赞

感谢大佬!我用flameshot发现截不了图,然后准备自己写试试,发现也不行。

我也是这个现象。

GitHub - adangel/JavaScreenshot 找到了一个实现。

现阶段还是换 X 了,用了几天,太容易崩溃了,electron 开发的软件基本上一天要崩几次。

我试了一下,应该是 arch 里版本太新出 bug 了,那个 portal 在 KDE 下调用只会返回空的东西 :poop:

#day_of_life_as_arch_user_btw

我看到你了,哈哈。

你可以试试用wlroot里截图的Demo,或者直接用aur里的swayvkshot包。