「SNAPPY」- Plugs, Interfaces, Slots | 授权

认识

Interface 允许(或拒绝)访问快照限制之外的资源。

大多数用户不需要担心 Interface。Snap 专为强大的应用程序隔离而设计,并自动进行安全的 Interface 连接。

Interface 最常用于启用快照来访问声音播放或录音、网络和 $HOME 目录。但是,快照需要并提供哪些 Interface,很大程度上取决于快照的类型及其自身的要求。

有关 Interface 的完整列表以及它们允许的访问类型,参考 Supported interfaces 文档。

组成

Interface 提供对资源的访问级别,例如由插槽定义的音频播放。一个或多个卡扣可以通过将相应的插头连接到插槽来访问该资源。

换句话说,插槽是资源的提供者,而插头是资源的消费者,并且一个插槽可以支持多个插头连接。

在捕捉连接 vlc 的输出中(见上文),VLC 使用的每个 Interface 都列在第一列中。然后,插头和插槽列描述了每个 Interface 的连接方式。

例如,音频播放 Interface 将 VLC 的音频播放插头连接到系统的音频播放插槽,以便您可以听到它产生的声音。

默认情况下,应用程序运行在隔离环境中,不允许访问其他资源。

应用

connections

$ snap connections --all
Interface            Plug                           Slot                     Notes
adb-support          scrcpy:adb-support             :adb-support             -
alsa                 ffmpeg:alsa                    :alsa                    manual
appstream-metadata   snap-store:appstream-metadata  :appstream-metadata      -
iaudio-playback      ardour:audio-playback          :audio-playback          -
dbus                 -                              cameractrls:dbus-daemon  -
[...]

$ snap connections vlc
Interface       Plug                   Slot                 Notes
audio-playback  vlc:audio-playback     :audio-playback      -
audio-record    vlc:audio-record       -                    -
camera          vlc:camera             -                    -
desktop         vlc:desktop            :desktop             -
home            vlc:home               :home                -
(...)

$ snap connections // To see all connected interfaces
Interface      Plug                    Slot                 Notes
adb-support    scrcpy:adb-support      :adb-support         -
alsa           ffmpeg:alsa             :alsa                manual
alsa           telegram-desktop:alsa   :alsa                manual
audio-playback ardour:audio-playback   :audio-playback      -
audio-playback chromium:audio-playback :audio-playback      -
(...)

connect

snap connect <snap>:<plug interface>

sudo snap connect vlc:audio-record

snap connect <snap>:<plug interface> <snap>:<slot interface> # 相同 Interface 的 plug/slot 才能互联

改进

WIP

参考

Interface management | Snapcraft documentation
Supported interfaces | Snapcraft documentation