2011-05-16 15 views
6

Me gustaría poder agregar un comentario #! en la parte superior de mi archivo .desktop para que si tiene permisos de ejecución y se ejecuta, realmente se ejecutará. Sin embargo, no sé qué es el intérprete para los archivos .desktop, por lo que no sé qué archivo /usr/bin/ escribir en el hashbang. ¿Algunas ideas?Hashbang para Gnome .desktop archivos


Editar:

Hasta ahora, he hecho un pequeño script bash, execdesktop, que puede ejecutar archivos de escritorio:

`sed -nr 's/Exec=(.*)$/\\1/p' $1` 

Si a continuación, añadir lo siguiente a mi .desktop archivos:

#!/usr/bin/execdesktop 

T cuando corre bien Este método funciona, pero preferiría no tener que usarlo ya que requiere la instalación de execdesktop.

+2

A menos que haya creado un paquete que instala 'execdesktop' utilizando su administrador de paquetes del sistema (' dpkg'? RPM? 'Emerge'? Etc), el script probablemente debería estar en'/usr/local/bin', no en '/usr/bin'. – tripleee

Respuesta

4

Siempre se puede usar xdg-open para su tinglado, como en:

#!/usr/bin/env xdg-open 

Esto no causará ningún problema porque # como titular comentarios también en .desktop archivos.

+0

Interesante, aunque xdg-open parece querer abrir todos mis archivos .desktop en gedit en lugar de abrirlos realmente. – Reinderien

+0

@Reinderien: ¿has asociado los archivos '.desktop' a' gedit'? ¿Qué devuelve 'xdg-mime query default application/x-desktop' return? – ninjalj

+0

@ninjalj Devuelve nada (en blanco). – Reinderien

5

No hay uno; Los archivos .desktop no están destinados a ser ejecutados. Ejecute el ejecutable dado en la clave Exec.

+1

Se ejecutan de una forma u otra. ¿No hay forma de invocar un archivo .desktop desde la línea de comando? Eso no parece muy parecido a un linux ... – Reinderien

+2

NO se ejecutan los archivos de escritorio. La línea dentro de ellos que tiene una línea de comando ejecutable es la que se ejecuta. El resto del archivo es analizado por el entorno de escritorio. –

+1

El problema es que en mi caso el script mencionado en el atributo Exec funciona pero el archivo de escritorio no funciona solo bajo Ubuntu (funciona en Mageia). Es por eso que tiene sentido abrir un archivo de escritorio en la línea de comandos para que ejecute el comando de la misma manera que lo hace el sistema operativo. – gouessej

5

Solo para ser explícito, Ignacio es correcto here en que .desktop archivos no deben ejecutarse directamente. Es posible (como descubriste), pero imprudente.

En otra nota, no use xdg-open. Puede funcionar si hay un tipo de mime correctamente asociado, pero esto no es confiable.

Debe usar gtk-launch. Se utiliza como sigue:

gtk-launch APPLICATION [URI...] 
gtk-launch app-name.desktop 
gtk-launch app-name 

Aquí es la entrada hombre:

NOMBRE

gtk-launch - Launch an application 

SINOPSIS

gtk-launch [APPLICATION] [URI...] 

DESCRIPCIÓN

gtk-launch launches an application using the given name. The 
    application is started with proper startup notification on a default 
    display, unless specified otherwise. 

    gtk-launch takes at least one argument, the name of the application to 
    launch. The name should match application desktop file name, as 
    residing in /usr/share/application, with or without the '.desktop' 
    suffix. 

    If called with more than one argument, the rest of them besides the 
    application name are considered URI locations and are passed as 
    arguments to the launched application. 

Tenga en cuenta que gtk-launch requiere el archivo .desktop para ser instalado (es decir, ubicado en /usr/share/applications o $ HOME/.local/share/applications).

Para evitar esto, podemos utilizar una pequeña función de bash hackish que instala temporalmente el archivo .desktop deseado antes de iniciarlo.La forma "correcta" de instalar un archivo .desktop es a través de desktop-file-install pero voy a ignorar eso.

launch(){ 
    (
    # where you want to install the launcher to 
    appdir=$HOME/.local/share/applications 

    # the template used to install the launcher 
    template=launcher-XXXXXX.desktop 

    # ensure $1 has a .desktop extension, exists, is a normal file, is readable, has nonzero size 
    # optionally use desktop-file-validate for stricter checking 
    # if ! desktop-file-validate "$1" 2>/dev/null; then 
    if [[ ! ($1 = *.desktop && -f $1 && -r $1 && -s $1) ]]; then 
     echo "ERROR: you have not supplied valid .desktop file" >&2 
     exit 1 
    fi 

    # ensure the temporary launcher is deleted upon exit 
    trap 'rm "$launcherfile" 2>/dev/null' EXIT 

    launcherfile=$(mktemp -p "$appdir" "$template") 
    launchername=${launcherfile##*/} 

    if cp "$1" "$launcherfile" 2>/dev/null; then 
     gtk-launch "$launchername" "${@:2}" 
    else 
     echo "ERROR: failed to copy launcher to applications directory" >&2 
     exit 1 
    fi 

    exit 0 
    ) 
} 

Se puede utilizar como tal (y también pasar a lo largo argumentos o URI adicionales si lo desea):

launch ./path/to/shortcut.desktop 

Alternativamente, escribí una respuesta here que describe todas las formas de lanzar .desktop archivos. Ofrece algunas alternativas a gtk-launch que pueden ayudar.

+0

Subida de mérito técnico; pero la respuesta correcta que debe ser aceptada es la de Ignacio Vázquez-Abrams. – tripleee

Cuestiones relacionadas