One major issue with developing high-quality GNOME Shell extensions is the lack of continuous integration possibilities. So I thought: Why not try getting GNOME Shell running on the runners of GitHub Actions?
Of course I know that this is exactly what Docker or Podman are not designed to be used for…
What already works:
But I came pretty far already! Feel free to have a look at this repository for the Dockerfile
and some usage examples. What I achieved so far:
- Run GNOME Shell in a Podman container.
- Run other applications, like
gnome-control-center
. - Capture a screenshot and transfer it to host memory.
- This works both, locally on my machine and on a GitHub hosted runner.
What works not:
The only missing puzzle-piece seems to be that GNOME Shell fails to load any extensions in this setup (which is a pity since this is the thing I am mostly interested in )!
gnome-shell
prints the following messages when being launched in the container:
Xlib: extension "DPMS" missing on display ":99".
(gnome-shell:124): mutter-WARNING **: 08:17:02.384: Failed to use linear monitor configuration: Invalid mode 1600x900 (-nan) for monitor 'unknown unknown'
(gnome-shell:124): mutter-WARNING **: 08:17:02.384: Failed to use fallback monitor configuration: Invalid mode 1600x900 (-nan) for monitor 'unknown unknown'
Xlib: extension "DPMS" missing on display ":99".
portal is not running: GDBus.Error:org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.freedesktop.portal.IBus exited with status 1
GNOME Shell-Message: 08:17:03.217: Telepathy is not available, chat integration will be disabled.
(gnome-shell:124): Gjs-WARNING **: 08:17:03.292: JS ERROR: Could not load extension ubuntu-dock@ubuntu.com: Error: Missing metadata.json
createExtensionObject@resource:///org/gnome/shell/ui/extensionSystem.js:281:19
_loadExtensions/<@resource:///org/gnome/shell/ui/extensionSystem.js:594:34
collectFromDatadirs@resource:///org/gnome/shell/misc/fileUtils.js:27:17
_loadExtensions@resource:///org/gnome/shell/ui/extensionSystem.js:574:19
_enableAllExtensions@resource:///org/gnome/shell/ui/extensionSystem.js:608:18
_sessionUpdated@resource:///org/gnome/shell/ui/extensionSystem.js:639:18
init@resource:///org/gnome/shell/ui/extensionSystem.js:56:14
_initializeUI@resource:///org/gnome/shell/ui/main.js:257:22
start@resource:///org/gnome/shell/ui/main.js:146:5
@<main>:1:47
GNOME Shell-Message: 08:17:03.914: GNOME Shell started at Wed Jan 27 2021 08:17:03 GMT+0000 (UTC)
GNOME Shell-Message: 08:17:03.923: Registering session with GDM
GNOME Shell-Message: 08:17:03.942: Error registering session with GDM: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.DisplayManager was not provided by any .service files
Both, the Ubuntu-Dock-Error and the GDM-Error are not fatal (I guess). The can be resolved by enabling the GDM service and by removing the directory /usr/share/gnome-shell/extensions/ubuntu-dock@ubuntu.com
which contains a CSS file only (ubuntu-desktop
is not installed in the image).
Starting gnome-extensions-app
in the container gives this error:
(gnome-extensions-app:386): Gjs-WARNING **: 08:02:08.164: JS ERROR: Gio.DBusError: Error calling StartServiceByName for org.gnome.Shell.Extensions: Process org.gnome.Shell.Extensions exited with status 1
_injectToMethod/klass[method]@resource:///org/gnome/gjs/modules/core/overrides/Gio.js:290:25
_makeProxyWrapper/<@resource:///org/gnome/gjs/modules/core/overrides/Gio.js:267:17
vfunc_startup@resource:///org/gnome/Extensions/js/main.js:69:28
main@resource:///org/gnome/Extensions/js/main.js:503:23
run@resource:///org/gnome/gjs/modules/script/package.js:222:19
start@resource:///org/gnome/gjs/modules/script/package.js:206:5
@/usr/share/gnome-shell/org.gnome.Extensions:1:17
Gjs-Message: 08:02:08.164: JS WARNING: [resource:///org/gnome/Extensions/js/main.js 51]: reference to undefined property "_shellProxy"
(gnome-extensions-app:386): Gjs-WARNING **: 08:02:08.164: JS ERROR: TypeError: this._shellProxy is undefined
vfunc_activate@resource:///org/gnome/Extensions/js/main.js:51:9
main@resource:///org/gnome/Extensions/js/main.js:503:23
run@resource:///org/gnome/gjs/modules/script/package.js:222:19
start@resource:///org/gnome/gjs/modules/script/package.js:206:5
@/usr/share/gnome-shell/org.gnome.Extensions:1:17
The complete output of journalctl
As it’s pretty long but may be helpful, I uploaded the output of journalctl
as a Gist: Log output of GNOME Shell Pod · GitHub.
Does anybody have a suggestion how I could approach this last issue?
Thank you very much! And if you know a better place to ask this nerdy question - please point me to it!