DEV Community

Cover image for How to Create a Launcher for Your AppImage on Linux
Athreya aka Maneshwar
Athreya aka Maneshwar

Posted on

How to Create a Launcher for Your AppImage on Linux

AppImages are a great way to distribute and run applications on Linux without worrying about dependencies.

However, to make an AppImage easily accessible in application menus (like dmenu or your desktop environment's launcher), you need to integrate it properly.

Image description

Here's a friendly guide on how to do just that using the Cursor Editor AppImage as an example.

Step 1: Download Your AppImage

First, download the AppImage for your application. In this guide, we’re using Cursor Editor as an example.

cd ~/Downloads
Enter fullscreen mode Exit fullscreen mode

Step 2: Make the AppImage Executable

Grant execute permissions to the AppImage so it can be run:

chmod +x cursor.AppImage
Enter fullscreen mode Exit fullscreen mode

Step 3: Move the AppImage to a System Directory

For better organization, move the AppImage to a centralized location, such as /opt.

sudo mv cursor.AppImage /opt
Enter fullscreen mode Exit fullscreen mode

Step 4: Add an Icon

Download a logo or any other image you want to use as the app icon. Move the image to /opt:

mv cursor.png /opt
Enter fullscreen mode Exit fullscreen mode

Step 5: Create a Desktop Entry File

The desktop entry file allows the application to appear in your application menu or launcher. Create a .desktop file in the appropriate location:

vim ~/.local/share/applications/cursor.desktop
Enter fullscreen mode Exit fullscreen mode

Copy and paste the following content into the file:

[Desktop Entry]
Name=Cursor
Comment=Code Editor
Exec=/opt/cursor.AppImage
Icon=/opt/cursor.png
Terminal=false
Type=Application
Categories=Utility;
Enter fullscreen mode Exit fullscreen mode

Key Sections of the Desktop Entry File:

  • Name: The name displayed in your menu/launcher.
  • Comment: A short description of the application.
  • Exec: The command to run the application.
  • Icon: Path to the icon associated with the app.
  • Terminal: Set to false because this is a GUI app.
  • Type: Defines this as an application.
  • Categories: Helps the desktop environment organize the app (e.g., under "Utilities").

Bonus: Exiting Vim

If you’re new to vim, here’s how to save and exit the editor:

  1. Press ESC to ensure you're in normal mode.
  2. Type :wq (write and quit).
  3. Hit ENTER.

Step 6: Update the Desktop Database

Finally, update the desktop entry database to make the new entry visible:

update-desktop-database ~/.local/share/applications
Enter fullscreen mode Exit fullscreen mode

That’s It!

You’ve successfully integrated the Cursor Editor AppImage into your Linux system.

Now it will appear in your launcher (or dmenu if you’re using a window manager like i3).

You can also bind it to a keybinding for even faster access.

Automate the Process with a Script

If you’d rather skip the manual steps, you can use the following script to automate the entire process of integrating an AppImage into your system:

Script Overview

  1. Required Parameter: The AppImage file.
  2. Optional Parameter: An icon file to associate with the app.
  3. Requires Sudo: Run the script with sudo as it moves files to system directories.

Example Usage

sudo ./convert_appimage_to_desktop.sh cursor.AppImage cursor.png  
Enter fullscreen mode Exit fullscreen mode

Image description

#!/bin/bash

# Validate input
if [ -z "$1" ]; then
    echo "Error: No AppImage provided. Usage: $0 <AppImage> [Icon]"
    exit 1
fi

APPIMAGE=$1
if [[ ! "$APPIMAGE" =~ \.AppImage$ ]]; then
    echo "Error: The file must have a .AppImage extension."
    exit 1
fi

ICON=${2:-}
APPNAME=$(basename "$APPIMAGE" .AppImage)
APPIMAGE_DEST="/opt/$APPNAME.AppImage"
ICON_DEST="/opt/$(basename "$ICON")"

# Determine the correct home directory
if [ -n "$SUDO_USER" ]; then
    USER_HOME=$(getent passwd "$SUDO_USER" | cut -d: -f6)
else
    USER_HOME=$HOME
fi

DESKTOP_PATH="$USER_HOME/.local/share/applications"
DESKTOP_FILE="$DESKTOP_PATH/$APPNAME.desktop"

# Function to show a loader animation
show_loader() {
    echo -ne "$1"
    for i in {1..3}; do
        echo -ne "."
        sleep 0.5
    done
    echo -e " \033[32mDone!\033[0m"
}

# Make AppImage executable
chmod +x "$APPIMAGE"
show_loader "Making AppImage executable"

# Move AppImage to /opt
sudo mv "$APPIMAGE" "$APPIMAGE_DEST"
show_loader "Moving AppImage to /opt"

# Move icon to /opt if provided
if [ -n "$ICON" ]; then
    if [ ! -f "$ICON" ]; then
        echo "Error: Icon file $ICON does not exist."
        exit 1
    fi
    sudo mv "$ICON" "$ICON_DEST"
    show_loader "Moving icon to /opt"
fi

# Navigate to the target directory
cd "$DESKTOP_PATH" || exit

# Create the .desktop file
touch "$APPNAME.desktop"
cat > "$APPNAME.desktop" <<EOF
[Desktop Entry]
Name=$APPNAME
Comment=Application launcher for $APPNAME
Exec=$APPIMAGE_DEST
Terminal=false
Type=Application
Categories=Utility
$( [ -n "$ICON" ] && echo "Icon=$ICON_DEST" || echo "" )
EOF
show_loader "Creating .desktop file"

# Update desktop database
update-desktop-database "$DESKTOP_PATH" &>/dev/null
show_loader "Updating desktop database"

# Final message
cat <<EOF

All set! Your application has been successfully added to the menu.
Details: 
  AppImage: $APPIMAGE_DEST
  Icon: ${ICON:+$ICON_DEST (or not set)}
  Desktop File: $DESKTOP_FILE

You can now find "$APPNAME" in your application menu! 🎉
EOF
Enter fullscreen mode Exit fullscreen mode

Image description

Wrap-Up

That’s all, folks! Now you know how to make any AppImage accessible from your menu or startup system.

Enjoy the convenience of launching your favorite apps with ease!


I’ve been working on a super-convenient tool called LiveAPI.

It’s designed to make API documentation effortless for developers.

With LiveAPI, you can quickly generate interactive API documentation that allows users to execute APIs directly from the browser.

Image description

If you’re tired of manually creating docs for your APIs, this tool might just make your life easier.

Top comments (0)