Ubuntuデスクトップ環境でコンテキストメニューからシェルを実行する方法

今回は。Ubuntu Desktop でコンテキストメニューからシェうスクリプトを実行する方法を紹介する。

コンテキストメニューとは、Windowsとかでファイルを右クリックすると表示される縦長のメニューのこと。

今回はそのメニューから zip/rar の画像の解凍をできるようにしたい。

環境について

  • Xubuntu 24.04

私自身はUbuntuではなくXubutnuを使っているが、 どちらも同じようにできる。

必要なツールをインストール

まずは以下をインストールする

sudo apt install -y zenity  unzip unrar

zenityとは、シェルからGUIを作成できるツール。

GNOME製であり、割と色々なことがシンプルにできる。

GNOME / zenity · GitLab

コンテキストメニューの作り方

まずは実行したいシェルスクリプトを作成していく。

/usr/local/bin/extract-archive.sh に作成する。

#!/bin/bash

FILE="$1"
DIR=$(dirname "$FILE")
BASE=$(basename "$FILE")
NAME="${BASE%.*}"
EXT="${BASE##*.}"
DEST="$DIR/$NAME"

mkdir -p "$DEST"

case "${EXT,,}" in
  zip)
    if ! command -v unzip &>/dev/null; then
        zenity --error --text="unzip がインストールされていません。\n\nsudo apt install -y unzip"
        exit 1
    fi
    unzip "$FILE" -d "$DEST"
    ;;
  rar)
    if ! command -v unrar &>/dev/null; then
        zenity --error --text="unrar がインストールされていません。\n\nsudo apt install -y unrar"
        exit 1
    fi
    unrar x "$FILE" "$DEST/"
    ;;
  *)
    zenity --error --text="非対応の形式: $EXT\n\n .zip .rar しか対応していません。"
    exit 1
    ;;
esac

やっていることは引数で与えられた圧縮ファイルを同じディレクトリに同じ名前で解凍しているだけ。

スクリプトを配置する場所は /usr/local/bin が良いだろう・ あと、忘れず実行権限をつけておこう。

sudo chmod +x /usr/local/bin/extract-archive.sh

次に /usr/share/applications/extract-archive.desktop を作る。

[Desktop Entry]
Version=1.0
Type=Application
Name=Zip/Rar解凍
Comment=ZIP/RARファイルを解凍する
Exec=/usr/local/bin/extract-archive.sh %f
Icon=archive-manager
Terminal=false
MimeType=application/zip;application/x-rar-compressed;application/x-rar;
Categories=Utility;

このdesktopファイルとは、GUIからプログラムを呼び出すように設定ができるもの。

Exec の項目では引数に %f を渡しているが、これは選択したファイルの絶対パスが引数として与えられる。

ここまで来たら、以下のコマンドを実行してubuntuに登録をする。

sudo update-desktop-database /usr/share/applications/

ここまで来たら、ファイルマネージャを開いて適当なzipファイルなどを右クリックすると、 「Zip/Rar解凍 を開く」という項目が出る。