Desktop entries (Español)
La Especificación de entradas de escritorio de XDG define un estandar a las aplicaciones para integrarse en los menús de aplicaciones de los Entornos de escritorio que implementan la especificación de menús de escritorio de XDG.
Visión general
Cada entrada de escritorio debe tener las claves Type
y Name
Además de opcionalmente definir su apariencia en el menú de aplicaciones.
Hay 3 tipos de entradas de escritorio:
- Application
- (Aplicación), Define como lanzar una aplicación y que tipos MIME soporta (Usados por las Aplicaciones MIME de XDG). Con el Auto arranque de XDG Las aplicaciones pueden iniciar automáticamente si se ubican en directorios específicos. Estas entradas usan la extensión .desktop. Ver #Entradas de aplicación.
- Link
- (Enlace) Define un atajo a un
URL
. Estas entradas usan la extensión .desktop.
- Directory
- (Directorio) Define la apariencia de un submenú en el menú de aplicaciones. Estas entradas usan la extensión .directory.
Las siguientes secciones explicarán cómo las entradas de escritorio se suelen crear y validar.
Uso
Hay programas que soportan el manejo de archivos .desktop, por ejemplo dex:
$ dex /usr/share/applications/firefox.desktop
Entorno de escritorio | Lanzador (Paquete) |
Autoarranque | Aplicación | Enlace |
---|---|---|---|---|
Cinnamon | gio (glib2) |
No | Sí | No |
GNOME | ||||
GNOME Flashback | ||||
MATE | ||||
Deepin | dde-open1 (deepin-api) |
Sí | Parcial | |
Enlightenment | enlightenment_open (enlightenment) |
|||
KDE Plasma | kde-open2 (kde-cli-tools) |
Sí | Sí | Sí |
LXDE | pcmanfm (pcmanfm) |
|||
LXQt | – | |||
Xfce | exo-open3 (exo) |
|||
Independiente | gtk-launch4 (gtk3) |
No | Parcial | No |
dex (dex) |
Sí | Sí | No | |
xdg-open (xdg-utils) |
No | Inestable | No |
- Los archivos .desktop de tipo Application necesitan tener declarado el bit ejecutable para poder se lanzador por dde-open
- Si
KDE_SESSION_VERSION
no está definido, entonces kfmclient de konqueror Se usará como reemplazo. (KDE Plasma deberíá definir esta variable de entorno en cualquier condición normal) - Tambien se intentará usar gio (de glib2)
- Solo si las aplicaciones están en
/usr/share/applications
Entradas de aplicación
Las entradas de escritorio para aplicaciones, o archivos .desktop, suelen ser una combinación de recursos de metainformación y un acceso directo a una aplicación. Estos archivos usualmente se encuentran en /usr/share/applications/
o /usr/local/share/applications/
para aplicaciones instaladas para todo el sistema, o ~/.local/share/applications/
para aplicaciones instaladas para un solo usuario. Las entradas del usuario toman prioridad por encima de las del sistema.
Ejemplo de un archivo
A continuación se mostrará un ejemplo de la estructura de una entrada de escritorio común con comentarios adicionales. Este ejemplo solo está destinado a dar una impresión rapida y no muestra como utilizar todas las claves disponibles. Una lista completa se puedew encontrar en la especificación de Freedesktop.
[Desktop Entry] # El tipo de archivo Type=Application # La versión de la especificación de entradas de escritorio que este archivo utiliza Version=1.0 # El nombre de la aplicación Name=jMemorize # Un comentario que puede/va a ser usado como descripción emergente Comment=Flash card based learning tool # La ruta al directorio en el que la aplicación se ejecutará Path=/opt/jmemorise # El ejecutable de la aplicación con sus posibles argumentos Exec=jmemorize # El nombre o ruta del icono que se va a mostrar Icon=jmemorize # Determina si la aplicación debe ser lanzada en un terminal Terminal=false # Determina las categorias en la que la aplicación debería mostrarse Categories=Education;Languages;Java;
Type
y Name
son requeridos.Name
o Comment
, se puede usar clave[idioma], por ejemplo Comment[es]=Herramienta de aprendizaje basada en tarjetas flash
.Definir claves
Todas las claves reconocidas se pueden encontrar en el sitio web de freedesktop.
Por ejemplo, la clave Type
determina tres tipos de entradas de escritorio: Application (type 1), Link (type 2) y Directory (type 3).
- La clave
Version
no define la versión de la aplicación, si no que define la versión de la especificación de entradas de escritorio que sigue la entrada.
Name
,GenericName
yComment
suelen contener valores redundantes en forma de combinaciones de si mismos, por ejemplo:
Name=Pidgin Internet Messenger GenericName=Internet Messenger
o
Name=NoteCase notes manager Comment=Notes Manager
Esto debería evitarse, ya que solo puede ser confuso para los usuarios. la clave Name
solo debería contener el nombre, o tal vez alguna abreviación/acronimo si es posible.
GenericName
debería indicar el como se llamaría a una aplicación en base a lo que hace esta misma (por ejemplo, Firefox es un "Navegador web").
Comment
pretende contener cualquier información adicional útil.
Validación
Debido a que algunas claves pueden volverse obsoletas con el tiempo, tal vez se deseé validar una entrada de escritorio usando desktop-file-validate(1), que es parte del paquete desktop-file-utils. Para validar, ejecute:
$ desktop-file-validate <ruta a su entrada de escritorio>
Este comando mostrará advertencias y errores de utilidad relacionados con el formato de la entrada.
Instalación
Se puede usar desktop-file-install(1) para instalar una entrada de escritorio en una ruta especifica. Por ejemplo:
$ desktop-file-install --dir=$HOME/.local/share/applications ~/app.desktop
Esto también es util para personalizar entradas de escritorio ya existentes (por ejemplo de /usr/share/applications
) usando las opciones de edición.
Actualizar la base de datos de entradas de escritorio
Normalmente, los cambios de las entradas de escritorios son detectados automaticamente por los entornos de escritorio.
Si no es ese el caso y por ejemplo, se desea forzar la base de datos de ~/.local/share/applications
, ejecute el siguiente comando.
If this is not the case, and you want to forcefully update the desktop entries defined in ~/.local/share/applications
, run the following command:
$ update-desktop-database ~/.local/share/applications
-v
(verbose) para mostrar posibles errores en las entradas de escritorio.iconos
Mire también la Especificación de temas de iconos.
Formatos de imágenes comunes
A continuación se muestra una breve ddescripción general de los formatos de imagenes comúnmente utilizados para los iconos.
Extensión | Nombre completo y/o descripción | Tipo de gráficos | Formato del contenedor | Soporte |
---|---|---|---|---|
.png | Gráficos de Red Portátiles | Ráster | No | Yes |
.svg(z) | Gráficos vectoriales escalables | Vector | No | Yes (optional) |
.xpm | PixMap de X | Ráster | No | Yes (deprecated) |
.gif | Formato de Intercambio de Gráficos | Ráster | No | No |
.ico | Formato de iconos de Microsoft Windows | Ráster | Yes | No |
.icns | Formato de iconos de Apple | Ráster | Yes | No |
Convertir iconos
Si te encuentras con un icono que está en un formato que no es soportado por el estandar de freedesktop.org (como gif
o ico
), puedes usar la herramienta convert (que es parte del paquete imagemagick) para convertirla a un formato soportado/recomendado, por ejemplo:
$ convert <icon name>.gif <icon name>.png
si conviertes una imágenes de un formato de contenedor como ico
, conseguirás todas las imágenes encapsuladas dentro del archivo ico
con el formato de nombre <nombre del icono>-<numero>.png
. Si quieres conocer el tamaño de la imagen, o el numero de imágenes que tiene un contenedor como ico
, Puedes usar la herramienta identify (también parte del paquete imagemagick):
$ 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
Como se puede ver, el archivo ico de ejemplo, aunque su nombre puede sugerir una sola imagen de tamaño 48x48, esta contiene 6 imágenes en distintos tamaños, donde incluso una es incluso mas grande que 48x48 (siendo de 128x128).
Alternativamente, es posible usaricotool (del paquete icoutils) para extraer imágenes png desde un contenedor ico:
$ icotool -x <icon name>.ico
Para extraer imagenes desde un contenedor .icns, es posible usar icns2png (del paquete libicns):
$ icns2png -x <icon name>.icns
Obtener iconos
Aunque los paquetes que ya proveen un archivo .desktop también proveen un icono o un conjunto de iconos, hay algunas excepciones donde algún desarrollador no ha creado un archivo .desktop, sin embargo, puede tener algunos iconos. Un buen punto de partida es buscar iconos en el paquete fuente.
Por ejemplo, es posible buscar archivos por extensión con el comando find, y después usar el comando grep para filtrar con alguna palabra, como el nombre del paquete, "icon", "logo", etc. esto en caso de que haya demasiadas imagenes en el paquete fuente.
$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
Si los desarrolladores de una aplicación no incluyen iconos en sus paquetes fuente, el siguiente paso sería buscar en sus sitios web.
Algunos proyectos, por ejemplo tvbrowserAUR, tienen una pagina de arte/logotipos, donde se suelen encontrar iconos adicionales, Si el proyecto es multiplataforma, existe la posibilidad de que incluso si el paquete para Linux/Unix no contenga un icono, el paquete para Windows si contenga uno, Si el proyecto usa un Sistema de control de versiones como CVS/SVN/etc. y se tiene experiencia con ese sistema, se puede considerar buscar algún icono por ese medio.
Si todas las acciones anteriores fallan, es probable que el proyecto simplemente no tenga algún logo/icono aún.
Ruta de los iconos
El estándar de freedesktop.org especifica en que orden y directorios los programas deberían buscar los iconos:
$HOME/.icons
(Por compatibilidad con versiones anteriores)$XDG_DATA_DIRS/icons
/usr/share/pixmaps
Herramientas
Arronax
Arronax es un programa gráfico para crear y modificar entradas de escritorio para aplicaciones y ubicaciones. Instale el paquete arronaxAUR para usarlo.
Alacarte
alacarte es un editor gráfico de menú para GNOME usando la especificación de menú de freedesktop.org. También permite anular las entradas de escritorio.
jdDesktopEntryEdit
jddesktopentryeditAUR es un programa gráfico que usa Qt y permite editar entradas de escritorio.
MenuLibre
menulibreAUR Es un programa gráfico que usa GTK y ofrece características modernas en una interfaz limpia y fácil de usar.
gendesk
gendesk comenzó como una herramienta específica de Arch Linux para generar archivos .desktop obteniendo la información necesaria directamente de los archivos PKGBUILD. Ahora es una herramienta general que acepta argumentos de línea de comandos.
Los iconos se pueden descargar automaticamente desde openiconlibrary, en caso de que estén disponibles. (La fuente de los iconos es configurable).
Como usarlo
- Añada
gendesk
a makedepends
- Inicie la función
prepare()
con:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
- Alternativamente, si un icono ya está disponible ($pkgname.png, por ejemplo). El argumento
-n
sirve para no descargar ningún icono o usar un icono por defecto. Por ejemplo:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
$srcdir/$pkgname.desktop
será creado y puede ser instalado en la funciónpackage()
con:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
- El icono puede ser instalado con:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
- Use
--name='Program Name'
para elegir un nombre para la entrada del menú.
- Use
--exec='/opt/some_app/elf --some-arg --other-arg'
para configurar el campoexec
.
- Revise la pagina del proyecto gendesk para mas información.
lsdesktopf
lsdesktopfAUR puede listar los archivos ".desktop" disponibles o buscar su contenido.
$ lsdesktopf $ lsdesktopf --list $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
También puede realizar buscas relacionadas con los tipos MIME. Revise XDG MIME Applications#lsdesktopf
fbrokendesktop
El script fbrokendesktopAUR detecta claves Exec
rotas, con valores que apuntan a rutas que no existen, si se ejecuta sin argumentos este utiliza directorios preestablecidos en la matriz DskPath
. Solo muestra archivos .desktop rotos con la ruta completa y el nombre del archivo que falta.
Ejemplos:
$ fbrokendesktop $ fbrokendesktop /usr $ fbrokendesktop /usr/share/xsessions/icewm.desktop
Consejos y trucos
Modificar archivos de escritorio
Para archivos .desktop de todo el sistema (por ejemplo, los instalados desde un paquete), primero copie el archivo .desktop relevante (por ejemplo, de /usr/share/applications/
) a $XDG_DATA_HOME/applications/
(por ejemplo, ~/.local/share/applications/
). Esto evita que sus cambios se sobrescriban cuando el paquete se actualiza durante el actualizaciones del sistema.
Los archivos locales .desktop específicos del usuario deberían tener prioridad automáticamente sobre los archivos de todo el sistema. Ahora puede modificar el archivo .desktop específico del usuario local según sea necesario.
$XDG_CONFIG_HOME/autostart
, acorde al autoarranque de XDG. Si desea modificar el comportamiento solo durante el inicio automático, proceda a editar este archivo. En caso contrario, si desea modificar el comportamiento en todas las circunstancias, deberá:
- Mover el archivo de
$XDG_CONFIG_HOME/autostart/
a$XDG_DATA_HOME/applications
. - Usando
ls -l
, asegúrese de que esta entrada del escritorio sea un archivo normal que pueda editar y no un enlace a la ubicación del sistema. Si es un enlace, reemplácelo con una copia del original como se describe arriba. - Haga un enlace simbólico al directorio de la aplicación del usuario (los directorios XDG predeterminados se sustituyen por conveniencia):
ln -s ~/.local/share/applications/desktop_entry ~/.config/autostart/
Ahora, el archivo en su lanzador de aplicaciones permanecerá igual que el archivo que está en el autoarranque.
Modificar variables de entorno
para declarar una variable de entorno, en el archivo .desktop, edite la clave {ic|1=Exec=}} para usar el comando env(1) antes de ejecutar el comando objetivo. Por ejemplo, con la linea original comentada:
~/.local/share/applications/abiword.desktop
... # Exec=abiword %U Exec=env LANG=he_IL.UTF-8 abiword %U ...
Tambien remueva DBusActivatable=true
(o declarelo como false
), si está presente la clave Exec
será ignorada.
Modificar los argumentos de la linea de comandos
Para cambiar o agregar argumentos a la linea de comandos, edite la clave Exec=
para agregar los argumentos deseados. Por ejemplo, con la linea original comentada:
~/.local/share/applications/steam.desktop
... # Exec=/usr/bin/steam-runtime %U Exec=/usr/bin/steam-runtime -no-browser %U ...
Tambien remueva DBusActivatable=true
(o declarelo como false
), si está presente la clave Exec
será ignorada.
Esconder entradas de escritorio
La visibilidad de la entrada de escritorio puede ser controlada de múltiples maneras. Revise la Especificación de entradas de escritorio para mas información.
Añada una de las siguientes lineas a su archivo .desktop:
- Todos los entornos de escritorio, escoja una (o ambas) de las siguientes formas:
- Añada la linea
NoDisplay=true
para las aplicaciones que no quiera que sean vistas en los menús de aplicaciones. - Add the line
Hidden=true
para aplicaciones que considere borradas y no quiera mostrar en los menús de aplicaciones.
- Añada la linea
- Entorno de escritorio Especificado, escoja una de las siguientes opciones, donde
desktop_names
es una lista de entornos de escritorios delimitados por punto y coma (Por ejemplo.GNOME
,GNOME;Xfce;KDE;
):- Añada la linea
NotShowIn=desktop_names
para esconder la entrada solo en los entornos de escritorio especificados. - Añada la linea
OnlyShowIn=desktop_names
para mostrar la entrada solo en los entornos de escritorio especificados.
- Añada la linea