Zenity: シェルスクリプトでGTK+ダイアログを構築する
Zenityは、コマンドラインを使用してLinuxでグラフィカルダイアログボックスを作成するためのツールです。GTK+を使用しており、グラフィカルユーザーインターフェイス(GUI)を作成するためのツールキットであるため、スクリプトに視覚的要素を簡単に追加できます。
Zenity はシェルスクリプトに非常に便利であり、情報ボックス、ファイルセレクタ、プログレスバーなどのダイアログを通じてユーザーと対話するための簡単な方法を提供します。
この記事では、Zenityの動作の仕組み、作成できるダイアログボックスの種類、そしてシェルスクリプトで効果的に使用する方法について詳しく説明します。
なぜゼニティを使うのか?
シェルスクリプトを書くとき、ユーザーとの対話は通常、ターミナルでのテキスト入力/出力を通じて行われます。しかし、ターミナルコマンドに不慣れな人々を対象としたスクリプトの場合、よりユーザーフレンドリーな体験を提供したいシナリオもあります。
Zenity は、この問題を解決するために、理解しやすく使いやすいグラフィカルなダイアログボックスを作成できるようにします。
LinuxにおけるZenityのインストール
ほとんどの現代のLinuxディストリビューションにはZenityがプリインストールされており、ターミナルに次のコマンドを入力することで、あなたのシステムにZenityが利用可能かどうかを確認できます:
zenity --version
4.0.1
Zenityがインストールされている場合、このコマンドはバージョン番号を表示します。インストールされていない場合は、パッケージマネージャーを使用してインストールできます。
sudo apt install zenity [On Debian, Ubuntu and Mint]
sudo yum install zenity [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/zenity [On Gentoo Linux]
sudo apk add zenity [On Alpine Linux]
sudo pacman -S zenity [On Arch Linux]
sudo zypper install zenity [On OpenSUSE]
sudo pkg install zenity [On FreeBSD]
LinuxにおけるZenityの基本的な使用法
Zenityは非常に使いやすく、さまざまなオプションを使用してコマンドラインから異なる種類のダイアログボックスを呼び出すことによって機能します。各オプションは特定の種類のダイアログボックスに対応しています。
例1: 情報ダイアログの表示
Zenityの最もシンプルな使い方の一つは、情報ダイアログを表示することです。
zenity --info --text="This is an information dialog"
例 2: 警告ダイアログの表示
次のコマンドを使用して警告ダイアログを表示することもできます:
zenity --warning --text="This is a warning message"
例3: 質問ダイアログの表示
質問ダイアログは、ユーザーにはい/いいえの質問をするために使用できます。結果は、終了コードとして返されます。
if zenity --question --text="Do you want to continue?"; then
echo "User selected Yes"
else
echo "User selected No"
fi
例4:ファイル選択ダイアログを表示する
Zenityは、ファイル選択ダイアログを開くためにも使用でき、ユーザーがシステムからファイルを選択できるようにします。
FILE=$(zenity --file-selection --title="Choose a file")
echo "You selected: $FILE"
例 5: テキスト入力ダイアログの表示
ユーザーにテキストを入力するよう促すダイアログボックスを作成することができ、これはユーザー入力を取得するために便利です。
USER_INPUT=$(zenity --entry --title="Input required" --text="Enter your name:")
echo "You entered: $USER_INPUT"
例6: パスワードダイアログの表示
ユーザーにパスワードを尋ねたい場合は、パスワードダイアログを使用できますが、入力は表示されません。
PASSWORD=$(zenity --password --title="Enter your password")
echo "Password entered: $PASSWORD"
例7:プログレスバーのダイアログを表示する
Zenityは進行中のタスクを示す際に便利なプログレスバーを表示できます。
(
for i in {1..100}; do
echo $i
sleep 0.1
done
) | zenity --progress --title="Task in progress" --text="Please wait..." --percentage=0
例8: エラーダイアログの表示
スクリプトに何か問題が発生したときにエラーダイアログを表示することができます:
zenity --error --text="An error occurred!"
例9: リストダイアログの表示
Zenity は、ユーザーが選択できるオプションのリストを表示できます:
zenity --list --title="Choose an option" --column="Options" "Option 1" "Option 2" "Option 3"
シェルスクリプトでZenityを使用する
Zenity はシェルスクリプトにシームレスに統合され、よりユーザーフレンドリーな体験を提供します。
ここに、さまざまなZenityダイアログを使用する簡単なスクリプトの完全な例があります。
#!/bin/bash
Welcome message
zenity --info --text="Welcome to the user setup script"
Ask for user's name
USER_NAME=$(zenity --entry --title="User Information" --text="Please enter your name:")
Ask for confirmation
if zenity --question --text="Is your name $USER_NAME?"; then
zenity --info --text="Thank you, $USER_NAME"
else
zenity --error --text="Name mismatch. Exiting script."
exit 1
fi
File selection
FILE=$(zenity --file-selection --title="Select a file to process")
zenity --info --text="You selected: $FILE"
Display progress
(
for i in {1..100}; do
echo $i
sleep 0.1
done
) | zenity --progress --title="Processing file" --text="Please wait while we process the file..." --percentage=0
zenity --info --text="Process complete!"
このスクリプトは、ユーザーを歓迎することから始まり、次に名前を尋ね、名前を確認し、ファイルを選択するように求め、ファイルが処理されている間にプログレスバーを表示します。これは、Zenityを使用して本来はテキストベースのスクリプトにグラフィカルインターフェースを追加する方法を示しています。
Zenityにおけるエラー処理
Zenityはユーザーアクションに基づいて異なる終了コードを返します。これらのコードを理解することで、スクリプト内でエラーやユーザーキャンセルを適切に処理することができます。
- 終了コード 0: ユーザーが「OK」をクリックしたか、オプションを選択しました。
- エグジットコード 1: ユーザーが「キャンセル」をクリックするか、ダイアログを閉じました。
- 終了コード -1: 何らかのエラーが発生しました。
これらの終了コードを使用して、異なるユーザーの応答を処理できます。
if zenity --question --text="Do you want to proceed?"; then
echo "Proceeding..."
else
echo "Action canceled by the user."
exit 1
fi
結論
Zenity はシェルスクリプトでグラフィカルなダイアログボックスを作成するための非常に便利なツールです。シンプルなファイルセレクタ、インタラクティブな質問ダイアログ、またはプログレスバーを構築しているかどうかにかかわらず、Zenityはユーザーフレンドリーなインターフェースを提供することでスクリプトを向上させることができます。
Zenityを使うことで、コマンドラインアプリケーションやシェルスクリプトを非技術的なユーザーにとってより使いやすくすることができます。









