Desktop entries (Português)
A especificação XDG Desktop Entry define um padrão para aplicativos se integrarem em menus de aplicativos de ambientes de desktop que implementam a especificação XDG Desktop Menu.
Básico
Cada entrada de destkop deve ter uma chave Type
e Name
e, opcionalmente, pode definir sua aparência no menu do aplicativo.
Os três tipos disponíveis são:
- Application
- Define como iniciar um aplicativo e quais tipos MIME são suportados (usados por XDG MIME Applications). Com XDG Autostart, as entradas do aplicativo podem ser inicializadas automaticamente, colocando-as em diretórios específicos. As entradas do aplicativo usam a extensão de arquivo
.desktop
. Consulte #Entrada de aplicativos.
- Link
- Define um atalho para uma
URL
. As entradas do link usam a extensão de arquivo.desktop
.
- Directory
- Define a aparência de um submenu no menu do aplicativo. As entradas do diretório usam a extensão de arquivo
.directory
.
As seções a seguir explicam aproximadamente como elas são criadas e validadas.
Entrada de aplicativos
As entradas de desktop para aplicativos, ou arquivos .desktop
, geralmente são uma combinação de recursos de meta informações e um atalho de um aplicativo. Esses arquivos geralmente residem em /usr/share/applications/
ou /usr/local/share/applications/
para aplicativos instalados em todo o sistema ou ~/.local/share/applications/
para aplicativos específicos do usuário. As entradas do usuário têm precedência sobre as entradas do sistema.
Exemplo de arquivo
A seguir, é apresentado um exemplo de sua estrutura com comentários adicionais. O exemplo serve apenas para dar uma impressão rápida e não mostra como utilizar todas as chaves de entrada possíveis. A lista completa de chaves pode ser encontrada na especificação da freedesktop.
[Desktop Entry] # O tipo como listado acima Type=Application # A versão da especificação de entrada de desktop com a qual este arquivo está em conformidade Version=1.0 # O nome do aplicativo Name=jMemorize # Um comentário que pode/será usado como uma dica da ferramenta Comment=Flash card based learning tool # O caminho para a pasta na qual o executável é executado Path=/opt/jmemorise # O executável do aplicativo, possivelmente com argumentos Exec=jmemorize # O nome do ícone que será usado para exibir esta entrada Icon=jmemorize # Descreve se este aplicativo precisa ser executado em um terminal ou não Terminal=false # Descreve as categorias nas quais esta entrada deve ser mostrada Categories=Education;Languages;Java;
Type
e Name
são obrigatórios.Definição das chaves
Todas as entradas reconhecidas podem ser encontradas no site da freedesktop.
Por exemplo, a tecla Type
define três tipos de entradas de destkop: Application (tipo 1), Link (tipo 2) e Directory (tipo 3).
- A chave
Version
não representa a versão do aplicativo, mas a versão da especificação de entrada da área de desktop com a qual esse arquivo está em conformidade.
-
Name
,GenericName
eComment
geralmente contêm valores redundantes na forma de combinações deles, como:
Name=Pidgin Internet Messenger GenericName=Internet Messenger
ou
Name=NoteCase notes manager Comment=Notes Manager
Isso deve ser evitado, pois pode causar confusão para os usuários. A chave Name
deve conter apenas o nome, ou talvez uma abreviação/sigla, se disponível.
-
GenericName
deve indicar o que você geralmente chamaria de aplicativo que faz o que esse aplicativo específico oferece (por exemplo, o Firefox é um "Navegador da Web"). -
Comment
destina-se a conter qualquer informação adicional útil.
Validação
Como algumas chaves foram descontinuadas com o tempo, convém validar as entradas de desktop usando o desktop-file-validate(1), que faz parte do pacote desktop-file-utils. Para validar, execute:
$ desktop-file-validate <seu arquivo desktop>
Isso fornecerá avisos e mensagens de erro muito detalhados e úteis.
Instalação
Use desktop-file-install(1) para instalar o arquivo desktop no diretório alvo. Por exemplo:
$ desktop-file-install --dir=~/.local/share/applications ~/app.desktop
Atualizar banco de dados de entradas desktop
Para que as entradas da área de trabalho definidas em ~/.local/share/applications
funcionem, execute o seguinte comando:
$ update-desktop-database ~/.local/share/applications
Ícones
Veja também a Icon Theme Specification.
Formatos de imagens comuns
Here is a short overview of image formats commonly used for icons.
Extension | Full Name and/or Description | Graphics Type | Container Format | Supported |
---|---|---|---|---|
.png | Portable Network Graphics | Raster | Não | Sim |
.svg(z) | Scalable Vector Graphics | Vector | Não | Yes (optional) |
.xpm | X PixMap | Raster | Não | Yes (deprecated) |
.gif | Graphics Interchange Format | Raster | Não | Não |
.ico | MS Windows Icon Format | Raster | Sim | Não |
.icns | Apple Icon Image | Raster | Sim | Não |
Convertendo ícones
If you stumble across an icon which is in a format that is not supported by the freedesktop.org standard (like gif
or ico
), you can use the convert tool (which is part of the imagemagick package) to convert it to a supported/recommended format, e.g.:
$ convert <icon name>.gif <icon name>.png
If you convert from a container format like ico
, you will get all images that were encapsulated in the ico
file in the form <icon name>-<number>.png
. If you want to know the size of the image, or the number of images in a container file like ico
you can use the identify tool (also part of the imagemagick package):
$ identify /usr/share/vlc/vlc48x48.ico
/usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb /usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
As you can see, the example ico file, although its name might suggest a single image of size 48x48, contains no less than 6 different sizes, of which one is even greater than 48x48, namely 128x128.
Alternatively, you can use icotool (from icoutils) to extract png images from ico container:
$ icotool -x <icon name>.ico
For extracting images from .icns container, you can use icns2png (provided by libicns):
$ icns2png -x <icon name>.icns
Obtendo ícones
Although packages that already ship with a .desktop file most certainly contain an icon or a set of icons, there is sometimes the case when a developer has not created a .desktop file, but may ship icons, nonetheless. So a good start is to look for icons in the source package. You can i.e. first filter for the extension with find and then use grep to filter further for certain buzzwords like the package name, "icon", "logo", etc, if there are quite a lot of images in the source package.
$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
If the developers of an application do not include icons in their source packages, the next step would be to search on their web sites. Some projects, like i.e. tvbrowser have an artwork/logo page where additional icons may be found. If a project is multi-platform, there may be the case that even if the linux/unix package does not come with an icon, the Windows package might provide one. If the project uses a Version control system like CVS/SVN/etc. and you have some experience with it, you also might consider browsing it for icons. If everything fails, the project might simply have no icon/logo yet.
Caminho de ícones
The freedesktop.org standard specifies in which order and directories programs should look for icons:
-
$HOME/.icons
(for backwards compatibility) $XDG_DATA_DIRS/icons
/usr/share/pixmaps
Ferramentas
gendesk
gendesk started as an Arch Linux-specific tool for generating .desktop files by fetching the needed information directly from PKGBUILD files. Now it is a general tool that takes command-line arguments.
Icons can be automatically downloaded from openiconlibrary, if available. (The source for icons is configurable).
Como usar
- Add
gendesk
to makedepends
- Start the
prepare()
function with:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
- Alternatively, if an icon is already provided ($pkgname.png, for instance). The
-n
flag is for not downloading an icon or using the default icon. Example:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
-
$srcdir/$pkgname.desktop
will be created and can be installed in thepackage()
function with:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
- The icon can be installed with:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
- Use
--name='Program Name'
for choosing a name for the menu entry.
- Use
--exec='/opt/some_app/elf --some-arg --other-arg'
for setting the exec field.
- See the gendesk project for more information.
lsdesktopf
lsdesktopfAUR can list available .desktop files or search their contents.
$ lsdesktopf $ lsdesktopf --list $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
It can also perform MIME-type-related searches. See XDG MIME Applications#lsdesktopf.
fbrokendesktop
The fbrokendesktopAUR Bash script detects broken Exec
values pointing to non-existent paths. Without any arguments it uses preset directories in the DskPath
array. It shows only broken .desktop with full path and filename that is missing.
Examples
$ fbrokendesktop $ fbrokendesktop /usr $ fbrokendesktop /usr/share/xsessions/icewm.desktop
Dicas e truques
Executar um arquivo desktop do terminal
Install the dex package and run dex /path/to/application.desktop
.
Ocultar entradas de desktop
Firstly, copy the desktop entry file in question to ~/.local/share/applications
to avoid your changes being overwritten.
Then, to hide the entry in all environments, open the desktop entry file in a text editor and add the following line: NoDisplay=true
.
To hide the entry in a specific desktop, add the following line to the desktop entry file: NotShowIn=desktop-name
where desktop-name can be option such as GNOME, Xfce, KDE etc. A desktop entry can be hidden in more than desktop at once - simply separate the desktop names with a semi-colon.
Modificar variáveis de ambiente
To set environment variables, copy the .desktop file from /usr/share/applications/
to $XDG_DATA_HOME/
(~/.local/share/applications/
) and edit the Exec=
command line by prepending env. For example:
~/.local/share/applications/abiword.desktop
Exec=env LANG=he_IL.UTF-8 abiword %U
$ sed 's|^Exec=|Exec=env LANG=he_IL.UTF-8 |g' /usr/share/applications/abiword.desktop > ~/.local/share/applications/abiword.desktop