Comment puis-je définir la variable «Path» dans un fichier .desktop pour qu'elle soit relative à l'emplacement où se trouve le fichier de bureau?

11

Je veux définir la variable «Path» dans un fichier .desktop par rapport à l'emplacement où se trouve le fichier de bureau et je n'arrive pas à le faire.

Lorsque je ne le déclare pas ou ne le mets pas en blanc, il revient par défaut à mon dossier personnel, peu importe d'où je l'exécute; et il n'accepte pas les valeurs relatives à mon emplacement actuel dans le système de fichiers.

kicsyromy
la source
J'ai eu ce problème. J'ai trouvé des solutions de contournement, bien que parfois radicalement compliquées selon ce que vous faites. Utilisez-vous une solution de contournement en ce moment? Sinon, je pourrai peut-être vous aider. Je n'ai pas trouvé de documents xdg qui expliquent beaucoup à ce sujet.
bambuntu
OP cherchez-vous toujours une réponse? Si c'est le cas, vous devrez peut-être republier votre question car elle est marquée pour la fermeture. Cordialement,
Ringtail

Réponses:

3

Vous ne pouvez pas définir le CWD dans un fichier .desktop. Si vous voulez qu'une application ait un CWD spécifique, vous devrez écrire un script wrapper simple pour l'application, qui ressemble à ceci:

#!/bin/sh

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

Vous pouvez your_programy remplacer $@et exécuter le script avec votre_programme comme argument, comme run-in-dir.sh your_program. De cette façon, vous pouvez utiliser le même script pour envelopper n'importe quel programme que vous souhaitez démarrer dans ce répertoire.

dobey
la source
14

Vous pouvez contourner cela en utilisant un mini-script bash en ligne sur votre Exec. Cela ajoutera le chemin du fichier .desktop à PATH avant d'exécuter votre commande.

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

% k sera remplacé par le chemin du fichier de bureau lui-même. La dirnamecommande coupe la partie du nom de fichier, ne laissant que le répertoire. Une fois que PATH est défini comme ceci, il your_commandpeut être invoqué sans chemin complet.

roadmr
la source
1
J'ai cliqué sur rapide et j'ai voté pour la mauvaise, mais votre solution est parfaite.
CrandellWS
1
cela pourrait très bien fonctionner avec cette autre question / réponse stackoverflow.com/a/3464561/1815624
CrandellWS
2

J'ai utilisé ceci:

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

% K est le nom complet du fichier .desktop, y compris son chemin. Il est ensuite utilisé par dirname pour obtenir un emplacement et changer de répertoire à cet emplacement. Enfin, maintenant qu'il est au bon endroit, il trouve le script et l'exécute.

Marian
la source
0

Pour les noms de répertoire avec des espaces dans le nom, cela a finalement fonctionné pour moi:

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

Crédit à /unix//a/144428/61349

ThorSummoner
la source
0

Cela a fonctionné pour moi Ubuntu 14.04:

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

La dernière spécification indique que % k pointe vers l'emplacement du fichier de bureau:

% k - L'emplacement du fichier de bureau comme URI (si par exemple obtenu du système vfolder) ou un nom de fichier local ou vide si aucun emplacement n'est connu.

nexayq
la source