Desktop entries (Português)

From ArchWiki

Tango-preferences-desktop-locale.pngEste artigo ou esta seção precisa de tradução.Tango-preferences-desktop-locale.png

Notas: Este artigo está sendo traduzido. (Discuta em Talk: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;
Nota: Apenas 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 e Comment 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.

Support for image formats for icons as specified by the freedesktop.org standard.
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

Merge-arrows-2.pngThis article or section is a candidate for merging with ImageMagick#Usage.Merge-arrows-2.png

Notes: Belongs there. (Discuss in Talk:Desktop entries (Português))

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:

  1. $HOME/.icons (for backwards compatibility)
  2. $XDG_DATA_DIRS/icons
  3. /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 the package() 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.

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
Dica: Instead of manually copying and editing the file, both actions can be done with sed. For example:
$ sed 's|^Exec=|Exec=env LANG=he_IL.UTF-8 |g' /usr/share/applications/abiword.desktop > ~/.local/share/applications/abiword.desktop

Veja também