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.
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