Support request: Wayland
See original GitHub issueGeneral information:
- OS name: Ubuntu
- OS version: 20.04
- OS architecture: 64 bits
- Resolutions:
- Monitor 1: 1920x1080
- Python version: 3.8.2
- MSS version: 5.0.0
For GNU/Linux users:
- Display server protocol and version, if known: Wayland
- Desktop Environment: Gnome
- Composite Window Manager name and version: Unknown
Description of the warning/error
When running mss
under Wayland, it crashs. As far as I understand from the source code, mss
currently uses xlib for Linux, which seems to (unsurprisingly) not work on Wayland. It would be very cool to have wayland support implemented, as it becomes more and more popular.
Full message
Example: Executing the following snippet under X works perfectly, while under Wayland it produces an error.
Snippet:
import mss
fn = mss.mss().shot(mon=-1, output="screenshot.png")
print(fn)
Error on Wayland:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/holger/.local/lib/python3.8/site-packages/mss/factory.py", line 41, in mss
return linux.MSS(**kwargs)
File "/home/holger/.local/lib/python3.8/site-packages/mss/linux.py", line 226, in __init__
self.root = self.xlib.XDefaultRootWindow(MSS.display)
File "/home/holger/.local/lib/python3.8/site-packages/mss/linux.py", line 175, in validate
raise ScreenShotError(err, details=details)
mss.exception.ScreenShotError: XDefaultRootWindow() failed
Other details
A lot of screenshot tools (e.g. shutter) have this issue, because screenshots seem to work completely different in Wayland (to improve security). Applications that do work are e.g.:
- gnome-screenshot, which is e.g. leveraged by the python-lib pyscreenshot
- flameshot works too, but seems not to have implemented the “proper” way here (see below).
A proper way to do screenshots under Wayland is referenced in a flameshot issue and might help solving this in mss
, too. The main statement from that issue:
The cross-platform way to take screenshots on Wayland is via xdg-desktop-portal (which also works outside of Flatpak). See https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.Screenshot.xml
Issue Analytics
- State:
- Created 3 years ago
- Reactions:7
- Comments:6 (2 by maintainers)
Top GitHub Comments
Hello,
I started looking at wayland support. I have worked on a very basic (incomplete) implementation repository .
However I am getting horrible FPS (~3.5) and it pulls in two external dependencies (python-dbus and pygoobject).
There are two points of interest:
Screenshot
on Serviceorg.freedesktop.portal.Desktop
, with object/org/freedesktop/portal/desktop
, and interfaceorg.freedesktop.portal.Screenshot
. This will return the path of an object:request_path
2.2 Subscribe to a signal on Serviceorg.freedesktop.portal.Desktop
on the objectrequest_path
and interfaceorg.freedesktop.portal.Request
. 2.3 Run the Main Loop (!!!). After a while we will receive a file path. 2.4 Open the file and create a screenshot object.This project (from what I understand) is supposed to be fast and no dependencies. Further steps to be taken:
Concerns:
The dbus event loop seems to be taking ~75% of the time (the remaining 30% being mainly reading the file from disk to a screenshot object). With this latency is xdg-desktop-portal suitable for the python-mss project?
Should I add/modify the
Screenshot
object constructors to load images from a file more efficiently?I have not been able to run the tests as the
pygoobject
dependency is causing issues. I am not that familiar withtox
.I have not made a pull request as this is very very preliminary.
Apologies if I have skipped a step or not seen another discussion.
I also just realized that I bumped a year old thread, sorry for that.
A bump should be no issue as long as this issue is open and there is demand for wayland (or Xwayland on Gnome 40.0 in my case). I’ve tried the commits of surajRathi, but unfortunately receive NotImplementedError for _monitors_impl. Mss is a dependency for python-imagesearch, which i originally intended to use. As BoboTiG commented, i’m not sure either how far this issue can be solved, because of the general design of wayland. But solving this on gnome certainly seems easier because of it’s gnome-screenshot utility.