A estrutura do menu é feita para permitir que qualquer programa, feito por mim ou por você, seja incluído no menu do sistema. Para isso a informação sobre cada item, seja ele um submenu ou uma aplicação, é armazenada em um arquivo *.directory e *.desktop, respectivamente. Então um outro arquivo XML(*.menu) define como os itens do menu serão organizados, layout, inclusão de itens, submenus e menus adicionais.
Diretórios:
/etc/xdg/menus/
Contém os arquivos XML necessários para a estruturação do menu.
/etc/xdg/menus/applications-merged/
Por convenção é o diretório para incrementar menus feitos por
/usr/share/applications/
Contém os arquivos *.desktop que armazenam as informações de cada aplicativo do menu.
/usr/share/desktop-directories/
Contém os arquivos *.directory que armazenam as informações dos menus e submenus
Arquivos:
Cada item do menu possui um arquivo para suas definições, esses arquivos são chamados de "desktop entry", ou entrada de desktop. Por exemplo, o submenu Internet no menu do KDE, é referenciado pelo arquivo /usr/share/desktop-directories/kde-internet.directory.
[Desktop Entry]
Encoding=UTF-8
Type=Directory
Name=Internet
Name[pt_BR]=Programas para Internet
Icon=package_network
Nesse arquivo existem os campos que definem as desktop entry, as chaves fazem referência a localidade, ou seja, nesse exemplo o nome do menu Internet será "Programas para Internet" no Brasil e Internet para as outras localidades.
Os campos Name e Type são essenciais para as entradas tanto de .directory e .desktop.
Type define se o arquivo será para uma Aplicação(Type=Application), submenu ou diretório(Type=Directory) ou link(Type=Link).
Outros campos:
- Version= Versão
- GenericName[LOCALIDADE]= Nome Genérico
- Comment[LOCALIDADE]= Comentários
- OnlyShowIn=KDE;XFCE;
- NotShowIn=GNOME;
Os campos OnlyShowIn e NotShowIn devem ser seguidos de lista dos ambientes separados por ponto-e-vírgula.
- NoDisplay=true / false;
- Icon=caminho_do_arquivo;
- Hidden=true / false;
- Exec= programa a ser executado, possível adicionar parâmetros;
- Path= caminho do programa, só para Type=Application;
- Category= classificação dos itens de menu;
- MimeType= os tipos de arquivos suportados pela aplicação;
- URL= URL para Type=Link.
O campo Category é uma lista de palavras separadas por ponto-e-vírgula que classifica cada item de menu. Por exemplo, uma entrada para um player de música baseado na biblioteca QT poderia ter o campo Category da seguinte forma:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=Player XYZ
Icon=/usr/share/icons/playerxyz.png
NotShowIn=KDE;
Category=Qt;AudioVideo;Player
Provavelmente esse item será alocado no campo "Som & Video".
Lista das principais categorias:
AudioVideo
Audio
Video
Development
Education
Game
Graphics
Network
Office
Settings
System
Utility
Lista de chaves das entradas de desktop:
Lista de todas as categorias: