22

I have Ubuntu 18.04 LTS installed.

I inserted USB-flash to my laptop. It was automounted to /media/username/DISKLABEL and opened in Nautilus. I can read and write objects to it.

How can I access it from the application, which is installed as Snap?

I tried snaps of the following applications such as gedit, arduino-mhall119, organize-my-files. All them show me errors if I navigate to /media folder:

trying to access /media

trying to access /media

Could not read the contents of Media

Error opening the directory of '/media': permission denied

Output of active Snap interfaces is below:

$ snap interfaces  | grep -v ".*-$"
Slot                             Plug
:browser-support                 organize-my-files
:core-support                    core:core-support-plug
:cups-control                    gedit
:desktop                         gedit,organize-my-files
:desktop-legacy                  gedit,organize-my-files
:gsettings                       gedit,organize-my-files
:home                            arduino-mhall119,gedit,organize-my-files
:network                         arduino-mhall119,gedit,organize-my-files,pulsemixer
:opengl                          organize-my-files
:pulseaudio                      organize-my-files,pulsemixer
:unity7                          arduino-mhall119,gedit,organize-my-files
:wayland                         gedit
:x11                             arduino-mhall119,organize-my-files,pulsemixer
gnome-3-26-1604:gnome-3-26-1604  gedit
gtk-common-themes:gtk3-themes    gedit
gtk-common-themes:icon-themes    gedit
gtk-common-themes:sound-themes   gedit
-                                arduino-mhall119:serial-port
-                                gedit:avahi-observe
-                                gedit:mount-observe

Updates:

  • connecting mount-observe to Gedit with snap connect gedit:mount-observe does not help.
  • it seems that we need special Snap with support of removable-media interface.

5 Answers 5

24

So we need special prepared Snap with support of removable-media connector/interface/plugin.

Below is a list of Snap with removable-media plug described in YAML-manifest :

One can find other Snaps released by SnapCrafters with the following GitHub search link.


So if the application does not have auto-connect of removable-media we need to connect it manually with:

snap connect some-snap-name:removable-media

But not all applications have this plug/interface in YAML-manifest.


It is hard to find packages by supported plugs - so I created issue "Add ability for parametric Snap search with filters (plugs, such as removable-media and so on)" about snapcraft.io site.

The bug about snap command named "snap should provide functionality to find packages with needed plug or connector" was filed to launchpad as bug 1776938.

8
  • The correct command is: snap connect some-snap-name:removable-media May 25, 2018 at 15:06
  • @ZygmuntKrynicki of course. Thank you, I fixed this silly typo.
    – N0rbert
    May 25, 2018 at 15:10
  • The bug which is cited in the last two paragraphs is truly annoying, but a simple workaround for it if the snap package is already installed is snap interfaces some-snap-name
    – karel
    Jun 15, 2018 at 12:55
  • @karel, right. Thank you! I have this command already in question. The main problem is to determine plugs of non-installed Snap.
    – N0rbert
    Jun 15, 2018 at 12:56
  • 1
    The bug which is cited in the last two paragraphs is truly annoying, but a simple workaround for it if the snap package is already installed is snap connections some-snap-name This is an update of my previous comment.
    – karel
    Jul 30, 2019 at 18:03
14

The Ubuntu Software program will now show a Permissions button on the page of each Snap program you have installed.

the Krita page of Ubuntu Software program showing the buttons under the title - Launch, Remove, and Permissions

Click on Permissions, and a pop-up window gives you the option 'Read/write files on removable storage devices', with a button to the right that you click to turn this on.

enter image description here

You need to activate each program one by one this way, but there is nothing special to remember, other than that the button exists.

4
  • Please add screenshot of "Click on Permissions, and a pop-up window" to the answer.
    – N0rbert
    Jul 14, 2019 at 17:37
  • @N0rbert Done...
    – kim holder
    Jul 17, 2019 at 21:22
  • This also works for accessing mounted NTFS drives from Snap apps, thank you.
    – rluks
    Feb 14, 2021 at 8:00
  • How to allow an arbitrary path, such as /data/photos?
    – NikoNyrh
    Apr 29 at 10:35
4

To access USB storage from a snap, it needs a connection to removable-media. Some snaps are automatically connected to it. If not, you can manually connect it using the following command:

snap connect snap-name:removable-media

Sometimes, this command fails with the following message:

error: snap "snap-name" has no plug named "removable-media"

This means the publisher of the package has not indicated that the application can use removable media. In this case, you should contact the publisher and ask them to add the removable-media interface to the plugs of the Snap.

Most Snaps show how to contact the publisher; run snap info snap-name and look at the contact field for an email address or a URL.

Automatically connecting removable-media

It is possible for publishers to request that their Snap is automatically connected to the removable-media interface. This is allowed for applications that fall into the following categories.

  • Major browsers such as Brave, Firefox and Chromium.
  • Media editors such as photo editors like gimp, video editors like OpenToonz or audio editors like Audacity.
  • Media players/viewers such as video players like VLC media player or image viewing programs.
  • Media recorders such as a screencast program, a webcam program, OBS Studio or a podcast recording application.

If an application falls into one of these categories and removable-media is not automatically connected to the application, please contact the publisher and ask them to request an auto-connection to removable-media.

0
3

The interface which needs to be connected is removable-media.

Can access files from removable media in /media and /run/media. This can be used to give an app access to mounted USB sticks and external hard drives on a desktop.

The mount-observe interface only lets you view what is mounted, not access mounts:

Can query system mount information. This is restricted because it gives privileged read access to mount arguments and should only be used with trusted apps.

Neither of these two interfaces will auto-connect. From https://github.com/snapcore/snapd/wiki/Interfaces#removable-media

1
  • I don't know. It seems obs-studio does, but I only found it due to it mentioning the interface in the description of the app for how to access external storage. I don't know how to query the store for specific interfaces in snaps. If a specific snap doesn't support the interface, it will presumably need to be rebuilt to support it.
    – dobey
    May 9, 2018 at 13:58
1

The snap app needs to have removable-media plug enabled in order to access USB storage and other drives. You can do this through Part 1 below.

If you are unlucky enough to need a snap that does not have removable-media support, then you can try adding it as per the instructions below.

I had to do this for the freeplane (mind-mapping app) snap and a similar process should work for other snaps as well. I will use freeplane in the instructions below - please replace it with the equivalent for your snap app.

Part 1: Check for removable-media support

  1. Search for the exact installed snap app name using snap list | grep freeplane. This showed the snap name is freeplane-mindmapping with version number [1.9.7].
  2. Try connecting to removable media using sudo snap connect freeplane-mindmapping:removable-media. If you do not get any error messages, then removable-media is enabled and STOP HERE: your work is done!
  3. If you get the error message error: snap "freeplane-mindmapping" has no plug named "removable-media", then emovable-media plug is not enabled in that snap app.
  4. Check to see which connections are enabled using snap connections freeplane-mindmapping, which should result is something like: enabled snap connections list

Note that the above output does not show the removable-media interface, but it does show a list of other interfaces started with cups-control and ending with x11. We will be adding removable-media after x11 in the .yaml configuration file for this snap app.

Part 2: Unsquash the snap file

As per Bernard Wei' answer, snap files are mounted as read-only so to modify them, you will need to unsquash it, modify the files and then re-make the squashfs file.

  1. Type mount |grep freeplane to find the snap filepath (/var/lib/snapd/snaps/freeplane-mindmapping_29.snap) and mount point (/snap/freeplane-mindmapping/29). Keep a note of both the filepath and the mount point as these will be needed later. enter image description here
  2. Unmount this snap using sudo umount /snap/freeplane-mindmapping/29. Typing snap list | grep freeplane will now show the snap as 'broken'. enter image description here
  3. Unsquash snap file by typing sudo unsquashfs /var/lib/snapd/snaps/freeplane-mindmapping_29.snap. The snap file will be extracted to ~/squashfs-root/.
  4. Using Nautilus, go to the ~/squashfs-root/meta (eg using Ctrl-L).
  5. Right click and Edit as Administrator the file snap.yaml.
  6. Scroll down to the section called plugs and enter in removable-media after x11: enter image description here
  7. Save and close the gedit/editor

Part 3: Reinsert the modified snap file

  1. Remake the snap file using sudo mksquashfs squashfs-root freeplane-mindmapping_29.snap. The modified snap file will be created in the Home folder.
  2. Overwrite the original snap file with the modified snap using sudo cp freeplane-mindmapping_29.snap /var/lib/snapd/snaps/freeplane-mindmapping_29.snap.
  3. Mount the modified snap to the original mount location using sudo mount -t squashfs -o ro,nodev,relatime,x-gdu.hide /var/lib/snapd/snaps/freeplane-mindmapping_29.snap /snap/freeplane-mindmapping/29.
  4. If it worked, snap list | grep freeplane will no longer show the snap as "broken". enter image description here
  5. If snap connections freeplane-mindmapping does not show removable-media, then reboot.
  6. Now snap connections freeplane-mindmapping should show removable-media. enter image description here
  7. Enable removable-media using snap connect freeplane-mindmapping:removable-media. You should now have access to removable media!
  8. [Optional] Delete the squashfs-root folder using sudo rm -r ~/squashfs-root.
  9. [Optional] For easy access, you can make a symbolic link to your removable media using ln -s /path/to/folder ~/snap/freeplane-mindmapping/29/.

Good luck!

Not the answer you're looking for? Browse other questions tagged or ask your own question.