How can I register an .appimage file (specifically, the tiled map editor found here) as a desktop app? (Like Firefox -- I can launch it by typing 'Firefox' into search rather than opening up a console and typing /path/to/directory/firefox.ext)
5 Answers
Create a .desktop file that points to the application -- here is an example of a .desktop for minecraft:
[Desktop Entry]
Type=Application
Name=Minecraft
Comment=Minecraft
Icon=/home/bram/Applications/Minecraft/icon.png
Exec=/home/bram/Applications/Minecraft/minecraft
Terminal=false
Categories=Minecraft;game
Put that file in ~/.local/share/applications
- 5,719
- 1
- 54
- 59
You can also use AppImageLauncher which provides desktop integration along with some additional features. Unlike appimaged, it:
- asks for confirmation before creating desktop entry for an AppImage.
- works with AppImages in any location
- doesn't use a daemon for monitoring, so more efficient.
Specifics of how it works are explained in the wiki. It can be installed directly from the packages provided in the releases using the command:
sudo dpkg -i <downloaded-package-name>.deb
- 616
According to appimagekit, the proper method is to use appimaged for .AppImage file registration.
For 64-bit systems:
wget "https://github.com/AppImage/appimaged/releases/download/continuous/appimaged-x86_64.AppImage"
chmod +x appimaged-x86_64.AppImage
./appimaged-x86_64.AppImage --install
The binary will copy itself to /home/ubuntu/.local/bin/appimaged and then delete the downloaded copy upon install. Then you must logout and back in.
At time of reading, it will monitor and register the following locations:
~/Downloads
~/.local/bin
~/bin
/Applications
/isodevice/Applications
/isofrom/Applications
/run/archiso/img_dev/Applications
/opt
/usr/local/bin
To show in the menu, this assumes you've placed a desktop file in the correct location inside your .AppImage file, usually /usr/share/applications/<myproject>.desktop.
If you search in the application tray, you should find your application shortly. The daemon should also register any application-specific file associations assuming the mime xml is also bundled, usually /usr/share/mime/packages/<myproject>.xml. If the icon does not appear correctly, you may have to logout and back in a second time. This can happen if the icon was incorrectly cached while testing out images.
- 36,890
- 56
- 97
- 151
- 1,072
I've found the app Pin It! by Ryo Nakano ( https://ryonakano.github.io/ ) a perfect solution
- 1
#!/bin/bash
# Script to create a .desktop file for an application using Zenity GUI
# Check if Zenity is installed
if ! command -v zenity &> /dev/null; then
echo "Zenity is not installed. Please install it to run this GUI script."
echo "On Debian/Ubuntu: sudo apt install zenity"
echo "On Fedora: sudo dnf install zenity"
echo "On Arch: sudo pacman -S zenity"
exit 1
fi
# Get Application Details via Zenity
APP_NAME=$(zenity --entry \
--title="Application Name" \
--text="Enter the Application Name (e.g., MyCustomApp):" \
--width=400 \
--height=100)
if [ -z "$APP_NAME" ]; then
zenity --error --title="Error" --text="Application Name cannot be empty. Exiting."
exit 1
fi
EXEC_PATH=$(zenity --file-selection \
--title="Select Application Executable" \
--file-filter="Executables | *.sh *.py *.pl *.AppImage *.*" \
--confirm-overwrite) # Allow selecting any file type
if [ -z "$EXEC_PATH" ]; then
zenity --error --title="Error" --text="Executable path cannot be empty. Exiting."
exit 1
fi
APP_COMMENT=$(zenity --entry \
--title="Application Description" \
--text="Enter a short description for the application:")
ICON_PATH=$(zenity --file-selection \
--title="Select Application Icon" \
--file-filter="Images | *.png *.svg *.xpm *.jpg *.jpeg *.gif" \
--file-filter="All Files | *.*")
# Optional: Suggest common icon directories
if [ -z "$ICON_PATH" ]; then
zenity --question \
--title="Icon Path" \
--text="No icon selected. Do you want to try a standard icon name (e.g., 'firefox') instead of a file path?"
if [ $? -eq 0 ]; then
ICON_PATH=$(zenity --entry \
--title="Icon Name" \
--text="Enter a standard icon name (e.g., firefox, gimp):")
if [ -z "$ICON_PATH" ]; then
zenity --warning --title="Warning" --text="No icon specified. The application may appear without an icon."
ICON_PATH="" # Ensure it's empty if user backs out
fi
else
zenity --warning --title="Warning" --text="No icon specified. The application may appear without an icon."
ICON_PATH="" # Ensure it's empty if user backs out
fi
fi
CATEGORIES=$(zenity --entry \
--title="Application Categories" \
--text="Enter Categories (comma-separated, e.g., Utility;Development;Game;)\n(See https://specifications.freedesktop.org/menu-spec/latest/apa.html for a list of categories):")
# Determine Terminal Requirement
RUN_IN_TERMINAL=$(zenity --question \
--title="Terminal Requirement" \
--text="Does this application need to run in a terminal?")
TERMINAL_SETTING="false"
if [ $? -eq 0 ]; then # Zenity returns 0 for OK/Yes, 1 for Cancel/No
TERMINAL_SETTING="true"
fi
# Creates the .desktop File Content
DESKTOP_FILE_CONTENT="[Desktop Entry]
Name=${APP_NAME}
Comment=${APP_COMMENT}
Exec=${EXEC_PATH}
Icon=${ICON_PATH}
Terminal=${TERMINAL_SETTING}
Type=Application
Categories=${CATEGORIES}
"
# Choose Installation Location
INSTALL_LOCATION_CHOICE=$(zenity --list \
--title="Installation Location" \
--text="Where do you want to install the .desktop file?" \
--radiolist \
--column="Choice" --column="Location" \
TRUE "For current user only (~/.local/share/applications/)" \
FALSE "For all users (requires root privileges - /usr/share/applications/)")
DESKTOP_DIR=""
if [ "$INSTALL_LOCATION_CHOICE" == "For current user only (~/.local/share/applications/)" ]; then
DESKTOP_DIR="$HOME/.local/share/applications"
elif [ "$INSTALL_LOCATION_CHOICE" == "For all users (requires root privileges - /usr/share/applications/)" ]; then
DESKTOP_DIR="/usr/share/applications"
else
zenity --error --title="Error" --text="Invalid choice for installation location. Exiting."
exit 1
fi
# Creates a directory if it doesn't exist
mkdir -p "$DESKTOP_DIR"
DESKTOP_FILE_PATH="${DESKTOP_DIR}/${APP_NAME}.desktop"
# Deprecated for pkexec can still use sudo tee if you want
#if [ "$INSTALL_LOCATION_CHOICE" == "For all users (requires root privileges - /usr/share/applications/)" ]; then
# echo "$DESKTOP_FILE_CONTENT" | sudo tee "$DESKTOP_FILE_PATH" > /dev/null
#if [ $? -ne 0 ]; then
#zenity --error --title="Error" --text="Failed to write desktop file to system-wide location. You may need to enter your password for 'sudo'."
#exit 1
#fi
#sudo chmod +x "$DESKTOP_FILE_PATH"
#else
#echo "$DESKTOP_FILE_CONTENT" > "$DESKTOP_FILE_PATH"
#chmod +x "$DESKTOP_FILE_PATH"
#fi
if [ "$INSTALL_LOCATION_CHOICE" == "For all users (requires root privileges - /usr/share/applications/)" ]; then
# Creates a temporary file to hold content
TEMP_DESKTOP_FILE=$(mktemp)
echo "$DESKTOP_FILE_CONTENT" > "$TEMP_DESKTOP_FILE"
# Uses pkexec to copy and set permissions
pkexec cp "$TEMP_DESKTOP_FILE" "$DESKTOP_FILE_PATH"
if [ $? -ne 0 ]; then
zenity --error --title="Error" --text="Failed to copy desktop file with root privileges. pkexec failed."
rm "$TEMP_DESKTOP_FILE"
exit 1
fi
pkexec chmod +x "$DESKTOP_FILE_PATH"
rm "$TEMP_DESKTOP_FILE" # Clean up temp file
else
echo "$DESKTOP_FILE_CONTENT" > "$DESKTOP_FILE_PATH"
chmod +x "$DESKTOP_FILE_PATH"
fi
zenity --info --title="Success" --text="Desktop file created successfully!\nPath: ${DESKTOP_FILE_PATH}"
# Optional: Update Desktop Database (for some desktop environments)
zenity --info --title="Updating Cache" --text="Attempting to update desktop icon cache (may require root for system-wide changes)..."
if command -v update-desktop-database &> /dev/null; then
if [ "$INSTALL_LOCATION_CHOICE" == "For all users (requires root privileges - /usr/share/applications/)" ]; then
sudo update-desktop-database "$DESKTOP_DIR"
else
update-desktop-database "$DESKTOP_DIR"
fi
else
zenity --warning --title="Warning" --text="update-desktop-database command not found. You may need to manually update or log out/in."
fi
zenity --info \
--title="Completion" \
--text="Your application '${APP_NAME}' should now appear in your application menu.\n\nIf it doesn't, try logging out and logging back in, or restarting your desktop environment."
exit 0
To make the process 'less' tedious here is a code sample just basic interface but hey it works.. Just save it as an sh file and give it executable permission.
OR just download the file and set executable permission Appimage Integrator
- 1
- 2