flameshot-org/flameshot

Cannot take screenshot on gnome 41 + wayland

tim-hm opened this issue · 58 comments

Flameshot version
Flameshot v0.10.1 (d142888)
Compiled with Qt 5.15.2

Describe the bug
When running flameshot gui on gnome 41 + wayland nothing happens.

Output from running dbus-monitor --session sender=org.flameshot.Flameshot is here

To Reproduce
Install gnome 41 + wayland + Arch + flameshot, and then run flameshot gui in terminal

Expected behavior
The on screen gui should launch to take a screenshot

System Information

$neofetch --stdout
OS: Arch Linux x86_64
Host: Z390 AORUS PRO WIFI
Kernel: 5.14.6-zen1-1-zen
Uptime: 19 mins
Packages: 1160 (pacman), 4 (flatpak)
Shell: fish 3.3.1
Resolution: 3840x2160
DE: GNOME 41.0
WM: Mutter
WM Theme: Adwaita
Theme: Adwaita-dark [GTK2/3]
Icons: Adwaita [GTK2/3]
Terminal: tmux
CPU: Intel i9-9900K (16) @ 5.000GHz
GPU: AMD ATI Radeon RX 470/480/570/570X/580/580X/590
Memory: 13319MiB / 64246MiB

same story on fedora 35, gnome 41 and wayland

Ok, since we have two people with the same issue on two different distro, let's do some testing. I would appreciate if both of you file the steps and report back the output here:

  1. Open two terminals and keep them open
  2. In the first terminal run:
pkill flameshot
flameshot
  1. In the second terminal run:
flameshot gui

According to your posts nothing should happen, but you will see some output in the first terminal. Please provide us that output.

Additionally, @pashtet422 please provide the following:

  • Your Flameshot version
  • how have you installed it (compiling from source, RPM, Flatpak, Snap, ...)

Was about to add a "+1" on this, but executed your procedure above, and it worked. So, it's my understanding that, on order to flameshot gui to work, the daemon should already be running; is that so? Reading the docs, it wasn't clear - and I was under the impression that running flameshot gui would start a one-shot capture, regardless of the daemon.

Using latest stable Snap version, BTW.

@ivocavalcante all flameshot gui does is to call DBus and ask the daemon to start in gui mode. Therefore if you want to have single command, you are better to call flameshot ; flameshot gui. As far as I understand, it is in the implementation that the flameshot gui starts the daemon if it is not already in the background. This behavior is definitely the case with the normal packages but I have not tried this with Snaps and Flatpaks.

Does it have anything to do with the dbus changes mentioned in this kooha issue?

1st terminal:

pkill flameshot
flameshot
QSettings::value: Empty key passed
QSettings::value: Empty key passed
QSettings::setValue: Empty key passed
QSettings::value: Empty key passed
QSettings::setValue: Empty key passed

2nd terminal:
nothing, but i received a system notification witch says "Unable to capture screen"

Flameshot v0.10.1
Compiled with Qt 5.15.2
Flameshot was compiled from source

@pashtet422 Can you confirm that you are using Gnome and Wayland?

Yes, i'm using Fedora 35 with gnome 41.0 and wayland. Flameshot has been crashed after update from Fedora 34 to 35.

Upd: i've tried to recompile from source again and a problem still exists

might be related to #1622 or #675

@mmahmoudian I reproduced this issue today on Fedora35, but it works on Fedora34. Given the other report about Gnome41 on arch, I think we should conclude Gnome41/ mutter made a change to the screenshot API.

Edit: I cant reproduce this on Arch with gnome 41....

From fedora:
image

I can reproduce this independent of flameshot:
image

Okay, I posted the details on the upstream package: https://bugzilla.redhat.com/show_bug.cgi?id=2009460

@saboya Thanks, I added this to the README.

@mmahmoudian What are your thoughts on this. We have essentially two options.

  1. Keep this extension as a requirement going forward
  2. Switch to the public DBUS portal, but this requires users to click an allow prompt on each and every screenshot.

@saboya Thanks, I added this to the README.

@mmahmoudian What are your thoughts on this. We have essentially two options.

  1. Keep this extension as a requirement going forward
  2. Switch to the public DBUS portal, but this requires users to click an allow prompt on each and every screenshot.

Hello, I'm the author of said extension. Basically, that extension works by enabling unsafe_mode from Mutter global context (which you can always do from LG or from your own extension, just see the source code itself).

The problem is this mode is (surprise!) unsafe for end users, since this enable arbitrary code executions (just like ol' GNOME 3 days) by abusing Eval() dbus method.

Since security is a big issue, and nobody wants some rogue apps, scripts or extensions running malicious codes on their machine because an extension just open up the possibility to, I've since inactivated the extension, but you can still install the extension from the source code.

Thank you @ramottamado and @saboya for your input.

@borgmanJeremy This is indeed a dilemma which MacOS, iOS and Android have solved ages ago by asking user for certain permissions once and white listing that software for that permission. Tbh, to me it seems we are facing a monopoly that only the softwares Gnome wants can work without interruption and annoyance and all other softwares should face all sorts of challenge. Their excuse for changing DBus seems legit and I mostly agree, but due to bad implementation or their shortsightedness they immediately created a monopoly for their own applications which are hardcoded in the allow list (as Florian Müllner mentioned in the Gnome's gitlab repo.

Regardless, considering that the extension is inactivated, we have no choice but to go with the flow. I suggest that we implement a part that detects this situation, then we open a window for the user with enough text and link so that they know the faulty party is not Flameshot. I really don't know if we should point the finger to Gnome or Wayland, but nonetheless imho it is crucial that the user knows why they are getting spammed with popups and to know it is not bad design by us, but rather bad design by merge-request 1970 of gnome shell.

The Unsafe extension did not seem to be available on Gnome Extensions anymore?
But, my workaround was to manually set the unsafe mode during flameshoot usage:

  1. Alt+F2 to get the run menu
  2. write 'lg' to start the looking glass UI.
  3. enter 'global.context.unsafe_mode = true' in the evaluator prompt window
  4. take the screenshot(s) from flameshoot
  5. repeated steps 1-3, but enter 'false' instead of 'true' in step 3

In this way, I am able to use flameshoot (until a fix is made) and still keep my Gnome safe (except while using flameshoot).

I am running Fedora 35 with Gnome 41 and Wayland.

And for the discussion, I do not mind being asked permission to take a screenshot (like Gnome 41 now demands).
I rather accept the security feature, as opposed to the alternative.

The Unsafe extension did not seem to be available on Gnome Extensions anymore? But, my workaround was to manually set the unsafe mode during flameshoot usage:

1. Alt+F2 to get the run menu

2. write 'lg' to start the looking glass UI.

3. enter 'global-context-unsafe_mode = true' in the evaluator prompt window

4. take the screenshot(s) from flameshoot

5. repeated steps 1-3, but enter 'false' instead of 'true' in step 3

In this way, I am able to use flameshoot (until a fix is made) and still keep my Gnome safe (except while using flameshoot).

I am running Fedora 35 with Gnome 41 and Wayland.

That worked for me, but the right expression was global.context.unsafe_mode = true, I'm not sure why it's different, I'm running Gnome 41.0 as well, but on NixOS (unstable).

And for the discussion, I do not mind being asked permission to take a screenshot (like Gnome 41 now demands). I rather accept the security feature, as opposed to the alternative.

I don't mind as well, I already need to give permission to other applications to record the screen, it would be only one more click to take a screenshot.

I find it annoying that I need to give permission on each and every screenshot, instead of once like on mobile operating systems or MacOS.

In any case the direction we are headed is to support the new portal and if users don't like the pop up they can complain to the gnome devs.

The permission thing in itself is a dealbreaker for me, but there's also the issue with feature parity. Is it possible to take area screenshots with the xdg portal API?

@saboya if the permission is a deal breaker, then either ask the Gnome devs to change their decision about this, or alternatively stop using Gnome Wayland. This is a restriction imposed by Gnome devs without discussing with the community and without considering applications that are not developed by themselves (they have whitelisted their own softwares!)

@saboya if the permission is a deal breaker, then either ask the Gnome devs to change their decision about this, or alternatively stop using Gnome Wayland. This is a restriction imposed by Gnome devs without discussing with the community and without considering applications that are not developed by themselves (they have whitelisted their own softwares!)

I understand, this is not a complaint / rant about flameshot. I disagree with Gnome team's decision here.

In fedora 34 i create a keyboard shortcut to flameshot gui and it worked
image

Also i ran this command before gsettings set org.gnome.shell development-tools true but tbh im not sure if it is related to my solution.

@nahuelr I think the issue was introduced with Gnome 41 that came with Fedora 35, which is still i beta.

I updated fedora to 35 and it was working fine on v34. I'm also getting the same error Unable to capture screen

#2035 fixes the problem for me in a VM. Would really appreciate if someone could test on an actual install and report back before I merge it.

@borgmanJeremy how do you avoid the whitelist that only allows Gnome's own application access to the DBus interface?

I switched to using the portal API which prompts the user upon every invocation for permission.

It's not ideal but its either that or Flameshot simply doesnt work.

Yes, have the same issue in ksnip. Earlier I've used native Wayland screenshots where possible (KDE and Gnome) and allowed the user to switch to Portal Screenshots. Now with this new change I'm enforcing Portal Screenshots for Gnome >= 41. It's far from user friendly...
Let's hope for some improvements with the portal interface.

Pndy commented

#2035 fixes the problem for me in a VM. Would really appreciate if someone could test on an actual install and report back before I merge it.

works on actual install Fedora 35 / Gnome 41 for me.
it does break the flow quite bit thought, it first taking full screen(s) screenshot (that full screen flashbang...) , having to press share with application and then flameshots editor shows up, but nothing you can do about it atm and better than not working at all like you said.

So unfortunately it seems that the latest build e4e7c90 still doesn't work for me on Fedora 35 Gnome 41 (gnome-shell-41.0-7.fc35). (But neither does on F34/Gnome 40.5 #2041)

@borgmanJeremy Can you tag a new release? Flameshot is broken on F35 and I receive a lot of bug reports.

We are close to freezing for a new release but need to fix some macOS issues. Can you cherry pick the patch that fixes the issue until we are ready for a release?

Ok we made a decision to release a bug fix release (0.10.2). I will do the release this weekend.

10.2-1 works on Fedora 35. Thanks! Flameshot is a part of my daily routine doing WP support. It was sorely missed.

yajo commented

I'm using it from Flathub but it doesn't work 😕

Hi, Thanks for this tool it help a lot. I really missed it after I've upgraded from Fedora 34 to 35. I still can't use it even with the version v0.10.2

❯ flameshot --version
Flameshot v0.10.2
Compiled with Qt 5.15.2

OS:

OS: Fedora release 35 (Thirty Five) x86_64 
Host: NBLB-WAX9N M1230 
Kernel: 5.15.10-200.fc35.x86_64 
Resolution: 1920x1080 
DE: GNOME 41.2 
WM: Mutter 
WM Theme: Adwaita 
Theme: Adwaita [GTK2/3] 
Icons: Adwaita [GTK2/3] 
Terminal: gnome-terminal 
CPU: Intel i5-10210U (8) @ 4.200GHz 
GPU: Intel CometLake-U GT2 [UHD Graphics] 
Memory: 11916MiB / 15732MiB 

@yajo @yaayes we just pre-released a new version (v11.0) and we will be testing it for the next few weeks. It would be nice if you can give it a try and see if you still have issues with running Flameshot.

Hi @mmahmoudian, thanks for the working on this tool. It's a great tool. I just installed the pre-release, but the same error still occurred. I can help test this release until the issue is resolved, just ping me!

~ 
❯ flameshot --version
Flameshot v11.0.0 ()
Compiled with Qt 5.15.2

~ 
❯ flameshot gui
flameshot: error: The configuration contains an error. Falling back to default.
flameshot: error: Unable to capture screen
flameshot: error: Unable to capture screen
flameshot: info: Screenshot aborted.

@yaayes thanks for treating the new pre-release. Let's then get some more information from you to better understand the situation. Please tell us the following:

  1. How did you install it? (Using the rpm or snap or flatpak or AppImage it compile from source)
  2. What is exactly the issue you are expecting (basically what works and what doesn't work)
  3. Follow the following steps and let me know the output of terminals:
    • kill Flameshot (pkill flameshot)
    • open two terminals
    • in the first one run flameshot
    • In the second terminal run flameshot gui (I assume this is where things doesn't work for you)
yajo commented

I installed https://github.com/flameshot-org/flameshot/releases/download/v11.0.rc1/org.flameshot.Flameshot-11.0.rc1.x86_64.flatpak directly.

I ran your commands. In 1st term:

> flatpak run org.flameshot.Flameshot
Qt: Session management error: None of the authentication protocols specified are supported

2nd terminal:

> flatpak run org.flameshot.Flameshot gui
Qt: Session management error: None of the authentication protocols specified are supported
flameshot: error: Unable to capture screen
flameshot: error: Unable to capture screen
flameshot: info: Screenshot aborted.

What happens under Wayland:

Captura.del.escritorio.de.27-12-21.09.25.59.mp4

Do you have xdg-desktop-portal installed?

yajo commented

And what about xdg-desktop-portal-gnome? It must be installed too in order to use the org.gnome.Shell.Screenshot interface:

A backend implementation for xdg-desktop-portal that is using various pieces of GNOME infrastructure, such as the org.gnome.Shell.Screenshot or org.gnome.SessionManager D-Bus interfaces.

yajo commented

Also there:

> /usr/libexec/xdg-desktop-portal-gnome --version
xdg-desktop-portal-gnome 41.1

Not affected.
Please reopen.

@gormih

Not affected. Please reopen.

You lost me. What is not affected? Please add a sentence or two to clarify your point.

@gormih

Not affected. Please reopen.

You lost me. What is not affected? Please add a sentence or two to clarify your point.

$ dnf list installed | grep xdg-desktop-portal
xdg-desktop-portal.x86_64 1.12.1-1.fc35 @updates
xdg-desktop-portal-gnome.x86_64 41.1-1.fc35 @anaconda
xdg-desktop-portal-gtk.x86_64 1.12.0-1.fc35 @updates
xdg-desktop-portal-wlr.x86_64 0.5.0-1.fc35 @updates

$ dnf list installed | grep flameshot
flameshot.x86_64 0.10.2-3.fc35 @updates

$ dbus-monitor --session sender=org.flameshot.Flameshot

signal time=1641208268.285705 sender=org.freedesktop.DBus -> destination=:1.126 serial=4294967295 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired
string ":1.126"
signal time=1641208268.285761 sender=org.freedesktop.DBus -> destination=:1.126 serial=4294967295 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameLost
string ":1.126"
method call time=1641208273.669242 sender=:1.130 -> destination=org.freedesktop.DBus serial=13 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.a11y.Bus',arg1=''"
method call time=1641208273.669455 sender=:1.130 -> destination=org.freedesktop.DBus serial=14 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameHasOwner
string "org.a11y.Bus"
method call time=1641208273.669650 sender=:1.130 -> destination=org.freedesktop.DBus serial=15 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.a11y.Bus'"
method call time=1641208273.669791 sender=:1.130 -> destination=org.freedesktop.DBus serial=16 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
string "org.a11y.Bus"
method call time=1641208273.669983 sender=:1.130 -> destination=org.a11y.Bus serial=17 path=/org/a11y/bus; interface=org.freedesktop.DBus.Properties; member=Get
string "org.a11y.Status"
string "ScreenReaderEnabled"
method call time=1641208273.670652 sender=:1.130 -> destination=org.a11y.Bus serial=18 path=/org/a11y/bus; interface=org.freedesktop.DBus.Properties; member=Get
string "org.a11y.Status"
string "IsEnabled"
method return time=1641208273.672612 sender=:1.130 -> destination=:1.127 serial=19 reply_serial=2
method call time=1641208273.675601 sender=:1.130 -> destination=org.freedesktop.portal.Desktop serial=20 path=/org/freedesktop/portal/desktop; interface=org.freedesktop.DBus.Introspectable; member=Introspect
method call time=1641208273.680533 sender=:1.130 -> destination=org.freedesktop.DBus serial=21 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.portal.Desktop'"
method call time=1641208273.680583 sender=:1.130 -> destination=org.freedesktop.DBus serial=22 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
string "org.freedesktop.portal.Desktop"
method call time=1641208273.680762 sender=:1.130 -> destination=org.freedesktop.DBus serial=23 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
string "org.freedesktop.portal.Desktop"
method call time=1641208273.681027 sender=:1.130 -> destination=org.freedesktop.DBus serial=24 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.portal.Desktop',path='/org/freedesktop/portal/desktop/request/1_130/346812dcd6b742bd9805d96f6292e231',interface='org.freedesktop.portal.Request',member='Response'"
method call time=1641208273.681061 sender=:1.130 -> destination=org.freedesktop.DBus serial=25 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.portal.Desktop'"
method call time=1641208273.681102 sender=:1.130 -> destination=org.freedesktop.DBus serial=26 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
string "org.freedesktop.portal.Desktop"
method call time=1641208273.681216 sender=:1.130 -> destination=org.freedesktop.portal.Desktop serial=27 path=/org/freedesktop/portal/desktop; interface=org.freedesktop.portal.Screenshot; member=Screenshot
string ""
array [
dict entry(
string "handle_token"
variant string "346812dcd6b742bd9805d96f6292e231"
)
dict entry(
string "interactive"
variant boolean false
)
]
method call time=1641208276.708830 sender=:1.130 -> destination=org.freedesktop.portal.Desktop serial=28 path=/org/freedesktop/portal/desktop/request/1_130/346812dcd6b742bd9805d96f6292e231; interface=org.freedesktop.portal.Request; member=Close
method call time=1641208276.709696 sender=:1.130 -> destination=org.freedesktop.Notifications serial=29 path=/org/freedesktop/Notifications; interface=org.freedesktop.DBus.Introspectable; member=Introspect
method call time=1641208276.712065 sender=:1.130 -> destination=org.freedesktop.DBus serial=30 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.Notifications'"
method call time=1641208276.712114 sender=:1.130 -> destination=org.freedesktop.DBus serial=31 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
string "org.freedesktop.Notifications"
method call time=1641208276.713197 sender=:1.130 -> destination=org.freedesktop.Notifications serial=32 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
string "flameshot"
uint32 0
string "flameshot"
string "Уведомление Flameshot"
string "Не удалось захватить экран"
array [
]
array [
]
int32 5000
method call time=1641208276.755435 sender=:1.130 -> destination=org.freedesktop.DBus serial=33 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.Notifications'"
method call time=1641208276.755616 sender=:1.130 -> destination=org.freedesktop.DBus serial=34 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
string "type='signal',sender='org.freedesktop.portal.Desktop',path='/org/freedesktop/portal/desktop/request/1_130/346812dcd6b742bd9805d96f6292e231',interface='org.freedesktop.portal.Request',member='Response'"
method call time=1641208276.755653 sender=:1.130 -> destination=org.freedesktop.DBus serial=35 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.portal.Desktop'"
method call time=1641208276.755745 sender=:1.130 -> destination=org.freedesktop.DBus serial=36 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.portal.Desktop'"
method call time=1641208276.756105 sender=:1.130 -> destination=org.freedesktop.DBus serial=37 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=AddMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.Notifications'"
method call time=1641208276.756397 sender=:1.130 -> destination=org.freedesktop.DBus serial=38 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=GetNameOwner
string "org.freedesktop.Notifications"
method call time=1641208276.757379 sender=:1.130 -> destination=org.freedesktop.Notifications serial=39 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify
string "flameshot"
uint32 0
string "flameshot"
string "Уведомление Flameshot"
string "Не удалось захватить экран"
array [
]
array [
]
int32 5000
method call time=1641208276.773226 sender=:1.130 -> destination=org.freedesktop.DBus serial=40 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=RemoveMatch
string "type='signal',sender='org.freedesktop.DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='org.freedesktop.Notifications'"
signal time=1641208276.898188 sender=:1.130 -> destination=(null destination) serial=41 path=/; interface=org.flameshot.Flameshot; member=captureFailed
uint32 4269929705

I've tried to run a few other screenshot utilities, like: Shutter, maim and xfce4-screenshooter, and can confirm this is a Gnome issue and not flameshot issue.

TL;DR, this is a complex topic regarding modern Gnome-shell, no one did a good job so far at reducing the complexity for the audience.

Can you please dear Flameshot developers try to sum up what is the issue with flameshot on gnome 41 wayland? I read this thread and it is still not quite clear, even if @mmahmoudian post helps:
Did gnome disallow access to DBus for others by default? [yes for a private API] Why in the hell would they do that? [for security] What technical challenges are there, where is this going? [see next paragraph] Flameshot is an awesome piece of software, and seing it work so bad on this setup is sad.

P.S. reading a bit more in this issue at Gnome-shell and this subsequent one at flatpak/xdg-desktop-portal, cannot you store in a gnome-keyring session the DBus authorization from a public gnome-shell API?

@Maxzor I think I have explained it well enough:

And if you want to read some the Gnome people's response on our repo:

A workaround for the permission prompt is by forking xdg-desktop-portal-gnome and simply removing the dialog. Here's a fork which does this.

Disclaimer: I maintain the above fork, and this solution likely won't work with sandboxing software such as Flatpak.

@TestingPlant
How to install on Ubuntu ?

@TestingPlant How to install on Ubuntu ?

sudo apt-get install flameshot should do it, or just look for flameshot on ubuntu's gui app-store

@TestingPlant How to install on Ubuntu ?

If you're asking about my fork, I don't support Ubuntu because it'd take a lot of time to backport and test my patch on all of the GNOME versions Ubuntu supports. If you have any more questions, make sure to ask on this issue tracker, not here.