From d9fedaf18b8a95d1c8ee0239aafbb6aec5e22776 Mon Sep 17 00:00:00 2001 From: Sergio Costas Rodriguez Date: Mon, 18 Nov 2024 13:57:36 +0100 Subject: [PATCH 1/2] Remove gnome shell for split desktop snap These are the required changes in core24-desktop to allow gnome shell to work in its own snap. --- hooks/001-extra-packages.chroot | 1 + hooks/002.1-add-gdm.chroot | 42 ++++--------------- hooks/599-cleanup-packages.chroot | 13 +++++- static/etc/system-image/writable-paths | 1 - .../usr/bin/core-desktop-session-wrapper.sh | 3 +- .../portals/gnome-keyring.portal | 4 ++ .../xdg-desktop-portal/portals/kwallet.portal | 4 ++ 7 files changed, 31 insertions(+), 37 deletions(-) create mode 100644 static/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal create mode 100644 static/usr/share/xdg-desktop-portal/portals/kwallet.portal diff --git a/hooks/001-extra-packages.chroot b/hooks/001-extra-packages.chroot index ae610465..003ec76d 100755 --- a/hooks/001-extra-packages.chroot +++ b/hooks/001-extra-packages.chroot @@ -267,6 +267,7 @@ PACKAGES=( p11-kit-modules plymouth-label-ft polkitd + python3-dbus rfkill squashfs-tools sudo diff --git a/hooks/002.1-add-gdm.chroot b/hooks/002.1-add-gdm.chroot index 3b8e0427..35ba2071 100755 --- a/hooks/002.1-add-gdm.chroot +++ b/hooks/002.1-add-gdm.chroot @@ -28,33 +28,9 @@ apt-get install --no-install-recommends -y \ gir1.2-gsound-1.0 \ libcanberra-pulse \ libsnapd-glib-2-1 \ - ibus - -# Install a basic Ubuntu session -apt-get install --no-install-recommends -y \ - ubuntu-session \ - gkbd-capplet \ - gnome-menus \ - gnome-terminal \ - gnome-settings-daemon \ - gnome-shell-extension-appindicator \ - gnome-shell-extension-desktop-icons-ng \ - gnome-shell-extension-ubuntu-dock \ - gnome-shell-extension-ubuntu-tiling-assistant \ - gnome-control-center \ - gnome-keyring \ - fprintd \ - libpam-fprintd \ - opensc \ - bolt \ - libpam-gnome-keyring \ - spice-vdagent \ - xdg-desktop-portal \ - xdg-desktop-portal-gnome \ - xdg-desktop-portal-gtk \ - xdg-user-dirs-gtk \ - inotify-tools \ - alsa-ucm-conf + ibus \ + pkexec \ + xdg-desktop-portal # Remove setuid from some executables we're not using chmod u-s,g-s /usr/bin/pkexec @@ -70,11 +46,11 @@ sed -i '/^Description=/ a # delay until snapd finishes seeding\nAfter=snapd.seed # Remove D-Bus service activation files provided by # ubuntu-desktop-session snap. -rm /usr/share/dbus-1/services/org.gnome.Nautilus.service -rm /usr/share/dbus-1/services/org.gnome.Terminal.service -rm /usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.gnome.service -rm /usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.gtk.service -rm /usr/share/dbus-1/services/org.gnome.Shell.Screencast.service +rm -f /usr/share/dbus-1/services/org.gnome.Nautilus.service +rm -f /usr/share/dbus-1/services/org.gnome.Terminal.service +rm -f /usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.gnome.service +rm -f /usr/share/dbus-1/services/org.freedesktop.impl.portal.desktop.gtk.service +rm -f /usr/share/dbus-1/services/org.gnome.Shell.Screencast.service rm -f /usr/share/dbus-1/services/org.freedesktop.IBus.service rm -f /usr/share/dbus-1/services/org.freedesktop.portal.IBus.service rm -f /usr/share/dbus-1/services/org.freedesktop.ColorHelper.service @@ -120,7 +96,7 @@ sed -i "/^ReadWritePaths=/ a \\ /var/lib/extrausers/ \\\\" \ /usr/lib/systemd/system/accounts-daemon.service # Hide gnome-terminal by default -sed -i 's/OnlyShowIn=/NoDisplay=true\nOnlyShowIn=/g' /usr/share/applications/org.gnome.Terminal.desktop +#sed -i 's/OnlyShowIn=/NoDisplay=true\nOnlyShowIn=/g' /usr/share/applications/org.gnome.Terminal.desktop # change default wallpapers cp /usr/share/gnome-background-properties/ubuntu-wallpapers.xml /usr/share/gnome-background-properties/ubuntu-core-desktop-wallpapers.xml diff --git a/hooks/599-cleanup-packages.chroot b/hooks/599-cleanup-packages.chroot index 06fc52c6..4af99b13 100755 --- a/hooks/599-cleanup-packages.chroot +++ b/hooks/599-cleanup-packages.chroot @@ -1,13 +1,22 @@ #!/bin/sh set -e -echo Removing pipewire # remove packages that were installed due to dependencies but that we # must remove. -dpkg -r --force-all pipewire wireplumber pipewire-pulse +echo Removing pipewire +dpkg -r --force-all pipewire wireplumber pipewire-pulse pipewire-alsa # For pipewire-bin remove all the binaries but retain all the config from /usr/share which will # be used by clients and modules for i in $(dpkg -L pipewire-bin | grep -v "^/\.$" | grep -v "usr/share" | sed -E -e 's,^/,,' | tac) ; do rm -df "$i" || /bin/true done +echo Removing xdg-desktop-portal-XXX +# Save the portal file +cp /usr/share/xdg-desktop-portal/portals/gnome.portal /usr/share/xdg-desktop-portal/portals/gnome.portal.preserve +dpkg -r --force-all xdg-desktop-portal-gtk xdg-desktop-portal-gnome +# Now, restore the portal file +mv /usr/share/xdg-desktop-portal/portals/gnome.portal.preserve /usr/share/xdg-desktop-portal/portals/gnome.portal + +# Remove all the gnome services to ensure that they don't interfere with the ones in the session snap +rm -f /usr/share/dbus-1/services/org.gnome.* diff --git a/static/etc/system-image/writable-paths b/static/etc/system-image/writable-paths index 4e8a3f44..8ac84bd5 100644 --- a/static/etc/system-image/writable-paths +++ b/static/etc/system-image/writable-paths @@ -73,7 +73,6 @@ /etc/polkit-1/rules.d auto persistent none none /var/lib/AccountsService auto persistent transition none /var/lib/gdm3 auto persistent transition none -/usr/share/wayland-sessions auto persistent transition none /usr/share/polkit-1 auto persistent transition none /var/lib/colord auto persistent transition none /var/lib/fprint auto persistent transition none diff --git a/static/usr/bin/core-desktop-session-wrapper.sh b/static/usr/bin/core-desktop-session-wrapper.sh index 9c485dab..4cdbe415 100755 --- a/static/usr/bin/core-desktop-session-wrapper.sh +++ b/static/usr/bin/core-desktop-session-wrapper.sh @@ -61,6 +61,7 @@ fixup_xauthority & ln -sf "snap.$snap_name/wayland-0" $XDG_RUNTIME_DIR/wayland-0 # Symlink sockets for pipewire and pipewire-pulse ln -sf "snap.pipewire/pipewire-0" $XDG_RUNTIME_DIR/pipewire-0 -ln -sf "snap.pipewire/pulse" $XDG_RUNTIME_DIR/pulse +mkdir -p $XDG_RUNTIME_DIR/pulse +ln -sf "../snap.pipewire/pulse/native" $XDG_RUNTIME_DIR/pulse/native exec "/snap/bin/$snap_cmd" diff --git a/static/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal b/static/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal new file mode 100644 index 00000000..07eb3d24 --- /dev/null +++ b/static/usr/share/xdg-desktop-portal/portals/gnome-keyring.portal @@ -0,0 +1,4 @@ +[portal] +DBusName=org.freedesktop.secrets +Interfaces=org.freedesktop.impl.portal.Secret +UseIn=gnome diff --git a/static/usr/share/xdg-desktop-portal/portals/kwallet.portal b/static/usr/share/xdg-desktop-portal/portals/kwallet.portal new file mode 100644 index 00000000..8198428a --- /dev/null +++ b/static/usr/share/xdg-desktop-portal/portals/kwallet.portal @@ -0,0 +1,4 @@ +[portal] +DBusName=org.freedesktop.impl.portal.desktop.kwallet +Interfaces=org.freedesktop.impl.portal.Secret; +UseIn=kde From 51bd4e9152a37bc4e1a5f3cf4c88fe9ffadbc3ae Mon Sep 17 00:00:00 2001 From: Sergio Costas Rodriguez Date: Mon, 18 Nov 2024 13:57:36 +0100 Subject: [PATCH 2/2] Extra changes to boot gnome-shell --- hooks/001-extra-packages.chroot | 1 + hooks/002.1-add-gdm.chroot | 32 +++++++++++++++++-- hooks/599-cleanup-packages.chroot | 7 +++- .../portals/gnome.portal.in | 4 +++ 4 files changed, 41 insertions(+), 3 deletions(-) create mode 100644 static/usr/share/xdg-desktop-portal/portals/gnome.portal.in diff --git a/hooks/001-extra-packages.chroot b/hooks/001-extra-packages.chroot index 003ec76d..c3c7c7c1 100755 --- a/hooks/001-extra-packages.chroot +++ b/hooks/001-extra-packages.chroot @@ -284,6 +284,7 @@ PACKAGES=( xkb-data locales cracklib-runtime + python3-dbus ) case "$(dpkg --print-architecture)" in diff --git a/hooks/002.1-add-gdm.chroot b/hooks/002.1-add-gdm.chroot index 35ba2071..ca3ccbf5 100755 --- a/hooks/002.1-add-gdm.chroot +++ b/hooks/002.1-add-gdm.chroot @@ -32,6 +32,32 @@ apt-get install --no-install-recommends -y \ pkexec \ xdg-desktop-portal +# Install a basic Ubuntu session +# apt-get install --no-install-recommends -y \ +# ubuntu-session \ +# gkbd-capplet \ +# gnome-menus \ +# gnome-terminal \ +# gnome-settings-daemon \ +# gnome-shell-extension-appindicator \ +# gnome-shell-extension-desktop-icons-ng \ +# gnome-shell-extension-ubuntu-dock \ +# gnome-shell-extension-ubuntu-tiling-assistant \ +# gnome-control-center \ +# gnome-keyring \ +# fprintd \ +# libpam-fprintd \ +# opensc \ +# bolt \ +# libpam-gnome-keyring \ +# spice-vdagent \ +# xdg-desktop-portal \ +# xdg-desktop-portal-gnome \ +# xdg-desktop-portal-gtk \ +# xdg-user-dirs-gtk \ +# inotify-tools \ +# alsa-ucm-conf + # Remove setuid from some executables we're not using chmod u-s,g-s /usr/bin/pkexec @@ -92,8 +118,10 @@ chmod a+x /usr/libexec/gsd-xsettings # accounts-daemon uses systemd to lock down the paths it can write # to. That list of paths does not include the extrausers database used # by Ubuntu Core. -sed -i "/^ReadWritePaths=/ a \\ /var/lib/extrausers/ \\\\" \ - /usr/lib/systemd/system/accounts-daemon.service +#sed -i "/^ReadWritePaths=/ a \\ /var/lib/extrausers/ \\\\" \ +# /usr/lib/systemd/system/accounts-daemon.service + +rm -f /usr/lib/systemd/system/accounts-daemon.service # Hide gnome-terminal by default #sed -i 's/OnlyShowIn=/NoDisplay=true\nOnlyShowIn=/g' /usr/share/applications/org.gnome.Terminal.desktop diff --git a/hooks/599-cleanup-packages.chroot b/hooks/599-cleanup-packages.chroot index 4af99b13..bbd947a5 100755 --- a/hooks/599-cleanup-packages.chroot +++ b/hooks/599-cleanup-packages.chroot @@ -11,12 +11,17 @@ dpkg -r --force-all pipewire wireplumber pipewire-pulse pipewire-alsa for i in $(dpkg -L pipewire-bin | grep -v "^/\.$" | grep -v "usr/share" | sed -E -e 's,^/,,' | tac) ; do rm -df "$i" || /bin/true done + +# Remove accouts-service +dpkg -r --force-all accountsservice + echo Removing xdg-desktop-portal-XXX # Save the portal file -cp /usr/share/xdg-desktop-portal/portals/gnome.portal /usr/share/xdg-desktop-portal/portals/gnome.portal.preserve +cp /usr/share/xdg-desktop-portal/portals/gnome.portal.in /usr/share/xdg-desktop-portal/portals/gnome.portal.preserve dpkg -r --force-all xdg-desktop-portal-gtk xdg-desktop-portal-gnome # Now, restore the portal file mv /usr/share/xdg-desktop-portal/portals/gnome.portal.preserve /usr/share/xdg-desktop-portal/portals/gnome.portal # Remove all the gnome services to ensure that they don't interfere with the ones in the session snap rm -f /usr/share/dbus-1/services/org.gnome.* + diff --git a/static/usr/share/xdg-desktop-portal/portals/gnome.portal.in b/static/usr/share/xdg-desktop-portal/portals/gnome.portal.in new file mode 100644 index 00000000..c3b9dc6f --- /dev/null +++ b/static/usr/share/xdg-desktop-portal/portals/gnome.portal.in @@ -0,0 +1,4 @@ +[portal] +DBusName=org.freedesktop.impl.portal.desktop.gnome +Interfaces=org.freedesktop.impl.portal.Access;org.freedesktop.impl.portal.Account;org.freedesktop.impl.portal.AppChooser;org.freedesktop.impl.portal.Background;org.freedesktop.impl.portal.Clipboard;org.freedesktop.impl.portal.DynamicLauncher;org.freedesktop.impl.portal.FileChooser;org.freedesktop.impl.portal.InputCapture;org.freedesktop.impl.portal.Lockdown;org.freedesktop.impl.portal.Notification;org.freedesktop.impl.portal.Print;org.freedesktop.impl.portal.RemoteDesktop;org.freedesktop.impl.portal.ScreenCast;org.freedesktop.impl.portal.Screenshot;org.freedesktop.impl.portal.Settings;org.freedesktop.impl.portal.Wallpaper; +UseIn=gnome