¿Cómo puedo configurar la variable 'Ruta' en un archivo .desktop para que sea relativa a la ubicación donde se encuentra el archivo de escritorio?

11

Quiero establecer la variable 'Ruta' en un archivo .desktop en relación con la ubicación donde se encuentra el archivo de escritorio y no puedo hacerlo.

Cuando no lo declaro o lo configuro en blanco, el valor predeterminado es mi carpeta de inicio, sin importar desde dónde lo ejecute; y no acepta valores relativos a mi ubicación actual dentro del sistema de archivos.

kicsyromy
fuente
He tenido este problema He encontrado soluciones alternativas, aunque a veces radicalmente complicadas dependiendo de lo que esté haciendo. ¿Estás utilizando una solución alternativa en este momento? Si no, puedo ayudar con eso. No he encontrado documentos xdg que expliquen mucho sobre esto.
bambuntu
OP ¿sigues buscando una respuesta? Si es así, es posible que deba volver a publicar su pregunta, ya que está marcada para el cierre. Saludos,
Ringtail

Respuestas:

3

No puede establecer el CWD dentro de un archivo .desktop. Si desea que una aplicación tenga un CWD específico, deberá escribir un script de envoltura simple para la aplicación, que se vea más o menos así:

#!/bin/sh

(cd /where/you/want/it/to/be && exec your_program)

Puede reemplazar your_programallí con $@y ejecutar el script con your_program como argumento, como run-in-dir.sh your_program. De esta manera, puede usar el mismo script para ajustar cualquier programa que desee iniciar en ese directorio.

dobey
fuente
14

Puede evitar esto usando un mini script de bash en línea en su Exec. Esto agregará la ruta del archivo .desktop a PATH antes de ejecutar su comando.

Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"

% k será sustituido por la ruta del archivo de escritorio en sí. El dirnamecomando corta la parte del nombre de archivo, dejando solo el directorio. Una vez que PATH se establece de esta manera, your_commandse puede invocar sin una ruta completa.

roadmr
fuente
1
Hice clic para acelerar y voté por el incorrecto, pero su solución es perfecta.
CrandellWS
1
esto podría funcionar muy bien con esta otra pregunta / respuesta stackoverflow.com/a/3464561/1815624
CrandellWS
2

Usé esto:

Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'

% K es el nombre completo del archivo .desktop, incluida su ruta. Luego se usa por dirname para obtener una ubicación y cambiar el directorio a esa ubicación. Finalmente, ahora que está en el lugar correcto, encuentra el script y lo ejecuta.

Mariana
fuente
0

Para los nombres de directorio con espacios en el nombre, esto finalmente funcionó para mí:

Exec=/bin/bash -c 'cd "$(dirname "$0")"; wine game.exe -windowed' %k

Crédito a /unix//a/144428/61349

ThorSummoner
fuente
0

Esto funcionó para mí Ubuntu 14.04:

Exec=bash -c "cd %k && ./app.run"

La última especificación dice que % k apunta a la ubicación del archivo de escritorio:

% k: la ubicación del archivo de escritorio como URI (si, por ejemplo, se obtuvo del sistema vfolder) o como un nombre de archivo local o vacío si no se conoce una ubicación.

nexayq
fuente