On Mon, 22 May 2023 22:34:17 GMT, Alexander Zvegintsev <azveg...@openjdk.org> 
wrote:

>> 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...
>
> Alexander Zvegintsev has updated the pull request incrementally with one 
> additional commit since the last revision:
> 
>   Call loadGtk when awt.robot.gtk set to false

The system properties have been renamed:

`awt.robot.screenshotMethod` -> `awt.robot.screenshotMethod`
`awt.robot.screencastDebug` -> `awt.robot.screenshotDebug`

`awt.robot.screenshotMethod` - `dbusScreencast` defaults to Wayland session, 
`x11` defaults to X11 session, and to all other values except `dbusScreencast`.

Note 
<ol>
<li>setting this to `x11` in a Wayland session means screen capture will always 
fail, as it does in earlier JDKs</li>
<li>setting this to `dbusScreencast` in an X.org session should work but is 
only recommended for JDK debugging purposes</li>
<li>The already existing `awt.robot.gtk` option is only valid for `x11` and has 
no effect for `dbusScreencast`.</li>
</ol>


`awt.robot.screenshotDebug` - `false` by default, if `true` prints debug 
information related if any available.


This may be needed for a smoother experience when we later want to get a 
screenshot via 
[org.freedesktop.portal.Screenshot DBUS 
API](https://flatpak.github.io/xdg-desktop-portal/#gdbus-method-org-freedesktop-portal-Screenshot.Screenshot).
 (it requires Gnome 43+, Ubuntu 22.04 LTS has 42.5).

So we can add `dbusScreenshot` option for the `awt.robot.screenshotMethod` 
later.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/13803#issuecomment-1559507625

Reply via email to