如何从作为 Snap 安装的应用程序访问 USB 存储?

如何从作为 Snap 安装的应用程序访问 USB 存储?

我已经安装了 Ubuntu 18.04 LTS。

我把 USB 闪存插入笔记本电脑。它自动安装到/media/用户名/DISKLABEL并在 Nautilus 中打开。我可以读取和写入对象。

如何从作为 Snap 安装的应用程序访问它?

我尝试了以下应用程序的快照,例如gedit,,arduino-mhall119organize-my-files如果我导航到/媒体文件夹:

尝试访问/media

尝试访问/media

无法读取媒体内容

打开“/media”目录时出错:权限被拒绝

主动捕捉输出接口在下面:

$ 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

更新:

  • 連接安装-观察对 Gedit 来说snap connect gedit:mount-observe没有帮助。
  • 看来我们需要特殊的 Snap 来支持removable-media界面。

答案1

因此我们需要专门准备支持removable-media连接器/接口/插件的 Snap。

以下是 Snap 的列表可移动媒体YAML-manifest 中描述的插件:

SnapCrafters 发布的其他 Snap 如下:GitHub 搜索链接


因此,如果应用程序没有自动连接,removable-media我们需要使用以下方法手动连接:

snap connect some-snap-name:removable-media

但并非所有应用程序在 YAML-manifest 中都有此插件/接口。


很难找到受支持的插件包 - 所以我创建了关于 snapcraft.io 网站的问题“添加使用过滤器(插件等removable-media)进行参数化 Snap 搜索的功能”

snap关于命令named的bugsnap应提供查找具有所需插头或连接器的软件包的功能”已作为错误 1776938 提交到启动板

答案2

Ubuntu 软件程序现在将在您安装的每个 Snap 程序的页面上显示一个权限按钮。

Ubuntu 软件程序的 Krita 页面显示标题下的按钮 - 启动、删除和权限

单击“权限”,弹出窗口将为您提供“在可移动存储设备上读取/写入文件”选项,右侧有一个按钮,单击即可打开该选项。

在此处输入图片描述

您需要通过这种方式逐个激活每个程序,但除了按钮存在之外,没有什么特别需要记住的。

答案3

要快速访问 USB 存储,需要联系removable-media。一些 snap 会自动连接到它。如果没有,你可以使用以下命令手动连接它:

snap connect snap-name:removable-media

有时,此命令会失败并显示以下消息:

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

这意味着软件包的发布者没有表明该应用程序使用可移动媒体。在这种情况下,您应该联系出版商并要求他们添加removable-media界面到 Snap 的插头。

大多数 Snap 都会显示如何联系发布者;运行snap info snap-name并查看contact字段中的电子邮件地址或 URL。

自动连接removable-media

发布者可以要求其 Snap 自动连接到界面removable-media。以下类别的应用程序允许此功能。

  • 主流浏览器例如 Brave、Firefox 和 Chromium。
  • 媒体编辑例如像 gimp 的照片编辑器、像 OpenToonz 的视频编辑器或像 Audacity 的音频编辑器。
  • 媒体播放器/查看器例如 VLC 媒体播放器等视频播放器或图像查看程序。
  • 媒体记录器例如屏幕录制程序、网络摄像头程序、OBS Studio 或播客录制应用程序。

如果某个应用程序属于上述任一类别,且未removable-media自动连接到该应用程序,请联系发布者并要求他们请求自动连接removable-media

答案4

Snap 应用程序需要启用removable-media插头才能访问 USB 存储和其他驱动器。您可以通过以下方式执行此操作第1部分以下。

如果您不幸需要一个不受支持的快照removable-media,那么您可以尝试按照以下说明添加它。

我必须这样做自由平面(思维导图应用程序)snap 和类似的过程也适用于其他 snap。我将使用自由平面在以下说明中 - 请将其替换为您的 snap 应用程序的等效内容。

第 1 部分:检查可移动媒体支持

  1. 使用 搜索确切安装的 snap 应用程序名称snap list | grep freeplane。显示 snap 名称的freeplane-mindmapping版本号为 [1.9.7]。
  2. 尝试使用 连接到可移动媒体sudo snap connect freeplane-mindmapping:removable-media。如果您没有收到任何错误消息,则表示可移动媒体已启用,并且到此停止:你的工作已完成!
  3. 如果您收到错误消息error: snap "freeplane-mindmapping" has no plug named "removable-media",则表示该 snap 应用程序中未启用 emovable-media 插件。
  4. 检查使用启用了哪些连接snap connections freeplane-mindmapping,结果应类似于: 启用快照连接列表

请注意,上面的输出不显示接口,但它显示了以 开头和以 结尾的removable-media其他接口列表。我们将在该 snap 应用程序的 .yaml 配置文件中添加以下内容。cups-controlx11removable-mediax11

第 2 部分:解压 snap 文件

根据 Bernard Wei 的回答,snap 文件以只读方式安装,因此要修改它们,您需要取消压缩它,修改文件,然后重新制作 squashfs 文件。

  1. 键入mount |grep freeplane以查找快照文件路径 ( /var/lib/snapd/snaps/freeplane-mindmapping_29.snap) 和挂载点 ( /snap/freeplane-mindmapping/29)。记下文件路径和挂载点,因为稍后会需要它们。 在此处输入图片描述
  2. 使用 卸载此 snap 包sudo umount /snap/freeplane-mindmapping/29。输入后snap list | grep freeplanesnap 包会显示为“损坏”。 在此处输入图片描述
  3. 通过键入 来取消压缩 snap 文件sudo unsquashfs /var/lib/snapd/snaps/freeplane-mindmapping_29.snap。snap 文件将被提取到 ~/squashfs-root/
  4. 使用 Nautilus 转到~/squashfs-root/meta(例如使用 Ctrl-L)。
  5. 右键单击Edit as Administrator文件snap.yaml
  6. 向下滚动到调用的部分plugs并输入: removable-mediax11在此处输入图片描述
  7. 保存并关闭 gedit/编辑器

第 3 部分:重新插入修改后的 snap 文件

  1. 使用 重新制作 snap 文件sudo mksquashfs squashfs-root freeplane-mindmapping_29.snap。修改后的 snap 文件将创建在 Home 文件夹中。
  2. 使用 用修改后的 snap 覆盖原始的 snap 文件sudo cp freeplane-mindmapping_29.snap /var/lib/snapd/snaps/freeplane-mindmapping_29.snap
  3. 使用 将修改后的快照安装到原始安装位置sudo mount -t squashfs -o ro,nodev,relatime,x-gdu.hide /var/lib/snapd/snaps/freeplane-mindmapping_29.snap /snap/freeplane-mindmapping/29
  4. 如果它有效,snap list | grep freeplane将不再显示为“损坏”。 在此处输入图片描述
  5. 如果snap connections freeplane-mindmapping没有显示removable-media,则重新启动。
  6. 现在snap connections freeplane-mindmapping应该显示removable-media在此处输入图片描述
  7. 使用 启用可移动媒体snap connect freeplane-mindmapping:removable-media您现在可以访问可移动媒体了!
  8. [可选]squashfs-root使用 删除文件夹sudo rm -r ~/squashfs-root
  9. [可选] 为了方便访问,您可以使用 创建到可移动媒体的符号链接ln -s /path/to/folder ~/snap/freeplane-mindmapping/29/

祝你好运!

相关内容