GNOME Integration Notes/Issue Tracking

I’m running GNOME 48 on my MNT Pocket Reform with RK3588 since a few weeks as a daily driver and after fixing some fundamental issues, I really like it a lot as a fast and productive system, either “docked” to my Dell U2724DE monitor with USB/ethernet, or on the go. I’m planning to replace Wayfire as one of the two default desktop choices for the next version of the Reform System Image with GNOME. That said, if you’re daily driving Wayfire on the Pocket or the classic Reform, I’d like to hear your opinion on this, of course. I get the impression that most people currently use Sway, though. So the plan for the next version is to offer Sway for more advanced and keyboard-centric users, and GNOME for people who like to have more GUI driven discoverability and configuration.

For GNOME to work well on Mali GPUs like with A311D and RK3588, and Pocket Reform with it’s rotated, 7" HiDPI display, there are some tweaks that we need to ship and/or upstream. I’ll use this post as both an issue tracker and guidance for people who want to already hack and experiment on this, and will update the post from time to time until our integration is done.

Directly GNOME related

Compositor Performance

I recently realized, with help from Robert Mader, that the Mutter/COGL compositor has performance issues with GTK3 applications (opposed to GTK4, and it might also cause other performance issues) on Panfrost (the open source driver for current Mali GPUs). This is because Mutter/COGL chooses Desktop GL 3.1 by default instead of GLES 2, and this changes some render paths and format conversion choices. It ends up spending a lot of CPU time on texture conversion. Until this gets fixed, the current workaround is to force Mutter/COGL to use OpenGL ES by putting this environment variable in /etc/environment:

COGL_DRIVER=gles2

Link to discussion in mutter Gitlab: Making sure you're not a bot!

Compositor: Mouse Cursor

(added 2025-03-09)

The mouse cursor is currently not on a hardware accelerated overlay plane, even if RK3588 VOP2 has plenty of them. This results in Gnome Shell/Mutter being able to stop the cursor from moving under high CPU load, and when Gnome Shell Javascript elements do long-running work in the main thread (examples are calendar dropdown data fetching/rendering and the initial draws for the control panel).

The output of drm_info shows that all VOP planes are of type Overlay but Mutter expects Overlay+Primary+Cursor bits. This could be fixed either as a kernel patch to advertise these missing flags on the display engine driver side or as a Mutter patch. The kernel patch would be easy to try as we have a patch stack mechanism in our build process anyway. TODO: make a kernel patch.

Battery / Suspend

To support battery status integration, GNOME needs the upowerd daemon from the upower package to run. As sleep/resume is broken on all our current platforms (edit: except on imx8mq, thanks @josch), we need to make sure that this upower daemon doesn’t attempt suspending the system, but unfortunately upower/GNOME are configured to do so by default. TODO: Document and test the default configs we need to deploy.

Pocket Display

The Pocket’s display is a physically rotated portrait display (1200x1920) that we use in a landscape orientation device. This can be configured in GNOME Setting’s Displays section by setting Orientation to Landscape Right, and most people will also want Scale at 200%.

Interestingly, this gets saved into an XML file at ~/.config/monitors.xml which we can bundle in our skeleton (/etc/skel) similarly to our current sway and wayfire configs.

GDM (see below) doesn’t seem to use this monitors config automatically, though, so the login screen stays wrongly orientated. On Debian, GDM appears to have its own user account Debian-gdm, with its home directory set to /var/lib/gdm3. This means that we can put GNOME (and other) config files into /var/lib/gdm3/.config to override the defaults. Copying ~/.config/monitors.xml into /var/lib/gdm3/.config fixes the rotation issue.

Login Manager / GDM

GNOME doesn’t work correctly in my tests when started from our current greetd/tuigreet setup (TODO: document exactly the resulting delays and things that are broken). On the other hand, because of greetd/tuigreet I made the questionable decision to set the default kernel loglevel to 3 to not make kernel spam overwrite the login screen. This has made it harder for some people to debug kernel issues. GNOME assumes that GDM is the default login manager and it gets automatically pulled in with the gnome packages on Debian.

GDM feels a bit slow to start up, and is tricky to customize. Maybe I’m holding it wrong and there’s already a newer, better version or obvious alternative? This one is up for discussion. I’m also up for picking a lightweight graphical alternative and understanding + fixing GNOME session startup from non-GDM.

Styling

Fonts: I’m using the “Inter Medium” font on GNOME using gnome-tweaks, as that’s our default UI font and it (subjectively) looks better than the default Cantarell. Turns out that this is solving itself: GNOME has recently forked Inter and Iosevka into “Adwaita Fonts” and are switching to them as the default: Making sure you're not a bot! (This is also funny because we shipped Iosevka for a long time until switching to Jetbrains Mono in light of Iosevka packaging/size issues).

Icons: We currently install and configure papirus-icon-theme as the default, while GNOME uses adwaita-icon-theme. I think that while Papirus works well for things like having monochrome top bar icons in Sway, Adwaita looks a bit more friendly and detailled on GNOME.

Wallpaper: TODO: Figure out how to include our default wallpaper, also in the login manager.

Keyboard Layout and Shortcuts

To support our standard EURkey layout, esp. on Pocket, “Show Extended Input Sources” needs to be enabled in the “Keyboard” section of Gnome Tweaks. Also I needed to enable “Right Alt” under “Key to choose the 3rd level”. TODO: ship these settings.

Under “Windows” in Gnome Tweaks I enabled:

  • Maximize
  • Minimize
  • Placement Right
  • Don’t attach Modal Dialogs (TBD)
  • Window Action Key: Super (critical to be able to move windows around without needing to hunt for the titlebar)
  • Resize with Secondary-Click (same, for resize)

TODO: Ship these defaults.

Under Keyboard Shortcuts in GNOME Settings, I added/modified the following shortcuts that I was missing from our Sway defaults:

  • Screenshots:
    • Record a screencast interactively: Super+Shift+R
    • Take a screenshot: Super+Shift+S
    • Take a screenshot interactively: Super+Shift+X
    • Take a screenshot of a window: Super+Shift+W
  • Launchers: “Launch help browser” → Disabled, because this interfered with Super+F1 for brightness IIRC.
  • Navigation: Move window to workspace 1…4 → Super+1…Super+4 (although I’m not using workspaces anymore)
  • System: Restore the keyboard shortcuts: Disabled (IIRC this was binding Super+Escape)
  • Windows:
    • Close window: Super+Escape
    • Toggle fullscreen: Super+F (very important feature, not sure why this isn’t a default)
  • Custom Shortcuts:
    • Increase Brightness: Super+F2
    • Lower Brightness: Super+F1
    • Terminal: Super+Return

Extensions

There are a number of useful extensions available when installing gnome-shell-extension-manager , but the most important one for me is:

  • Dash to Dock, which moves the launcher/dock to the main desktop instead of hiding it in the Applications/Dash screen of GNOME. This makes launching apps more calm—as opposed to the default behaviour of entering the Dash causes a big animated transition of everything on the screen.
  • @wakest recently showed me that there’s an extension to fix the Dash application grid’s number of rows and columns, which are by default too many for the Pocket’s 2x scaled 7" display. TODO Ship this extension and configure it for Pocket.

About

In the About screen in Settings, the “Processor” field is empty, also “System Details” has no mention of the device model. TODO: figure out how to fix this.

Automatic/Offline Updates

AFAIK the Debian gnome packages pull in packagekit which contains and activates packagekit-offline-update.service. This unfortunately leads to very bad UX where this service blocks boot for a very long time (up to tens of minutes) and make the computer unexpectedly unusable in that time, with no way to stop the process. TODO: we should mask this service by default and talk to the people involved about how to make this better. For example, it would be much better to do these updates in the background/with visible UI while the system is running and usable.

Not strictly GNOME related, but touches the UX

CPU/GPU Perf Governors

When I do very GPU performance intensive tasks (like KiCAD with a complex PCB, or Dolphin Emulator), I use the following script to lock the GPU to 1GHz. It’s unclear why this doesn’t happen automatically:

cd /sys/class/devfreq/fb000000.gpu
echo userspace > governor
echo 1000000000 > min_freq

Another note: installing cpupower-gui has the bad side effect of enabling a service that will always default to “Powersave” on boot, regardless of actual Cpupower GUI default setting.

Chromium

Not directly related to GNOME, but Chromium currently crashes regularly when run with the Wayland (Ozone) backend on RK3588 and thus we can only use the Xorg backend until this is fixed. This results in Chromium being blurry (rendered at half resolution and scaled x2) on GNOME on the Pocket Reform display. The problem is tracked here Chromium

If i’m not mistaken, a patch for this is pulled into Debian’s chromium build (3 days ago), which is great: chromium-debian-build/debian/patches/fixes/libsync-rk3588-panthor.patch at really-fix-libsync · amazingfate/chromium-debian-build · GitHub TODO test this patched version.

Sound

TODO: We’re missing an ALSA UCM profile for all Pocket platforms. Pocket has the TLV320AIC3100 audio chip for which Linux doesn’t have reasonable defaults for switching between the mono Speaker and stereo Headphones, so you have to do it manually using alsamixer or scripts, resulting in a bad user experience. This can be fixed by writing, preinstalling and upstreaming a ALSA UCM profile.

11 Likes

I see notice of the newer processors, but has testing happened for the default iMx8 processor card?

Do you mean the imx8mq in classic reform or the imx8m+ in pocket reform? Gnome works fine with imx8mq in classic reform.

To avoid this getting lost, here are two links to upstream issues about this problem:

1 Like

In the pocket reform.

I just did a fresh Debian Trixie installation using the Debian installer daily netboot images and can confirm this with Gnome as the current default desktop.

Gnome maintainer Jeremy Bicha agreed that the current behaviour is suboptimal and should be changed. I opened this bug to track the issue: https://bugs.debian.org/1100063

Jeremy pointed out that while the offline updating service might be a bad default, it does solve some problems that upgrading while Gnome is running can have: debian/NEWS · master · Debian Fonts Task Force / fonts-cantarell · GitLab So masking the service is not a silver bullet.

1 Like

Thanks for sharing this! Really promising stuff. Looks like it answers most of my questions. I bet the RK in the Pocket is quite the experience!!!

This sounds really promising! The next version of Debian will be a pretty good timing to change the defaults here with all the improvements GNOME did since the last Debian release. Like this recent example in the performance area. Combined with other changes, I think it will be a reasonable choice for people to use Debian Trixie on their (Pocket) Reform which is, in my opinion, a good and stable choice for many people. Letting people choose between GNOME and Sway will cover different preferences, making the devices more approachable to people who might not consider them right now.

I also like the Super key based shortcuts a lot! Good idea.

I really like GNOME and use it every day. I‘ll be receiving my Pocket Reform soon. The best way to contribute to this effort would be to install the OS as it is standard right now (based on Sid) choosing either Sway or Wayfire, and install gnome or gnome-core via apt in addition (I usually install gnome-core on Debian, as the other package contains too many things I don’t need), and report issues (probably upstream to GNOME) with that setup. Right? Let me know if another approach is better, happy to help as a tester :slight_smile:

1 Like