- Desktop entries
- Contents
- Basics
- Application entry
- File example
- Key definition
- Validation
- Installation
- Update database of desktop entries
- Icons
- Common image formats
- Converting icons
- Obtaining icons
- Icon path
- Tools
- gendesk
- How to use
- lsdesktopf
- fbrokendesktop
- Tips and tricks
- Run a desktop file from a terminal
- Hide desktop entries
- Modify environment variables
- Create a .desktop file that opens and execute a command in a terminal
- 5 Answers 5
- How to Create a .Desktop File For Your Application in Linux
- How to create Desktop launchers
- One comment
- Popular Posts
Desktop entries
The XDG Desktop Entry specification defines a standard for applications to integrate into application menus of desktop environments implementing the XDG Desktop Menu specification.
Contents
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.
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:
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 useful 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:
This will give you very verbose and useful warnings and error messages.
Installation
Use desktop-file-install(1) to install desktop file into target directory. For example:
Update database of desktop entries
To make desktop entries defined in
/.local/share/applications work, run the following command:
Icons
Common image formats
Here is a short overview of image formats commonly used for icons.
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
This article or section is a candidate for merging with ImageMagick#Usage.
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.:
If you convert from a container format like ico , you will get all images that were encapsulated in the ico file in the form — .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):
As you can see, the example ico file, although its name might suggest a single image of size 48×48, contains no less than 6 different sizes, of which one is even greater than 48×48, namely 128×128.
Alternatively, you can use icotool (from icoutils ) to extract png images from ico container:
For extracting images from .icns container, you can use icns2png (provided by libicns ):
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.
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 AUR 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:
- $HOME/.icons (for backwards compatibility)
- $XDG_DATA_DIRS/icons
- /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:
- 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:
- $srcdir/$pkgname.desktop will be created and can be installed in the package() function with:
- The icon can be installed with:
- 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.
- See the gendesk project for more information.
lsdesktopf
lsdesktopf AUR can list available .desktop files or search their contents.
It can also perform MIME-type-related searches. See XDG MIME Applications#lsdesktopf.
fbrokendesktop
The fbrokendesktop AUR 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.
Tips and tricks
Run a desktop file from a terminal
If gtk3 is installed, run gtk-launch application.desktop .
Or 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, copy the .desktop file from /usr/share/applications/ to $XDG_DATA_HOME/ (
/.local/share/applications/ ) and edit the Exec= command line by prepending env. For example:
Источник
Create a .desktop file that opens and execute a command in a terminal
I would like to know how to write the Exec command of a .desktop file to open a new terminal and execute a shell script in it. The shell script is working and accessible by all users. When launching the script from the terminal everything works, but it doesn’t when trying to launch the script from a .desktop file.
Here are some combinations I have already tried:
The .desktop terminal option is set to true.
5 Answers 5
The content of your desktop file should look like (see how to create a .desktop file using a text editor):
In the first case, the Terminal field is set to false (perhaps contrary to your expectations) and in second case is set to true , but the result is in both cases the same.
at the end of your commands.
Like for me snapd isn’t something using full bandwidth of system to refresh snaps anytime almost I work at night.
So this worked for me to create a .sh file linked to a .desktop file.
Contents for .sh file were
-S in the first line of the .sh file is used to send STDINPUT to the sudo command meaning direct execute without entering password.
Contents for the .desktop file were:
Make the above file. Don’t forget to sudo chmod +x filename.sh
As stated in desktop entry specification, Terminal=true tells the launcher to launch your script in a terminal window. The chosen Terminal Emulator depends on your default applications settings and Desktop Environment. In GNOME, it is gnome-terminal, in KDE, it is Konsole. (Without DE, in plain WM there is a bug in xdg-open, and Terminal=true just ignored, see issue)
You need this line to run your script and launch a shell after it.
- sh -c ‘COMMAND’ run the «sh» binary found in $PATH which executes COMMAND (on many systems, sh is the symbolic link to bash , but for portability «sh» is prefered)
- echo hello; $SHELL does two things. First, it runs echo hello and then, after the execution of this command, launches $SHELL.
If you will not add some command that waits for you to exit, a terminal emulator will just run your program and exit.
P.S. If you just want not to close your terminal, you can do
(read will wait for you to press Enter, sleep will just wait 5 seconds)
P.P.S $SHELL probably will be the same as last section in /etc/passwd in line with your user.
The value for $HOME, $USER, $SHELL, $PATH, $LOGNAME, and $MAIL are set ac‐ cording to the appropriate fields in the password entry.
Источник
How to Create a .Desktop File For Your Application in Linux
A .desktop file is simply a shortcut that is used to launch application in Linux. Without the .desktop file, your application won’t show up in the Applications menu and you can’t launch it with third-party launchers such as Synapse and Albert.
Most applications, when installed, will create the .desktop file automatically and place themselves in the Application menu for quick access. However, if you compile a program from source or download an app in archive format, this may not be the case and you may have to open the terminal to execute the binary every time you want to use it. Obviously, this can become a very tedious and troublesome step.
This article will describe how you can create a .desktop file for any application you use that you can launch from the Application menu.
Also read: How to Add App Drawers to Unity Launcher in Ubuntu
How to create Desktop launchers
A “.desktop” file is basically a simple text file that holds information about a program. It is usually placed in “
/.local/share/applications” or “/usr/share/applications/” depending whether you want the launcher to be accessible only for local account or for everyone. If you navigate to either directory in your File manager, you will see quite a few “.desktop” files that correspond to the installed apps on your computer.
For demonstration purposes, I will create a .desktop file for Super Tux Kart, a kart racing game which I like to play sometimes. A version is available in the Ubuntu repos, but this is often behind the latest stable version.
The only way to get the latest and greatest release is by downloading a tar archive, extracting it and executing a file which will launch the game.
You can follow along with whatever program you want to create a launcher for and it should work the same way.
Note: The following steps assume you have the archive for the program you want to create a launcher for in your “Downloads” folder.
1. Navigate to the directory where the archive is stored, right-click it and select “Extract here”.
2. Once the extraction is complete, Change to the newly created folder and find the executable. One you find it, right-click it click “Run” to launch the program, just to make sure it is working.
3. In some cases, you won’t see the “Run” option in the menu. This is often because the executable is a text file. You can get around this by executing it via the terminal or, if you use GNOME, click the Files menu in the top bar, and select “Preferences”.
4. Select the “Behavior” tab and choose the “Run them” option under “Executable Text Files”. Now the “Run” option should appear when you right-click the executable text file.
5. If you’ve confirmed that the application works when you launch it, you can exit it. Then launch your text editor and paste the following into the empty text file:
You need to change the “Exec” field to the path to the executable and “Name” field to the name of the application. Most programs would provide an icon somewhere in the archive so don’t forget to include that as well. In my case, the launcher file for Super Tux Kart looks like this:
6. Save the file in “
/.local/share/applications” folder as “application-name.desktop”. The “.local” folder is a hidden folder in your Home directory and you will have enable “Show Hidden Files” mode to view it. If you want it to be globally accessible, run the following command in the terminal:
7. Once done, just open the Applications menu on your desktop, and the application will be right there to use.
The method described here should work on all mainstream Linux based operating systems. Here’s another screenshot showing Super Tux Kart in elementary OS’s application launcher (slingshot)
Feel free to leave a comment below if you found this tutorial helpful.
Ayo Isaiah is a freelance writer from Lagos who loves everything technology with a particular interest in open-source software. Follow him on Twitter.
One comment
I tried doing the “sudo mv
/.local… ” command but it says “No such directory”. When i tried doing manually using copy and paste option, it gives error message saying permission denied because it is not trusted program. Hope you have solution for this issue 🙂
Comments are closed.
Popular Posts
RedMagic 6S Pro Review: Gaming Is Serious Business.
How to Boot to Recovery Mode (Safe Mode) in Ubuntu
Ubuntu Software Center Not Working? Here Are the Fixes
How to Stress Test a Graphics Card on Linux
How to Mount a Windows Share Folder on Linux
How to Mount Your iPhone as an External Drive in Ubuntu
How to Fix Ubuntu Freezing in VirtualBox
How to Fix «Repository Does Not Have Release File» Error
How to Combine PDF Files on Windows and Linux
How to Reset the Root Password in Linux
8 Reasons to Switch from Windows to Linux
Affiliate Disclosure: Make Tech Easier may earn commission on products purchased through our links, which supports the work we do for our readers.
Источник