我安装了 Ubuntu 18.04 LTS。
我将 USB 闪存插入我的笔记本电脑。它被自动挂载到/media/username/DISKLABEL并在 Nautilus 中打开。我可以读取和写入对象。
如何从作为 Snap 安装的应用程序访问它?
我尝试了以下应用程序的快照,例如gedit
, arduino-mhall119
, organize-my-files
. 如果我导航到/media文件夹,它们都会向我显示错误:
无法读取媒体的内容
打开“/media”目录时出错:权限被拒绝
活动 Snap接口的输出如下:
$ 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
更新:
- 将mount-observe连接到 Gedit
snap connect gedit:mount-observe
并没有帮助。 - 看来我们需要支持
removable-media
接口的特殊 Snap。
所以我们需要特别准备的支持
removable-media
连接器/接口/插件的 Snap。以下是 YAML-manifest 中描述的带有可移动媒体插件的 Snap 列表:
可以通过以下GitHub 搜索链接找到 SnapCrafters 发布的其他 Snap 。
因此,如果应用程序没有自动连接,
removable-media
我们需要手动连接:但并非所有应用程序在 YAML 清单中都有这个插件/接口。
很难通过支持的插件找到包 - 所以我创建了关于 snapcraft.io 站点的问题“使用过滤器(插件,例如等)添加参数 Snap 搜索的能力
removable-media
” 。关于
snap
名为“snap
应提供查找具有所需插头或连接器的软件包的功能”命令的错误已作为错误 1776938 提交给启动板。Ubuntu 软件程序现在将在您安装的每个 Snap 程序的页面上显示一个权限按钮。
单击权限,弹出窗口为您提供“在可移动存储设备上读取/写入文件”选项,您可以单击右侧的按钮将其打开。
您需要以这种方式逐个激活每个程序,但没有什么特别要记住的,除了按钮存在。
要快速访问 USB 存储设备,它需要连接到
removable-media
. 一些快照会自动连接到它。如果没有,您可以使用以下命令手动连接它:有时,此命令会失败并显示以下消息:
这意味着包的发布者没有表明应用程序可以使用可移动媒体。在这种情况下,您应该联系发布者并要求他们将
removable-media
接口添加到 Snap 的插件中。大多数快照显示如何联系发布者;运行
snap info snap-name
并查看contact
电子邮件地址或 URL 的字段。自动连接
removable-media
发布者可以请求他们的 Snap 自动连接到
removable-media
界面。这对于属于以下类别的应用程序是允许的。如果应用程序属于这些类别之一并且
removable-media
未自动连接到应用程序,请联系发布者并要求他们请求自动连接到removable-media
.需要连接的接口是
removable-media
。可以从 /media 和 /run/media 中的可移动媒体访问文件。这可用于让应用程序访问已安装的 USB 记忆棒和桌面上的外部硬盘驱动器。
该
mount-observe
界面仅允许您查看已挂载的内容,而不能访问挂载:可以查询系统挂载信息。这是受到限制的,因为它授予对挂载参数的特权读取访问权限,并且只能与受信任的应用程序一起使用。
这两个接口都不会自动连接。来自https://github.com/snapcore/snapd/wiki/Interfaces#removable-media
snap 应用程序需要
removable-media
启用插件才能访问 USB 存储和其他驱动器。您可以通过下面的第 1 部分来做到这一点。如果您不幸需要没有
removable-media
支持的快照,则可以尝试按照以下说明添加它。我必须为自由平面(思维导图应用程序)快照执行此操作,类似的过程也适用于其他快照。我将在下面的说明中使用freeplane - 请将其替换为您的 snap 应用程序的等效项。
第 1 部分:检查可移动媒体支持
snap list | grep freeplane
。这表明快照名称的freeplane-mindmapping
版本号为 [1.9.7]。sudo snap connect freeplane-mindmapping:removable-media
。如果您没有收到任何错误消息,则可移动媒体已启用并在此处停止:您的工作已完成!error: snap "freeplane-mindmapping" has no plug named "removable-media"
,则该快照应用程序中未启用可移动媒体插件。snap connections freeplane-mindmapping
,结果应该类似于:请注意,上面的输出没有显示
removable-media
接口,但它确实显示了以 开头cups-control
和结尾的其他接口的列表x11
。我们将在此 snap 应用程序的 .yaml 配置文件中添加removable-media
之后x11
。第 2 部分:解压快照文件
根据 Bernard Wei 的回答,快照文件以只读方式安装,因此要修改它们,您需要解压缩它,修改文件,然后重新制作 squashfs 文件。
mount |grep freeplane
以查找快照文件路径 (/var/lib/snapd/snaps/freeplane-mindmapping_29.snap
) 和安装点 (/snap/freeplane-mindmapping/29
)。记下文件路径和挂载点,因为稍后将需要它们。sudo umount /snap/freeplane-mindmapping/29
。键入snap list | grep freeplane
现在会将快照显示为“损坏”。sudo unsquashfs /var/lib/snapd/snaps/freeplane-mindmapping_29.snap
。快照文件将被提取到~/squashfs-root/
.~/squashfs-root/meta
(例如使用 Ctrl-L)。Edit as Administrator
文件snap.yaml
.plugs
并输入removable-media
afterx11
:第 3 部分:重新插入修改后的快照文件
sudo mksquashfs squashfs-root freeplane-mindmapping_29.snap
。修改后的快照文件将在主文件夹中创建。sudo cp freeplane-mindmapping_29.snap /var/lib/snapd/snaps/freeplane-mindmapping_29.snap
。sudo mount -t squashfs -o ro,nodev,relatime,x-gdu.hide /var/lib/snapd/snaps/freeplane-mindmapping_29.snap /snap/freeplane-mindmapping/29
。snap list | grep freeplane
将不再将快照显示为“损坏”。snap connections freeplane-mindmapping
不显示removable-media
,则重新启动。snap connections freeplane-mindmapping
应该显示removable-media
.snap connect freeplane-mindmapping:removable-media
。 您现在应该可以访问可移动媒体了!squashfs-root
使用 删除文件夹sudo rm -r ~/squashfs-root
。ln -s /path/to/folder ~/snap/freeplane-mindmapping/29/
.祝你好运!