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.