140 votos

Ejecución de una .archivo de escritorio en la terminal

De lo que he entendido, .desktop archivos son accesos directos que permiten la configuración de la aplicación para ser personalizado. Por ejemplo, tengo un montón de ellos en mi /usr/share/applications/ carpeta.

Si abro esa carpeta en nautilus, puedo ejecutar estas aplicaciones simplemente haciendo doble clic en su archivo asociado, por ejemplo, haga doble clic en firefox.desktop ejecuta Firefox. Sin embargo, no puedo encontrar una manera de hacer la misma cosa a través de terminal.

Si hago gnome-open foo.desktop simplemente abre el foo.desktop como un archivo de texto. Si puedo hacerlo ejecutable y, a continuación, ejecútelo en bash simplemente no (lo que se espera, claramente no es un script de bash).
EDIT: Haciendo exec /fullpath/foo.desktop me da un Permission denied mensaje, incluso si cambio de titularidad a mí mismo. Si puedo hacer ejecutable y hacer el mismo comando, la pestaña de terminal estoy usando simplemente se cierra (supongo que se bloquea). Por último, si me lo sudo exec /fullpath/foo.desktop, me sale un error reporting sudo: exec: command not found.

Esa es mi pregunta, ¿como puedo ejecutar un foo.desktop archivo desde la terminal?

85voto

Brett Veenstra Puntos 715

La respuesta debe ser

xdg-open program_name.desktop

Pero debido a un bug ya no funciona.

54voto

ESV Puntos 4591

El comando que se ejecuta está contenida en el archivo de escritorio, precedidos por Exec= de modo que se podría extraer y ejecutar:

`grep '^Exec' filename.desktop | tail -1 | sed 's/^Exec=//' | sed 's/%.//'` &

Para acabar con eso

grep  '^Exec' filename.desktop  - finds the line which starts with Exec
| tail -1                       - only use the last line, in case there are multiple
| sed 's/^Exec=//'              - removes the Exec from the start of the line
| sed 's/%.//'                  - removes any arguments - %u, %f etc
`...`                           - means run the result of the command run here
&                               - at the end means run it in the background

Usted podría poner esto en un archivo, digamos ~/bin/deskopen con el contenido

#!/bin/sh
`grep '^Exec' $1 | tail -1 | sed 's/^Exec=//' | sed 's/%.//'` &

Después de hacerla ejecutable

chmod +x ~/bin/deskopen

Y entonces se podría hacer, por ejemplo, la

deskopen /usr/share/applications/ubuntu-about.desktop

Los argumentos (%u, %F etc) están detallados en http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-1.0.html#exec-variables - ninguno de ellos son relevantes para el lanzamiento de la línea de comandos.

38voto

Carlo Pellegrini Puntos 321

A partir de hoy (12.10) el fallo sigue estando presente. Es, de hecho, dependiendo de cómo gvfs-open (llamados por xdg-open) de las obras.

Aún así, he conseguido una rápida solución (el robo de la inspiración de la nautilus código fuente). Es un poco complicado, pero funciona a la perfección en Ubuntu 12.10, la adición de un significativo icono (no más ?) en el lanzador de Unity.

En primer lugar, me escribió una secuencia de comandos de python usando Gio y se coloca salvado ~/bin/run-desktop :

#!/usr/bin/python

from gi.repository import Gio
import sys 

def main(myname, desktop, *uris):
    launcher = Gio.DesktopAppInfo.new_from_filename(desktop)
    launcher.launch_uris(uris, None)

if __name__ == "__main__":
    main(*sys.argv)

La secuencia de comandos debe tener el ejecutable de permiso, así que me encontré con esto en una terminal:

chmod +x ~/bin/run-desktop

A continuación, he creado la relativa .desktop entrada en ~/.local/share/applications/run-desktop.desktop:

[Desktop Entry]
Version=1.0
Name=run-desktop
Exec=run-desktop %U
MimeType=application/x-desktop
Terminal=false
Type=Application

Por último, me asociados de la entrada como el controlador predeterminado en ~/.local/share/applications/mimeapps.list bajo [Default Applications] sección de :

[Default Applications]
....
application/x-desktop=run-desktop.desktop

Ahora:

  • xdg-open algo.escritorio funciona como se esperaba
  • #!/usr/bin/xdg-open hashbang en la parte superior de un archivo ejecutable de entrada de escritorio funciona demasiado

Será inútil el trabajo cuando gvfs-open solucionará el error, pero mientras tanto...

8voto

pabst Puntos 61

Anexo a Hamish la respuesta.

Dada la deskopen secuencia de comandos, puede utilizar una referencia a él como el shebang línea en una .escritorio archivo, ya que el carácter de comentario es todavía #. Es decir, poner esto como la primera línea de la .escritorio archivo:

#!/usr/bin/env deskopen

Luego de una flag .escritorio archivo como ejecutable (por ejemplo chmod +x whatever.desktop) y, a continuación, usted puede

path/to/whatever.desktop

y voilà -- se abrirá La aplicación! (Completa con el icono de archivo que se especifica, aunque no tengo ni idea de cómo.)

Ahora, si usted también quiere deskopen a pasar a través de parámetros de línea de comandos, puede utilizar esta ligeramente modificada de la versión:

#!/bin/sh
desktop_file=$1
shift
`grep '^Exec' "${desktop_file}" | sed 's/^Exec=//' | sed 's/%.//'` "$@" &

Como un aparte, he intentado utilizar "#{@:2}" en lugar de shifting, pero se mantuvo darme 'mal ' sustitución'...

6voto

dukedave Puntos 3496

Actualmente, no existe una aplicación que hace lo que usted describe en los archivos de Ubuntu. Hay un par de los esfuerzos en curso para crear una solución general para proporcionar la integración de los entornos de escritorio (como openbox) que no son compatibles con estos XDG especificaciones.

Arch Linux está trabajando en una aplicación de xdg-autostart basado en python-xdg bibliotecas. De lo que puedo encontrar, esta parece que aún no completo, pero tiene algunos informes de éxito.

También existe una implementación en C++ de xdg-autostart en gitorious (http://gitorious.org/xdg-autostart/), que probablemente se beneficiarían de un uso más amplio.

Si bien la solución que funciona para usted, por favor considerar la presentación de los trabajos necesarios para la inclusión en Debian o Ubuntu.

A utilizar cualquiera de las herramientas con openstart, que llamaríamos en /etc/xdg/openbox/autostart.sh (si estoy leyendo el openbox documentación correctamente). Si esto no funciona, probablemente, usted puede llamar en cualquier de la sesión openbox scripts de inicialización.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: