Difference between revisions of "Desktop entries"

From ArchWiki
Jump to navigation Jump to search
(Hide desktop entries: Remove null file method. Method defined in spec is more explicit and clear.)
(Update database of MIME types: this is not about MIME types)
 
(61 intermediate revisions by 18 users not shown)
Line 1: Line 1:
 +
[[Category:Freedesktop.org]]
 +
[[Category:Configuration files]]
 
[[Category:Package development]]
 
[[Category:Package development]]
 
[[ja:デスクトップエントリ]]
 
[[ja:デスクトップエントリ]]
[[zh-CN:Desktop entries]]
+
[[ru:Desktop entries]]
The freedesktop [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html Desktop Entry specification] provides a standard for applications to integrate into a [[desktop environment]]. Desktop entries are the configuration files that describe how an application is launched and which data it can handle. They also configure how an application appears in a menu with an icon, which is subject to the related [https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html menu specification] standard.  
+
[[zh-hans:Desktop entries]]
 +
The [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html XDG Desktop Entry specification] defines a standard for applications to integrate into application menus of [[desktop environment]]s implementing the [https://specifications.freedesktop.org/menu-spec/menu-spec-latest.html XDG Desktop Menu] specification.
  
The most common desktop entries are the {{ic|.desktop}} and {{ic|.directory}} files. This article explains briefly how to create useful and standard compliant desktop entries. It is mainly intended for package contributors and maintainers, but may also be useful for software developers and others.
+
== Basics ==
  
There are roughly three types of desktop entries:
+
Each desktop entry must have a {{ic|Type}} and a {{ic|Name}} key and can optionally define its appearance in the application menu.
  
; Application : a shortcut to an application
+
The three available types are:
; Link : a shortcut to a web link.
+
 
; Directory : a container of meta data of a menu entry
+
;Application
 +
:Defines how to launch an application and what MIME types it supports (used by [[XDG MIME Applications]]). With [[XDG Autostart]] Application entries can be [[Autostarting|started automatically]] by placing them in specific directories. Application entries use the {{ic|.desktop}} file extension. See [[#Application entry]].
 +
 
 +
;Link
 +
:Defines a shortcut to a {{ic|URL}}. Link entries use the {{ic|.desktop}} file extension.
 +
 
 +
;Directory
 +
:Defines the appearance of a submenu in the application menu. Directory entries use the {{ic|.directory}} file extension.
  
 
The following sections will roughly explain how these are created and validated.  
 
The following sections will roughly explain how these are created and validated.  
 
Related to this content, and also defined in {{ic|.desktop}} files, are MIME-type associations for data files. [[Default applications]] describes how these are configured.
 
  
 
== Application entry ==
 
== Application entry ==
  
Desktop entries for applications, or {{ic|.desktop}} files, are generally a combination of meta information resources and a shortcut of an application. These files usually reside in {{ic|/usr/share/applications}} or {{ic|/usr/local/share/applications}} for applications installed system-wide, or {{ic|~/.local/share/applications}} for user-specific applications. User entries take precedence over system entries.
+
Desktop entries for applications, or {{ic|.desktop}} files, are generally a combination of meta information resources and a shortcut of an application. These files usually reside in {{ic|/usr/share/applications/}} or {{ic|/usr/local/share/applications/}} for applications installed system-wide, or {{ic|~/.local/share/applications/}} for user-specific applications. User entries take precedence over system entries.
  
 
=== File example ===
 
=== File example ===
  
Following is an example of its structure with additional comments. The example is only meant to give a quick impression, and does not show how to utilize all possible entry keys. The complete list of keys can be found in the [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys freedesktop.org specification].
+
Following is an example of its structure with additional comments. The example is only meant to give a quick impression, and does not show how to utilize all possible entry keys. The complete list of keys can be found in the [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys freedesktop specification].
  
 
  [Desktop Entry]
 
  [Desktop Entry]
Line 41: Line 49:
 
  Path=/opt/jmemorise
 
  Path=/opt/jmemorise
 
   
 
   
  # The executable of the application.
+
  # The executable of the application, possibly with arguments.
 
  Exec=jmemorize
 
  Exec=jmemorize
 
   
 
   
Line 52: Line 60:
 
  # Describes the categories in which this entry should be shown
 
  # Describes the categories in which this entry should be shown
 
  Categories=Education;Languages;Java;
 
  Categories=Education;Languages;Java;
 +
 +
{{Note|Only {{ic|Type}} and {{ic|Name}} are required.}}
  
 
=== Key definition ===
 
=== Key definition ===
  
All Desktop recognized desktop entries can be found on the [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys freedesktop.org] site.
+
All recognized entries can be found on the [https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#recognized-keys freedesktop] site.
 
For example, the {{Ic|Type}} key defines three types of desktop entries: Application (type 1), Link (type 2) and Directory (type 3).
 
For example, the {{Ic|Type}} key defines three types of desktop entries: Application (type 1), Link (type 2) and Directory (type 3).
  
Line 73: Line 83:
 
* {{Ic|Comment}} is intended to contain any usefull additional information.
 
* {{Ic|Comment}} is intended to contain any usefull additional information.
  
==== Deprecation ====
+
=== Validation ===
 +
 
 +
As some keys have become deprecated over time, you may want to validate your desktop entries using {{man|1|desktop-file-validate}} which is part of the {{Pkg|desktop-file-utils}} package. To validate, run:
 +
 
 +
$ desktop-file-validate <''your desktop file''>
  
There are quite some keys that have become deprecated over time as the standard has matured. The best/simplest way is to use the tool {{Ic|desktop-file-validate}} which is part of the package {{Pkg|desktop-file-utils}}. To validate, run
 
$ desktop-file-validate <your desktop file>
 
 
This will give you very verbose and useful warnings and error messages.
 
This will give you very verbose and useful warnings and error messages.
 +
 +
=== Update database of desktop entries ===
 +
 +
To make desktop entries defined in {{ic|~/.local/share/applications}} work, run the following command:
 +
 +
$ update-desktop-database ~/.local/share/applications
  
 
== Icons ==
 
== Icons ==
Line 134: Line 152:
  
 
=== Converting icons ===
 
=== Converting icons ===
 +
 +
{{Merge|ImageMagick#Usage|Belongs there.}}
  
 
If you stumble across an icon which is in a format that is not supported by the freedesktop.org standard (like {{ic|gif}} or {{ic|ico}}), you can use the ''convert'' tool (which is part of the {{Pkg|imagemagick}} package) to convert it to a supported/recommended format, e.g.:
 
If you stumble across an icon which is in a format that is not supported by the freedesktop.org standard (like {{ic|gif}} or {{ic|ico}}), you can use the ''convert'' tool (which is part of the {{Pkg|imagemagick}} package) to convert it to a supported/recommended format, e.g.:
Line 155: Line 175:
 
  $ icotool -x <icon name>.ico
 
  $ icotool -x <icon name>.ico
  
For extracting images from .icns container, you can use ''icns2png'' (provided by {{Aur|libicns}}):
+
For extracting images from .icns container, you can use ''icns2png'' (provided by {{Pkg|libicns}}):
 
  $ icns2png -x <icon name>.icns
 
  $ icns2png -x <icon name>.icns
  
 
=== Obtaining icons ===
 
=== Obtaining icons ===
  
Although packages that already ship with a .desktop-file most certainly contain an icon or a set of icons, there is sometimes the case when a developer has not created a .desktop-file, but may ship icons, nonetheless. So a good start is to look for icons in the source package.
+
Although packages that already ship with a ''.desktop'' file most certainly contain an icon or a set of icons, there is sometimes the case when a developer has not created a ''.desktop'' file, but may ship icons, nonetheless. So a good start is to look for icons in the source package.
 
You can i.e. first filter for the extension with '''find''' and then use '''grep''' to filter further for certain buzzwords like the package name, "icon", "logo", etc, if there are quite a lot of images in the source package.
 
You can i.e. first filter for the extension with '''find''' and then use '''grep''' to filter further for certain buzzwords like the package name, "icon", "logo", etc, if there are quite a lot of images in the source package.
 
  $ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
 
  $ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"
Line 166: Line 186:
 
Some projects, like i.e. ''tvbrowser'' have an [http://enwiki.tvbrowser.org/index.php/Banners,_Logos_and_other_Promotion_Material artwork/logo page] where additional icons may be found. If a project is multi-platform, there may be the case that even if the linux/unix package does not come with an icon, the Windows package might provide one. If the project uses a [[wikipedia:Version control system|Version control system]] like CVS/SVN/etc. and you have some experience with it, you also might consider browsing it for icons.
 
Some projects, like i.e. ''tvbrowser'' have an [http://enwiki.tvbrowser.org/index.php/Banners,_Logos_and_other_Promotion_Material artwork/logo page] where additional icons may be found. If a project is multi-platform, there may be the case that even if the linux/unix package does not come with an icon, the Windows package might provide one. If the project uses a [[wikipedia:Version control system|Version control system]] like CVS/SVN/etc. and you have some experience with it, you also might consider browsing it for icons.
 
If everything fails, the project might simply have no icon/logo yet.
 
If everything fails, the project might simply have no icon/logo yet.
 +
 +
=== Icon path ===
 +
The [https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html freedesktop.org standard] specifies in which order and directories programs should look for icons:
 +
# {{ic|$HOME/.icons}} (for backwards compatibility)
 +
# {{ic|$XDG_DATA_DIRS/icons}}
 +
# {{ic|/usr/share/pixmaps}}
  
 
== Tools ==
 
== Tools ==
Line 172: Line 198:
 
{{Pkg|gendesk}} started as an Arch Linux-specific tool for generating .desktop files by fetching the needed information directly from PKGBUILD files. Now it is a general tool that takes command-line arguments.
 
{{Pkg|gendesk}} started as an Arch Linux-specific tool for generating .desktop files by fetching the needed information directly from PKGBUILD files. Now it is a general tool that takes command-line arguments.
  
Icons can be automatically downloaded from [http://openiconlibrary.sourceforge.net/ openiconlibrary], if available. (The source for icons can easily be changed in the future).
+
Icons can be automatically downloaded from [http://openiconlibrary.sourceforge.net/ openiconlibrary], if available. (The source for icons is configurable).
  
 
==== How to use ====
 
==== How to use ====
Line 196: Line 222:
 
* Use {{Ic|1=--name='Program Name'}} for choosing a name for the menu entry.
 
* Use {{Ic|1=--name='Program Name'}} for choosing a name for the menu entry.
  
* Use {{Ic|1=--exec='/opt/some_app/elf --with-ponies'}} for setting the exec field.
+
* Use {{Ic|1=--exec='/opt/some_app/elf --some-arg --other-arg'}} for setting the exec field.
  
 
* See the [https://github.com/xyproto/gendesk gendesk project] for more information.
 
* See the [https://github.com/xyproto/gendesk gendesk project] for more information.
  
=== List or search in .desktop files ===
+
=== lsdesktopf ===
 
 
The {{AUR|lsdesktopf}} script is listing available ''.desktop'' files or searching in their content.
 
 
 
Examples
 
# lsdesktopf
 
# lsdesktopf --less
 
# lsdesktopf --less gtk zh_TW,zh_CN,en_GB
 
  
List MIME-types or parts of MIME-types found in ''.desktop'', and which desktop files shares same MIME-type, output is equal as in [[Default applications#Configuration of the mimeapps.list file|mimeapps.list]] for section {{ic|[Added Associations]}}.  
+
{{AUR|lsdesktopf}} can list available ''.desktop'' files or search their contents.
  
  # lsdesktopf --gm
+
  $ lsdesktopf
  # lsdesktopf --gm [options]
+
$ lsdesktopf --list
 +
  $ lsdesktopf --list gtk zh_TW,zh_CN,en_GB
  
For more options use {{ic|lsdesktopf --help}}.
+
It can also perform MIME-type-related searches. See [[XDG MIME Applications#lsdesktopf]].
  
 
=== fbrokendesktop ===
 
=== fbrokendesktop ===
  
The {{AUR|fbrokendesktop}} bash script using command ''which'' to detect broken {{ic|Exec}} that points to not existing path. Without any parameters it uses preset folders in {{ic|DskPath}} array. It shows only broken ''.desktop'' with full path and filename that is missing.
+
The {{AUR|fbrokendesktop}} Bash script detects broken {{ic|Exec}} values pointing to non-existent paths. Without any arguments it uses preset directories in the {{ic|DskPath}} array. It shows only broken ''.desktop'' with full path and filename that is missing.
  
 
Examples
 
Examples
  
  # fbrokendesktop
+
  $ fbrokendesktop
  # fbrokendesktop /usr
+
  $ fbrokendesktop /usr
  # fbrokendesktop /usr/share/apps/kdm/sessions/icewm.desktop
+
  $ fbrokendesktop /usr/share/apps/kdm/sessions/icewm.desktop
  
 
== Tips and tricks ==
 
== Tips and tricks ==
 +
 +
=== Run a desktop file from a terminal ===
 +
 +
Install the {{Pkg|dex}} package and run {{ic|dex ''/path/to/application.desktop''}}.
  
 
=== Hide desktop entries ===
 
=== Hide desktop entries ===
Line 237: Line 261:
  
 
where ''desktop-name'' can be option such as ''GNOME'', ''Xfce'', ''KDE'' etc. A desktop entry can be hidden in more than desktop at once - simply separate the desktop names with a semi-colon.
 
where ''desktop-name'' can be option such as ''GNOME'', ''Xfce'', ''KDE'' etc. A desktop entry can be hidden in more than desktop at once - simply separate the desktop names with a semi-colon.
 
=== Autostart ===
 
 
If you use an XDG-compliant desktop environment, such as GNOME or KDE, the desktop environment will automatically start [[Desktop entries|*.desktop]] files found in the following directories:
 
 
* System-wide: {{ic|$XDG_CONFIG_DIRS/autostart/}} ({{ic|/etc/xdg/autostart/}} by default)
 
:* GNOME also starts files found in {{ic|/usr/share/gnome/autostart/}}
 
* User-specific: {{ic|$XDG_CONFIG_HOME/autostart/}} ({{ic|~/.config/autostart/}} by default)
 
 
Users can override system-wide {{ic|*.desktop}} files by copying them into the user-specific {{ic|~/.config/autostart/}} folder.
 
 
For a more specific description of directories used, [http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html Desktop Application Autostart Specification].
 
 
{{Note|This method is supported only by XDG-compliant desktop environments. Tools like {{AUR|dapper}}, {{pkg|dex}}, or {{AUR|fbautostart}} can be used to offer XDG autostart in unsupported desktop environments as long as some other autostart mechanism exists. Use the existing mechanism to start the xdg compliant autostart tool.}}
 
  
 
=== Modify environment variables ===
 
=== Modify environment variables ===
  
Edit the {{ic|Exec}} command by appending {{ic|env}}, for example:
+
To set [[environment variables]], edit the {{ic|1=Exec=}} command line by prepending ''env''. For example:
  
 
{{hc|~/.local/share/applications/abiword.desktop|2=
 
{{hc|~/.local/share/applications/abiword.desktop|2=
 
Exec=env LANG=he_IL.UTF-8 abiword %U
 
Exec=env LANG=he_IL.UTF-8 abiword %U
 
}}
 
}}
 +
 +
{{Tip|It may be preferable to copy the ''.desktop'' file to the {{ic|~/.local/share/applications/}} directory instead of modifying it in the {{ic|/usr/share/applications/}} one.}}
  
 
== See also ==
 
== See also ==
  
* [[DeveloperWiki:Removal of desktop files]]
+
* [[Wikipedia:.desktop]]
* [[Wikipedia:.desktop|desktop wikipedia article]]
+
* [https://freedesktop.org/wiki/Howto_desktop_files/ Information for developers]
* [http://freedesktop.org/wiki/Howto_desktop_files information for developers]
 

Latest revision as of 07:23, 19 August 2019

The XDG Desktop Entry specification defines a standard for applications to integrate into application menus of desktop environments implementing the XDG Desktop Menu specification.

Basics

Each desktop entry must have a Type and a Name key and can optionally define its appearance in the application menu.

The three available types are:

Application
Defines how to launch an application and what MIME types it supports (used by XDG MIME Applications). With XDG Autostart Application entries can be started automatically by placing them in specific directories. Application entries use the .desktop file extension. See #Application entry.
Link
Defines a shortcut to a URL. Link entries use the .desktop file extension.
Directory
Defines the appearance of a submenu in the application menu. Directory entries use the .directory file extension.

The following sections will roughly explain how these are created and validated.

Application entry

Desktop entries for applications, or .desktop files, are generally a combination of meta information resources and a shortcut of an application. These files usually reside in /usr/share/applications/ or /usr/local/share/applications/ for applications installed system-wide, or ~/.local/share/applications/ for user-specific applications. User entries take precedence over system entries.

File example

Following is an example of its structure with additional comments. The example is only meant to give a quick impression, and does not show how to utilize all possible entry keys. The complete list of keys can be found in the freedesktop specification.

[Desktop Entry]

# The type as listed above
Type=Application

# The version of the desktop entry specification to which this file complies
Version=1.0

# The name of the application
Name=jMemorize

# A comment which can/will be used as a tooltip
Comment=Flash card based learning tool

# The path to the folder in which the executable is run
Path=/opt/jmemorise

# The executable of the application, possibly with arguments.
Exec=jmemorize

# The name of the icon that will be used to display this entry
Icon=jmemorize

# Describes whether this application needs to be run in a terminal or not
Terminal=false

# Describes the categories in which this entry should be shown
Categories=Education;Languages;Java;
Note: Only Type and Name are required.

Key definition

All recognized entries can be found on the freedesktop site. For example, the Type key defines three types of desktop entries: Application (type 1), Link (type 2) and Directory (type 3).

  • Version key does not stand for the version of the application, but for the version of the desktop entry specification to which this file complies.
  • Name, GenericName and Comment often contain redundant values in the form of combinations of them, like:
Name=Pidgin Internet Messenger
GenericName=Internet Messenger

or

Name=NoteCase notes manager
Comment=Notes Manager

This should be avoided, as it will only be confusing to users. The Name key should only contain the name, or maybe an abbreviation/acronym if available.

  • GenericName should state what you would generally call an application that does what this specific application offers (i.e. Firefox is a "Web Browser").
  • Comment is intended to contain any usefull additional information.

Validation

As some keys have become deprecated over time, you may want to validate your desktop entries using desktop-file-validate(1) which is part of the desktop-file-utils package. To validate, run:

$ desktop-file-validate <your desktop file>

This will give you very verbose and useful warnings and error messages.

Update database of desktop entries

To make desktop entries defined in ~/.local/share/applications work, run the following command:

$ update-desktop-database ~/.local/share/applications

Icons

See also the Icon Theme Specification.

Common image formats

Here is a short overview of image formats commonly used for icons.

Support for image formats for icons as specified by the freedesktop.org standard.
Extension Full Name and/or Description Graphics Type Container Format Supported
.png Portable Network Graphics Raster No Yes
.svg(z) Scalable Vector Graphics Vector No Yes (optional)
.xpm X PixMap Raster No Yes (deprecated)
.gif Graphics Interchange Format Raster No No
.ico MS Windows Icon Format Raster Yes No
.icns Apple Icon Image Raster Yes No

Converting icons

Merge-arrows-2.pngThis article or section is a candidate for merging with ImageMagick#Usage.Merge-arrows-2.png

Notes: Belongs there. (Discuss in Talk:Desktop entries#)

If you stumble across an icon which is in a format that is not supported by the freedesktop.org standard (like gif or ico), you can use the convert tool (which is part of the imagemagick package) to convert it to a supported/recommended format, e.g.:

$ convert <icon name>.gif <icon name>.png

If you convert from a container format like ico, you will get all images that were encapsulated in the ico file in the form <icon name>-<number>.png. If you want to know the size of the image, or the number of images in a container file like ico you can use the identify tool (also part of the imagemagick package):

$ identify /usr/share/vlc/vlc48x48.ico
/usr/share/vlc/vlc48x48.ico[0] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[1] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[2] ICO 128x128 128x128+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[3] ICO 48x48 48x48+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[4] ICO 32x32 32x32+0+0 8-bit DirectClass 84.3kb
/usr/share/vlc/vlc48x48.ico[5] ICO 16x16 16x16+0+0 8-bit DirectClass 84.3kb

As you can see, the example ico file, although its name might suggest a single image of size 48x48, contains no less than 6 different sizes, of which one is even greater than 48x48, namely 128x128.

Alternatively, you can use icotool (from icoutils) to extract png images from ico container:

$ icotool -x <icon name>.ico

For extracting images from .icns container, you can use icns2png (provided by libicns):

$ icns2png -x <icon name>.icns

Obtaining icons

Although packages that already ship with a .desktop file most certainly contain an icon or a set of icons, there is sometimes the case when a developer has not created a .desktop file, but may ship icons, nonetheless. So a good start is to look for icons in the source package. You can i.e. first filter for the extension with find and then use grep to filter further for certain buzzwords like the package name, "icon", "logo", etc, if there are quite a lot of images in the source package.

$ find /path/to/source/package -regex ".*\.\(svg\|png\|xpm\|gif\|ico\)$"

If the developers of an application do not include icons in their source packages, the next step would be to search on their web sites. Some projects, like i.e. tvbrowser have an artwork/logo page where additional icons may be found. If a project is multi-platform, there may be the case that even if the linux/unix package does not come with an icon, the Windows package might provide one. If the project uses a Version control system like CVS/SVN/etc. and you have some experience with it, you also might consider browsing it for icons. If everything fails, the project might simply have no icon/logo yet.

Icon path

The freedesktop.org standard specifies in which order and directories programs should look for icons:

  1. $HOME/.icons (for backwards compatibility)
  2. $XDG_DATA_DIRS/icons
  3. /usr/share/pixmaps

Tools

gendesk

gendesk started as an Arch Linux-specific tool for generating .desktop files by fetching the needed information directly from PKGBUILD files. Now it is a general tool that takes command-line arguments.

Icons can be automatically downloaded from openiconlibrary, if available. (The source for icons is configurable).

How to use

  • Add gendesk to makedepends
  • Start the prepare() function with:
gendesk --pkgname "$pkgname" --pkgdesc "$pkgdesc"
  • Alternatively, if an icon is already provided ($pkgname.png, for instance). The -n flag is for not downloading an icon or using the default icon. Example:
gendesk -n --pkgname "$pkgname" --pkgdesc "$pkgdesc"
  • $srcdir/$pkgname.desktop will be created and can be installed in the package() function with:
install -Dm644 "$pkgname.desktop" "$pkgdir/usr/share/applications/$pkgname.desktop"
  • The icon can be installed with:
install -Dm644 "$pkgname.png" "$pkgdir/usr/share/pixmaps/$pkgname.png"
  • Use --name='Program Name' for choosing a name for the menu entry.
  • Use --exec='/opt/some_app/elf --some-arg --other-arg' for setting the exec field.

lsdesktopf

lsdesktopfAUR can list available .desktop files or search their contents.

$ lsdesktopf
$ lsdesktopf --list
$ lsdesktopf --list gtk zh_TW,zh_CN,en_GB

It can also perform MIME-type-related searches. See XDG MIME Applications#lsdesktopf.

fbrokendesktop

The fbrokendesktopAUR Bash script detects broken Exec values pointing to non-existent paths. Without any arguments it uses preset directories in the DskPath array. It shows only broken .desktop with full path and filename that is missing.

Examples

$ fbrokendesktop
$ fbrokendesktop /usr
$ fbrokendesktop /usr/share/apps/kdm/sessions/icewm.desktop

Tips and tricks

Run a desktop file from a terminal

Install the dex package and run dex /path/to/application.desktop.

Hide desktop entries

Firstly, copy the desktop entry file in question to ~/.local/share/applications to avoid your changes being overwritten.

Then, to hide the entry in all environments, open the desktop entry file in a text editor and add the following line: NoDisplay=true.

To hide the entry in a specific desktop, add the following line to the desktop entry file: NotShowIn=desktop-name

where desktop-name can be option such as GNOME, Xfce, KDE etc. A desktop entry can be hidden in more than desktop at once - simply separate the desktop names with a semi-colon.

Modify environment variables

To set environment variables, edit the Exec= command line by prepending env. For example:

~/.local/share/applications/abiword.desktop
Exec=env LANG=he_IL.UTF-8 abiword %U
Tip: It may be preferable to copy the .desktop file to the ~/.local/share/applications/ directory instead of modifying it in the /usr/share/applications/ one.

See also