
In this article, we will discuss how to set environment variables in .desktop files in Ubuntu. This is a useful technique for customizing the behavior of applications on a per-user basis.
To set environment variables in .desktop files in Ubuntu, you can use the env
command in the Exec
line or create a wrapper script. These approaches allow you to customize the behavior of applications on a per-user basis.
Understanding .desktop Files
Before we dive into the specifics, let’s first understand what .desktop files are. These are essentially shortcuts that are used to launch applications in Linux. They contain information about an application such as its name, icon, and the command to run it. You can find these files in /usr/share/applications/
for system-wide applications or ~/.local/share/applications/
for user-specific applications.
Setting Environment Variables Using the env
Command
One of the ways to set environment variables in a .desktop file is by using the env
command. This command allows you to modify the environment for command invocations. It can be used to set one or more environment variables right before a command in a shell.
Let’s take an example where we want to set the GTK2_RC_FILES
variable to gtkrc.custom
and run eclipse
. We can modify the Exec
line in the .desktop file as follows:
Exec=env GTK2_RC_FILES=gtkrc.custom /path/to/eclipse
In this command, env
is the command that sets the environment variable. GTK2_RC_FILES
is the name of the environment variable we want to set, and gtkrc.custom
is the value we want to assign to this variable. /path/to/eclipse
is the command we want to run after setting the environment variable.
Using a Wrapper Script
Another approach to set environment variables in a .desktop file is by creating a wrapper script. This script will set the environment variable and then run the application.
Here’s how you can create a wrapper script:
- Create a script (e.g.,
eclipse.sh
) with the following content:
#!/bin/sh
export GTK2_RC_FILES=gtkrc.custom
exec /path/to/eclipse "$@"
In this script, export
is a command that sets the environment variable. GTK2_RC_FILES
is the name of the environment variable we want to set, and gtkrc.custom
is the value we want to assign to this variable. /path/to/eclipse "$@"
is the command we want to run after setting the environment variable. The "$@"
part ensures that all arguments passed to the script will be forwarded to the eclipse
command.
- Make the script executable by running the following command:
chmod +x eclipse.sh
- In the .desktop file, set the
Exec
line to:
Exec=/path/to/eclipse.sh
This way, the customization won’t be overwritten when the application package is updated.
Setting Environment Variables Containing the User’s Home Directory
If you want to set an environment variable containing the user’s home directory, you can use the ~
symbol in the .desktop file. For example:
Exec=env MYVAR="~/foo"
However, it’s important to note that the ~
symbol won’t be expanded in the Exec
line. Instead, it will be passed literally. To expand the ~
symbol, you can use a wrapper script or follow the approach mentioned in this Stack Overflow post.
Conclusion
Setting environment variables in .desktop files in Ubuntu allows you to customize the behavior of applications on a per-user basis. You can do this by using the env
command in the Exec
line or by creating a wrapper script. Both approaches are effective and can be used depending on your specific needs.
The .desktop files can be found in /usr/share/applications/
for system-wide applications or ~/.local/share/applications/
for user-specific applications.
.desktop files are used as shortcuts to launch applications in Linux. They contain information about an application such as its name, icon, and the command to run it.
There are two ways to set environment variables in a .desktop file. One way is by using the env
command in the Exec
line of the file. Another way is by creating a wrapper script that sets the environment variables and then runs the application.
Yes, you can set multiple environment variables in a .desktop file using the env
command or by including multiple export
commands in a wrapper script.
To set an environment variable containing the user’s home directory, you can use the ~
symbol in the .desktop file. However, it’s important to note that the ~
symbol won’t be expanded in the Exec
line. To expand the ~
symbol, you can use a wrapper script or follow the approach mentioned in this Stack Overflow post: Tilde Expansion in Quotes.