ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

bashスクリプトで画像等GUIを表示しても、フォーカスを失わずにスクリプトを継続実行する

(2023-04-02 初稿 - 2023-04-08 修正)

新年度、初投稿。2023年度もよろしくです。

最近、bashスクリプトが楽しくて、気がつくとスクリプトをいじっている。(^^ゞ

さて、長いタイトルになってしまったが、最近、写真に名前を付けるスクリプトbashで作成しており、スクリプトの中で写真を表示するとフォーカスが写真を表示するプログラム(本投稿では、imagemagickのdisplayコマンド)に移ってしまい、スクリプトの継続が面倒になってしまう。

この解決策を検索すると、以下のサイトを発見。

質問者の方も、筆者同様の悩みを抱えているようで、ちゃんと解決策も紹介されていた。多謝 m(__)m

上記サイトで初めて知ったxdotool。これは、bashスクリプトGUIをマクロ的に使うこともできそうで、とても便利なコマンド。

Debian系でのインストールは以下のとおり。

$ sudo apt install xdotool

で、上記を参考に作成したスクリプトは以下のとおり。

#!/usr/bin/bash
# test script for display jpeg images
tar_dir=~/Desktop                                # 適当に変更してね
tar_ary=($(ls -tr1 $tar_dir/*.JPG))              # 画像ファイルを1枚ずつ配列に
for i in ${!tar_ary[@]}; do                      # 画像ファイルを一枚ずつ処理
    wid=$(xdotool getwindowfocus)                    # bashを実行中のterminalのIDを保存
    display -resize 800x600 ${tar_ary[i]} &      # 画像の表示
    pid=$!                                            # displayのPIDを保存
    sleep 0.5
    xdotool windowfocus $wid                          # focusをterminalに戻す
    read -r -s -n1 char                                # キー入力の読み取り
    case $char in
        "q") kill $pid; break ;;                      # qだったら終了
        *) echo $char ;; 
    esac
    kill $pid                                      # displayをkillして次の画像へ
done

皆さんの参考になれば…(^^)

 

関連ページ