RFR: 8280982: [Wayland] [XWayland] java.awt.Robot taking screenshots [v4]
Alexander Zvegintsev
azvegint at openjdk.org
Mon May 22 18:17:27 UTC 2023
> Modern Linux systems often come with [Wayland](https://wayland.freedesktop.org/) by default.
> This comes with some difficulties, and one of them is the inability to get screenshots from the system.
> This is because we now use the [X Window System API](https://en.wikipedia.org/wiki/X_Window_System) to capture screenshots and it cannot access data outside the [XWayland server](https://wayland.freedesktop.org/xserver.html)
>
> But this functionality is a very important part of automated testing.
>
>
> At the moment there are two obvious solutions to this problem, and both use [xdg-desktop-portal](https://github.com/flatpak/xdg-desktop-portal):
>
> 1. [org.freedesktop.portal.Screenshot DBUS API](https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Screenshot)
> It has several drawbacks though:
> + It saves a screenshot to disk, which must be read and deleted(may add some delays depending on the type of a disk drive).
> + There is no way to disable the visual "screen flash" after screenshot
> + It asks a user confirmation to save a screenshot. This confirmation can be saved on Gnome 43+.
> Since we would like Ubuntu 22.04 LTS which comes with Gnome 42 this option is not acceptable for us because it would require user confirmation for each screenshot.
> But we still can consider this option as a fallback.
>
>
>
> 2. [org.freedesktop.portal.ScreenCast](https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.ScreenCast)
> It typically used by applications that need to capture the contents of the user's screen or a specific window for the purpose of sharing, recording, or streaming.
> This might be a bit of overkill, but it avoids several of the problems mentioned in the Screenshot API.
>
> + implementation is more complicated comparing to Screenshot API
> + no intermediate file, screenshot data can be obtained from memory
> + Permission to make screenshots can be stored with [`restore_token`](https://flatpak.github.io/xdg-desktop-portal/#gdbus-method-org-freedesktop-portal-ScreenCast.SelectSources)
>
>
> So this PR adds the ability to take screenshots using the ScreenCast API. This functionality is currently disabled by default.
>
> This change also introduces some new behavior for the robot:
> A system window now appears asking for confirmation from the user to capture the screen.
> + The user can refuse the screen capture completely. In this case a security exception will be thrown.
> + The user can allow a screen capture for all screens o...
Alexander Zvegintsev has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains ten commits:
- enable by default for Wayland
- Merge branch 'master' into X11_compatibility_screencast
- refactoring to remove resetScreenCapturePermission
- update, based on review comments
- remove wayland detection
- BUILD_LIBPIPEWIRE_HEADER_DIRS -> LIBPIPEWIRE_HEADER_DIRS
- replace tabs with spaces
- main changes
- add pipewire header files
-------------
Changes: https://git.openjdk.org/jdk/pull/13803/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13803&range=03
Stats: 14701 lines in 106 files changed: 14663 ins; 18 del; 20 mod
Patch: https://git.openjdk.org/jdk/pull/13803.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/13803/head:pull/13803
PR: https://git.openjdk.org/jdk/pull/13803
More information about the build-dev
mailing list