I want to set the 'Path' variable in a .desktop file relative to the location where the desktop file is located and I can't manage to do that.

When I don't declare it or set it to blank it defaults to my home folder no matter where I run it from; and it doesn't accept values relative to my current location within the file system.

  • I've had this problem. I've found workarounds, although sometimes radically complicated depending upon what you are doing. Are you using a work around at this time? If not, I may be able to help with that. I have not found xdg docs that explain much on this. – bambuntu Apr 6 '12 at 20:42
  • OP are you still looking for an answer? If so, you may need to repost your question as this is marked for closure. Regards, – Ringtail Apr 7 '12 at 23:15
up vote 3 down vote accepted

You cannot set the CWD inside a .desktop file. If you want an application to have a specific CWD, you will need to write a simple wrapper script for the application, that looks something like this:

#!/bin/sh

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

You can replace your_program there with $@ and run the script with your_program as an argument, like run-in-dir.sh your_program. This way you can use the same script to wrap any program you want to start in that directory.

You can kludge around this by using an in-line bash mini-script on your Exec. This will add the .desktop file's path to PATH prior to running your command.

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

%k will be substituted by the path of the desktop file itself. The dirname command chops off the filename part, leaving only the directory. Once PATH is set like this, your_command can be invoked without a full path.

I used this:

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

The %k is the full name of the .desktop file including its path. It's then used by dirname to get a location and change directory to that location. Finally, now that it's in the right place, it finds the script and runs it.

For directory names with spaces in the name, this finally worked for me:

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

Credit to https://unix.stackexchange.com/a/144428/61349

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.