🤖

Ubuntu 24.04にcursorをインストールしてデスクトップに登録する

2025/01/08に公開

検証環境

  • Distribution: Kubuntu 24.04
  • Desktop Environment: KDE Plasma 5.27.11
  • Graphics Platform: X11
  • Kernel: 6.8.0-51-generic (64-bit)
  • PC: ThinkPad E14 Gen 6 AMD
  • Cursor version: cursor-0.44.11x86_64.AppImage

インストール

Bash Script for Cursor App Desktop Integration on Linux Environments #844 を参考に、一部修正を加えました。

以下のスクリプトを適当な場所に保存し、実行してください。

ちなみにこの記事も以下のスクリプトでインストールしたCursorで書いています。
どんどん補完されるし書き換えも簡単で非常に便利です。

install_cursor_to_ubuntu2404.sh
#!/bin/bash
set -euo pipefail

# Step 1: Declare installation paths and variables
CURSOR_DIR="$HOME/Applications/cursor"
APPIMAGE_DIR="$CURSOR_DIR/images"
EXTRACTED_DIR="$CURSOR_DIR/squashfs-root"
BIN_PATH="$EXTRACTED_DIR/cursor"

DESKTOP_DIR="$HOME/.local/share/applications"
DESKTOP_FILE_PATH="$DESKTOP_DIR/cursor.desktop"
SCRIPT_PATH="$HOME/.local/bin/cursor"
ICON_PATH="$HOME/.local/share/icons/cursor.png"
LOG_FILE_PATH="$HOME/.local/share/cursor/cursor.log"

DOWNLOAD_URL="https://downloader.cursor.sh/linux/appImage/x64"
APPIMAGE_PREFIX="cursor-"
APPIMAGE_SUFFIX="x86_64.AppImage"
MAX_KEEP_INSTALLED_VERSIONS=3

# Step 2: Create required directories
mkdir -p "$APPIMAGE_DIR" \
  "$DESKTOP_DIR" \
  "$(dirname "$SCRIPT_PATH")" \
  "$(dirname "$ICON_PATH")" \
  "$(dirname "$LOG_FILE_PATH")"

cd "$CURSOR_DIR"

# Step 3: Download latest version if not already installed

# 3.1: Check current installation
CURRENT_APPIMAGE_PATH=$(find "$APPIMAGE_DIR" -name "$APPIMAGE_PREFIX*$APPIMAGE_SUFFIX" -printf '%f\n' \
  | sort -r \
  | head -n 1)
CURRENT_VERSION=$(basename "$CURRENT_APPIMAGE_PATH" | sed "s/^$APPIMAGE_PREFIX//; s/$APPIMAGE_SUFFIX$//")

# 3.2: Fetch latest version information
LATEST_APPIMAGE=$(curl --range 0-0 -si "$DOWNLOAD_URL" \
  | grep -i 'Content-Disposition' \
  | awk -F'filename=' '{print $2}' \
  | tr -d '\r\n"')
LATEST_VERSION=$(echo "$LATEST_APPIMAGE" | sed "s/^$APPIMAGE_PREFIX//; s/$APPIMAGE_SUFFIX$//")

echo "Current: $CURRENT_VERSION"
echo "Latest : $LATEST_VERSION"

# 3.3: Download new version if not installed
if [ "$CURRENT_VERSION" != "$LATEST_VERSION" ]; then
  echo "Downloading $LATEST_APPIMAGE..."
  trap "rm -f ""$APPIMAGE_DIR"/"$LATEST_APPIMAGE""; echo -e '\nDownload cancelled. Cleaning up...'; exit 1" SIGINT
  curl -LOJ --remove-on-error "$DOWNLOAD_URL" --output-dir "$APPIMAGE_DIR"
  chmod +x "$APPIMAGE_DIR/$LATEST_APPIMAGE"

  # Remove old AppImages, keeping only a constant number of versions
  find "$APPIMAGE_DIR" -name "$APPIMAGE_PREFIX*$APPIMAGE_SUFFIX" \
    | sort -r \
    | tail -n +$((MAX_KEEP_INSTALLED_VERSIONS + 1)) \
    | xargs rm -f
else
  echo "Already downloaded the latest version ($LATEST_VERSION)"
fi

# Step 4: Extract application binary
rm -rf "$EXTRACTED_DIR"
"$APPIMAGE_DIR/$LATEST_APPIMAGE" --appimage-extract
chmod +x "$BIN_PATH"

# Step 5: Configure application launcher
cat <<EOF > "$SCRIPT_PATH"
#!/bin/bash

# Show version number when --version or -v flag is used
if [ "\$1" = "--version" ] || [ "\$1" = "-v" ]; then
  echo "Cursor version: $LATEST_VERSION"
  exit 0
fi  

"$BIN_PATH" --no-sandbox "\$@" 2>&1 \
| grep -v '@todesktop/runtime: skipping autoUpdater initialization because application is not in AppImage.' \
>> "$LOG_FILE_PATH"
EOF
chmod +x "$SCRIPT_PATH"

# Step 6: Install application icon
cp "$EXTRACTED_DIR/cursor.png" "$ICON_PATH"

# Step 7: Create desktop integration
if [ ! -f "$DESKTOP_FILE_PATH" ] \
 || [ "$(grep -oP '(?<=^Exec=).*' "$DESKTOP_FILE_PATH")" != "$SCRIPT_PATH" ] \
 || [ "$(grep -oP '(?<=^Icon=).*' "$DESKTOP_FILE_PATH")" != "$ICON_PATH" ]; then
  cat <<EOF > "$DESKTOP_FILE_PATH"
[Desktop Entry]
Name=Cursor
Exec=$SCRIPT_PATH
Terminal=false
Type=Application
Icon=$ICON_PATH
StartupWMClass=Cursor
Comment=AI-powered code editor
MimeType=x-scheme-handler/cursor;
Categories=Utility;Development
EOF
  chmod +x "$DESKTOP_FILE_PATH"
  echo "Desktop shortcut created successfully"
fi

# Step 8: Update system's desktop database
update-desktop-database "$DESKTOP_DIR"

ポイント

  • 最新のCursorをチェックし、更新があれば自動でダウンロードするようにした
  • AppImageを使うとmiseがエラーを吐くので、バイナリで実行するようにした
  • VS Codeのcodeのように、ターミナルからcursorと打つとCursorが起動するようにした
    • ※事前に${HOME}/.local/binにPATHを通しておく必要があります
    • 本来は元々それ用のオプションがあるが、うまく動かなかったので自分で追加した
    • cursor --version (または cursor -v) と打つとCursorのバージョンが表示されるようにした

参考にしたサイト

Discussion