我们知道在一个snap包里,我们可以定义任何数量的app.针对desktop应用来说,那么我们如何使得我们的每个应用都有自己的icon及desktop文件呢?在今天的文章中,我们将介绍如何实现这个.特别注意的是,这个新的feature只有在snapcraft 2.25+版本中才可以有.
首先,我们来看一下我已经做好的一个项目:
https://github.com/liu-xiao-guo/helloworld-desktop
整个应用的文件架构如下:
liuxg@liuxg:~/snappy/desktop/helloworld-desktop$ tree -L 3
.
├── bin
│ ├── createfile
│ ├── createfiletohome
│ ├── echo
│ ├── env
│ ├── evil
│ ├── sh
│ └── writetocommon
├── echo.desktop
├── README.md
├── setup
│ └── gui
│ ├── echo.png
│ ├── helloworld.desktop
│ └── helloworld.png
└── snapcraft.yaml
从上面我们可以看出来,我们已经有一个叫做setup/gui的目录.它里面包含了一个叫做helloworld.desktop的文件:
helloworld.desktop
[Desktop Entry]
Type=Application
Name=Hello
GenericName=Hello world
Comment=A hello world Ubuntu Desktop
Keywords=hello;world;
Exec=hello-xiaoguo.env
Icon=${SNAP}/meta/gui/helloworld.png
Terminal=true
X-Ubuntu-Touch=false
X-Ubuntu-Default-Department-ID=accessories
X-Ubuntu-Splash-Color=#F5F5F5
StartupNotify=true
在这里它指定了这个应用的icon及执行的脚本hello-xiaoguo.env.
我们再来看看我们的snapcraft.yaml文件:
snapcraft.yaml
name: hello-xiaoguo
version: "1.0"
summary: The 'hello-world' of snaps
description: |
This is a simple snap example that includes a few interesting binaries
to demonstrate snaps and their confinement.
* hello-world.env - dump the env of commands run inside app sandbox
* hello-world.evil - show how snappy sandboxes binaries
* hello-world.sh - enter interactive shell that runs in app sandbox
* hello-world - simply output text
grade: stable
confinement: strict
type: app #it can be gadget or framework
apps:
env:
command: bin/env
evil:
command: bin/evil
sh:
command: bin/sh
hello-world:
command: bin/echo
desktop: usr/share/applications/echo.desktop
createfile:
command: bin/createfile
createfiletohome:
command: bin/createfiletohome
writetocommon:
command: bin/writetocommon
plugs:
home:
interface: home
parts:
hello:
plugin: dump
source: .
organize:
echo.desktop: usr/share/applications/echo.desktop
在这个文件中,我们也定义了其它的应用,比如hello-world.那么我们如何为它也定义自己的desktop文件呢?答案是:
hello-world:
command: bin/echo
desktop: usr/share/applications/echo.desktop
我们可以在它的command下面指定一个属于自己的desktop文件.在这里我们的echo.desktop文件如下:
echo.desktop
[Desktop Entry]
Type=Application
Name=Echo
GenericName=Hello world
Comment=A hello world Ubuntu Desktop
Keywords=hello;world;
Exec=hello-xiaoguo.hello-world
Icon=${SNAP}/meta/gui/echo.png
Terminal=true
X-Ubuntu-Touch=false
X-Ubuntu-Default-Department-ID=accessories
X-Ubuntu-Splash-Color=#F5F5F5
StartupNotify=true
在这里它指定了自己的执行文件及一个属于自己的icon.我们打包我们的应用,并安装.在Ubuntu Desktop的dash中,我们可以看到:
运行"Hello World"应用显示:
运行我们的"echo"应用: