19

OS: Ubuntu 20.04

The following is the output of snap list on a new install of Ubuntu 20.04:

$ snap list
Name                             Version             Rev   Tracking         Publisher   Notes
core18                           20200311            1705  latest/stable    canonical✓  base
gnome-3-34-1804                  0+git.2c86692       27    latest/stable/…  canonical✓  -
gtk-common-themes                0.1-36-gc75f853     1506  latest/stable/…  canonical✓  -
snap-store                       3.36.0-74-ga164ec9  433   latest/stable/…  canonical✓  -
snapd                            2.44.3              7264  latest/stable    canonical✓  snapd
$

And this is what I see after installing a variety of snaps (and removing some):

$ snap list
Name                             Version                     Rev   Tracking         Publisher   Notes
core                             16-2.44.3                   9066  latest/stable    canonical✔  core
core18 •                         20200427                    1754  latest/stable    canonical✔  base
firefox *                        77.0b2-1                    358   latest/beta      mozilla✔    -
gnome-3-28-1804                  3.28.0-16-g27c9498.27c9498  116   latest/stable    canonical✔  -
gnome-3-34-1804 •                0+git.2c86692               27    latest/stable/…  canonical✔  -
gnome-system-monitor *           3.32.0-27-g32ed970e06       135   latest/stable    canonical✔  -
gtk-common-themes •              0.1-36-gc75f853             1506  latest/stable/…  canonical✔  -
kanagram *                       20.04.0                     51    latest/stable    kde✔        -
kcolorchooser *                  20.04.0                     57    latest/stable    kde✔        -
kde-frameworks-5                 5.47.0                      27    latest/stable    kde✔        -
kde-frameworks-5-core18          5.61.0                      32    latest/stable    kde✔        -
kde-frameworks-5-qt-5-14-core18  5.68.0                      4     latest/stable    kde✔        -
kolourpaint *                    20.04.0                     56    latest/stable    kde✔        -
ksnip *                          1.7.0                       46    latest/edge      dporobic    -
okular *                         20.04.0                     98    latest/stable    kde✔        -
snap-store •                     3.36.0-74-ga164ec9          433   latest/stable/…  canonical✔  -
snapd •                          2.44.3                      7264  latest/stable    canonical✔  snapd
$

For ease of discussion, let's call

  • the five original snaps (tagged with next to their names) "system snaps"
  • the snaps I knowingly installed (tagged with * next to their names) "primary snaps"
  • and the other snaps "supporting snaps"
    • core
    • gnome-3-28-1804
    • kde-frameworks-5
    • kde-frameworks-5-core18
    • kde-frameworks-5-qt-5-14-core18

Given that a snap and a minimum of two revisions are stored by the system, and that some supporting snaps can be a couple of hundred MB (ls -lh /var/lib/snapd/snaps), it would be worth knowing which secondary snaps can be removed if the primary snap has been already removed.

But how does one "map" the supporting snaps to the primary snaps?

In my case, I can run snap connections okular to intuit that kde-frameworks-5-qt-5-14-core18 was installed as a consequence of sudo snap install okular.

But snap connections … works only if the relevant snap is still installed. I had installed but then removed falkon, featherpad, kcalc, konversation, palapeli, and the stable version of ksnip.

Is there a log file related to installing and removing snaps akin to /var/log/dpkg.log or /var/log/apt/history.log?

If not, how else is one to know if a "supporting" snap is still required?


A related, but unanswered, question is here: How can I list manually installed snaps and remove no longer needed automatically installed ones?

DK Bose
  • 44,553

3 Answers3

17

Examining the snap.yaml files of all installed snaps may help us to know which supporting snaps are needed as dependencies:

Example:

~$ grep "default-provider:" /snap/*/*/meta/snap.yaml
/snap/snap-store/415/meta/snap.yaml:    default-provider: gnome-3-28-1804
/snap/snap-store/415/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/snap-store/415/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/snap-store/415/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/snap-store/current/meta/snap.yaml:    default-provider: gnome-3-28-1804
/snap/snap-store/current/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/snap-store/current/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/snap-store/current/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/wire/132/meta/snap.yaml:    default-provider: gnome-3-28-1804
/snap/wire/132/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/wire/132/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/wire/132/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/wire/current/meta/snap.yaml:    default-provider: gnome-3-28-1804
/snap/wire/current/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/wire/current/meta/snap.yaml:    default-provider: gtk-common-themes
/snap/wire/current/meta/snap.yaml:    default-provider: gtk-common-themes
~$ grep "base:" /snap/*/*/meta/snap.yaml
/snap/gnome-3-28-1804/116/meta/snap.yaml:base: core18
/snap/gnome-3-28-1804/current/meta/snap.yaml:base: core18
/snap/gtk-common-themes/1506/meta/snap.yaml:base: core18
/snap/gtk-common-themes/current/meta/snap.yaml:base: core18
/snap/snap-store/415/meta/snap.yaml:base: core18
/snap/snap-store/current/meta/snap.yaml:base: core18
/snap/wire/132/meta/snap.yaml:base: core18
/snap/wire/current/meta/snap.yaml:base: core18

If an installed snap does not appear on the right side of the output, then it is not a dependency to any other snap, and this snap can be removed. Of course, your manually installed snaps will not appear on the right side of the output, usually no other snaps depend on them, this are snaps you want to keep.


We can make the output a bit shorter if we check the snap.yaml-files only for the current active revision of the snaps:

grep "default-provider:" /snap/*/current/meta/snap.yaml
grep "base:" /snap/*/current/meta/snap.yaml

There is one snap installed as soon if you install your first snap and that is a snap named snapd. The snap snapd is not referenced in the lists provided by the commands above. According to https://snapcraft.io/snapd this snap is needed to install, configure, refresh and remove snap packages. This snap is not removable as long as you have any snaps installed:

~$ snap remove snapd
error: cannot remove "snapd": snap "snapd" is not removable: remove all other snaps first
Artur Meinild
  • 31,035
mook765
  • 18,644
1
snap connections

shows which snap is using which or for one app e.g.:

$  snap connections snap-store
Schnittstelle             Plug                                      Slot                             Notizen
appstream-metadata        snap-store:appstream-metadata             :appstream-metadata              -
content[gnome-3-38-2004]  snap-store:gnome-3-38-2004                gnome-3-38-2004:gnome-3-38-2004  -
content[gtk-3-themes]     snap-store:gtk-3-themes                   gtk-common-themes:gtk-3-themes   -
content[icon-themes]      snap-store:icon-themes                    gtk-common-themes:icon-themes    -
content[sound-themes]     snap-store:sound-themes                   gtk-common-themes:sound-themes   -
dbus                      -                                         snap-store:packagekit-svc        -
dbus                      -                                         snap-store:snap-store            -
desktop                   snap-store:desktop                        :desktop                         -
desktop-legacy            snap-store:desktop-legacy                 :desktop-legacy                  -
fwupd                     snap-store:fwupd                          :fwupd                           -
gsettings                 snap-store:gsettings                      :gsettings                       -
network                   snap-store:network                        :network                         -
network-manager           snap-store:network-manager                -                                -
network-status            snap-store:network-status                 :network-status                  -
opengl                    snap-store:opengl                         :opengl                          -
packagekit-control        snap-store:packagekit-control             :packagekit-control              -
password-manager-service  snap-store:password-manager-service       :password-manager-service        -
personal-files            snap-store:dot-snap-auth-json             -                                -
snapd-control             snap-store:snapd-control                  :snapd-control                   -
system-files              snap-store:hostfs-usr-share-applications  :system-files                    -
system-observe            snap-store:system-observe                 :system-observe                  -
upower-observe            snap-store:upower-observe                 :upower-observe                  -
wayland                   snap-store:wayland                        :wayland                         -
x11                       snap-store:x11                            :x11                             -
rubo77
  • 34,024
  • 52
  • 172
  • 299
1

These two commands improved from the other answers might help:

snap list --all | awk '/-/{print $1}'

grep "default-provider:|base:" /snap/*/current/meta/snap.yaml | awk '{print $NF}'

These list the non-core and non-base snaps, and list snaps currently used. A script or one-liner could be used to compare the two, but manually installed snaps (like Chromium) still show up, and I couldnt find a way to exclude them like you can with Apt. snap list --help doesnt have that info. Maybe another file does.

alchemy
  • 850