Lihuen
RSSRSS AtomAtom

Especificación de menús de freedesktop.org

Introducción

Este "estándar" define como construir una jerarquía de aplicaciones para ser mostrada como menú. Siguiendo este estándar es muy sencillo para los desarrolladores de software agregar sus aplicaciones al menú del sistema, así como hace que el administrador del sistema pueda editar la estructura del menú (y agregar o quitar aplicaciones) de forma que esto se refleje en el menú de todos los usuarios del sistema.

En este documento damos una explicación práctica de como podemos utilizar este estándar para armar una estructura de menú en Gnome.

El "estándar" puede ser encontrado en freedesktop.org

Organización en el filesystem

freedesktop.org define una serie de directorios entre los cuales distribuyen archivos ".menu" con formato XML en los cuales se define la jerarquía del menú, archivos ".directory" en texto plano y divididos en "grupos", en los cuales se específica el nombre y descripción (en varios idiomas), y el icono de cada nodo no terminal de la jerarquía (léase directorio). Por último se pueden encontrar archivos ".desktop" de formato y funcionalidad similar a los ".directory" con la diferencia de que los ".desktop" describen a los nodos terminales de la jerarquía (léase aplicaciones). Para separarse de la implementación, el estándar no establece el path absoluto para encontrar los archivos sino que establece una serie de variables de entorno que deberían contener el path definido por la implementación, estas variables son:

  • $XDG_CONFIG_DIRS -> Su valor debe ser el directorio que contenga otro directorio llamado menus con los archivos ".menu" (en Lihuen $XDG_CONFIG_DIRS == /etc/xdg)
  • $XDG_DATA_DIRS -> Su valor debe ser el directorio que contenga otro directorio llamado applications con los archivos ".desktop" y un directorio llamado desktop-directories con los archivos ".directory"(en Lihuen $XDG_DATA_DIRS == /usr/share)

Sintáxis de los archivos .desktop y .directory

Estos archivos están divididos en "grupos" cuyas cabeceras se escriben entre '[' y ']', un grupo es obligatorio y tienen la cabecera [Desktop Entry], dentro de él se definen los atributos de cada nodo de la jerarquía (aplicaciones y directorios), estos atributos se escriben de la forma Clave=Valor un ejemplo de un nodo terminal es:

1 [Desktop Entry] 
2 Name=PDF viewer 
3 Name[es]=Visor PDF 
4 Comment=The xpdf viewer 
5 Comment[es]=El visor xpdf 
6 Exec=/usr/bin/xpdf 
7 TryExec=/usr/bin/xpdf 
8 Icon=xpdf.png 

(los números a la izquierda no van, son sólo para hacer referencia a cada linea) Explicación: 1 La cabecera del "grupo". 2 El nombre por defecto de la aplicación (es el nombre que se mostrará si no configuramos el idioma de nuestro sistema). 3 El nombre en español de la aplicación(es el nombre que se mostrará si el idioma de nuestro sistema es el español). 4 El comentario por defecto de la aplicación (se mostrará, normalmente, al posar el cursor sobre el nodo si no configuramos el idioma de nuestro sistema). 5 El comentario en español de la aplicación (se mostrará, normalmente, al posar el cursor sobre el nodo si el idioma de nuestro sistema es el español). 6 El programa a ejecutar (se puede evitar el path si el directorio que lo contiene se encuentra en la variable de entorno $PATH). 7 Se verifica la existencia de este archivo, si no existe esta entrada del menú no se mostrará. 8 El icono a mostrar, se lo busca en una serie de directorios por defecto que incluyen /usr/share/pixmaps y el directorio del tema de escritorio actual.

un ejemplo de un nodo no terminal es:

1 [Desktop Entry] 
2 Name=Office 
3 Name[es]=Oficina 
4 Type=Directory 
5 Icon=office.png

(los números a la izquierda lo van, son sólo para hacer referencia a cada linea) Explicación: 1 La cabecera del "grupo". 2 El nombre por defecto de la aplicación (es el nombre que se mostrará si no configuramos el idioma de nuestro sistema). 3 El nombre en español de la aplicación (es el nombre que se mostrará si el idioma de nuestro sistema es el español). 4 Tipo de archivo 5 El icono a mostrar, se lo busca en una serie de directorios por defecto que incluyen /usr/share/pixmaps y el directorio del tema de escritorio actual. Sintáxis de los archivos .menu: Los archivos ".menu" están en formato XML organizados en forma jerárquica. La mejor forma de mostrar como se construye un archivo ".menu" es con un ejemplo:

1 <!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" 
2 "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd"> 
3 
4 <Menu> 
5 <Name>KDE</Name> 
6 <Directory>kde-main.directory</Directory> 
7 
8  
9 <DefaultAppDirs/> 
10 <DefaultDirectoryDirs/> 
11 
12  
13 <Menu> 
14 <Name>Debian</Name> 
15 <Directory>debian.directory</Directory> 
16 <MergeFile>debian-menu.menu</MergeFile> 
17 </Menu> 
18 
19 <Menu> 
20 <Name>Applications</Name> 
21 <Directory>kde-unknown.directory</Directory> 
22 
23 <Include> 
24 <Not> 
25  
26 <And> 
27 <Category>Core</Category> 
28 <Not><Category>KDE</Category></Not> 
29 </And> 
30  
31 <Category>X-SuSE-YaST</Category> 
32 </Not> 
33 </Include> 
34 </Menu> 
35</Menu> 

Explicación:

Lineas Descripción
1 - 2 Cabecera XML
4 Elemento menú, se pueden anidar pero debe un solo elemento raíz
9 Incluir este elemento hace que se busquen los archivos ".desktop" en los directorios por defecto (en la práctica es obligatorio).
10 Incluir este elemento hace que se busquen los archivos ".directory" en los directorios por defecto (en la práctica es obligatorio).
13 - 17 Dentro del elemento <MENU> se definen las características del que será un submenu del menú principal.
14 Nombre del submenu
15 Archivo .directory con el nombre, icono y descripción que se mostrará en el menú
16 Esta entrada hace que el archivo debian-menu.menu se incluya dentro del archivo actual.
23-33 son X-SuSE-YaST ni tampoco los que pertenezcan a la categoría Core y no |pertenezcan a KDE

Generar un menú básico Para generar un menú básico en Lihuen, es necesario seguir los siguientes pasos:

1) Crear un archivo /etc/xdg/menus/gnome-applications.menu siguiendo las especificaciones de freedesktop.org.

Por ejemplo:

<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" 
"http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd"> 

<Menu> 
 <Name>Applications</Name> 
 <Directory>Applications.directory</Directory> 
 
 <LegacyDir>/usr/share/gnome/apps</LegacyDir> 
 <DefaultAppDirs/> 
 <DefaultDirectoryDirs/> 

 <Menu> 
  <Name>Lihuen</Name> 
  <Directory>Lihuen.directory</Directory> 
  <Include> 
   <And> 
    <Category>Lihuen</Category> 
    <Not> 
     <Category>System</Category> 
    </Not> 
   </And> 
  </Include> 
 </Menu> 
</Menu>


2) Crear un archivo /usr/share/desktop-directories/Lihuen.directory con sintáxis correcta.

[Desktop Entry] 
Name=Lihuen 
Name[es]=Lihuen 
Comment=Main menu 
Comment[es]=Menú principal 
Icon=gnome-computer 
Type=Directory 
Encoding=UTF-8 

3) Editar los archivos .desktop que querramos que aparezcan en nuestro menú para que tengan la categoría Lihuen, pero no tengan la categoría System:

[Desktop Entry] 
Version=1.0 
Encoding=UTF-8 
Name=Sin nombre 
Type=Application 
Exec=wrappergksu /usr/sbin/actualizate 
TryExec=/usr/sbin/actualizate 
Icon=/usr/share/pixmaps/lihuen/logo-lihuen.xpm 
X-GNOME-DocPath= 
Terminal=false 
Name[es_ES]=Actualizar Lihuen 
GenericName[es_ES]=Actualizar Lihuen 
Comment[es_ES]=Ejecútalo de vez en cuando para tener tu Lihuen siempre actualizado 
Categories=Lihuen 
GenericName[es_ES@euro]=Actualizar Lihuen