DEV Community

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

Posted on

5 3 3 3 3

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.

Permit.io Launch week

Permit CLI Launch Week- Fully CLI-Based Access Control Is Here!

Join us for 5 days of live sessions, feature drops, and daily raffles. Discover how Permit.io’s new CLI simplifies fine-grained auth for developers.

Sign up

Top comments (0)

Permit.io Launch week

Auth that fits in your CI/CD

Permit CLI Launch Week is here! Live demos, daily drops, and giveaways — see how to automate fine-grained access control straight from your terminal.

Sign up

👋 Kindness is contagious

Explore a trove of insights in this engaging article, celebrated within our welcoming DEV Community. Developers from every background are invited to join and enhance our shared wisdom.

A genuine "thank you" can truly uplift someone’s day. Feel free to express your gratitude in the comments below!

On DEV, our collective exchange of knowledge lightens the road ahead and strengthens our community bonds. Found something valuable here? A small thank you to the author can make a big difference.

Okay