ROX-Filer 拡張 'JP' 仕様

こ の文章は ROX-Filer を拡張して、rox コマンド実行時に、指定スク リプト
を同時実行させる為の暫定仕様です。


    ROX-Filer バイナリ実行シーケンス
    rox startup 拡張仕様
    rox startup 拡張の利用
    拡張例
    

----------------------------------------------------------------------

・ROX-Filer バイナリ実行シーケンス

    コマンドラインやシェルスクリプトから rox コマンドが呼び出された時、
    ROX-Filer バイナリ(ROX-Filer 実行ファイルの実体)は、以下の手順を経
    て実行されます。

    以下 ROX-Filer が /usr 以下にインストールされているものとします。
    インストール先が /usr でない場合は適宜読み替えて下さい。

    1.
コマンドラインやシェルスクリプトから rox コマンドを実行。
    2.実行パスより検索された 
/usr/bin/rox が呼び出される。
    3./usr/bin/rox スクリプトにより、/usr/apps/ROX-Filer/AppRun
      スクリプト が呼び出される。
    4./usr/apps/ROX-Filer/AppRun スクリプトにより、
      /usr/apps/ROX-Filer/ROX-Filer バイナリ実行ファイルが呼び出される。

    以上のように、ROX-Filer 関連の実行ファイルは、
       
/usr/bin/rox (シェルスクリプト)
       
/usr/apps/ROX-Filer/AppRun (シェルスクリプト)
        /usr/apps/ROX-Filer/ROX-Filer (バイナリ実行ファイル)
    と、三種類存在します。
    従って、ROX-Filer を拡張するには、上記三種類のいずれかに手を加える
    ことになります。

----------------------------------------------------------------------

・rox startup 拡張仕様

    当拡張仕様では、ROX-Filer バイナリ実行シーケンスで述べた三つの実行
    ファイルの内 /usr/bin/rox に手を加え、rox コマンド実行時、
       
/usr/apps/ROX-Filer/AppRun
    を呼び出す直前に、ホームディレクトリのスタートアップスクリプトを実
    行させる為の書き替えを行います。
   
/usr/bin/rox の内容は、

       
#! /bin/sh
exec /usr/apps/ROX-Filer/AppRun "$@"


    と、とてもシンプルで、単に /usr/apps/ROX-Filer/AppRun を呼び出して
    いるだけです。

    当拡張仕様では、 こ れを以下のように書き替えます。

       
#! /bin/sh
# Extending by 'ROX extend JP spec - stasrtup'.
if [ -x $HOME/bin/rox_startup ]; then
    exec $HOME/bin/rox_startup &
fi
exec /usr/apps/ROX-Filer/AppRun "$@"


    (二行目は、当仕様による拡張である事の識別に使用します。これは当拡
    張を無効にする事を容易にする為の仕様です)


    つまり、
      ・
$HOME/bin/rox_startup が実行可能ファイルとして存在するな ら、
        
/usr/apps/ROX-Filer/AppRun 実行直前に、$HOME/bin/rox_startup
        を実行する。
      ・$HOME/bin/rox_startup が実行可能ファイルとして存在しない
時 は、
        従来通り 
/usr/apps/ROX-Filer/AppRun のみを実行する。
    という書き替えであり、拡張の実体は各ユーザーの

    $HOME/bin/rox_startup
に委ねられるという事です。

      従って、この拡張を利用するアプリケーションは、$HOME/bin/rox_startup
      から呼び出されるように作られる(次項)必要があります。

    ※ 上記の拡張は、拡張を利用するアプリケーション側で、拡張がまだ行
    われていない事を確認の上、行われる必要が有ります。


----------------------------------------------------------------------

・rox startup 拡張の利用

    次に、この拡張を利用するアプリケーション側で、次のような
    $HOME/bin/rox_startup の実体を用意します。

    (以下の、AppName は拡張を利用するアプリケーション、Prog
AppName
    により用意された、
rox コマンド実行時に呼び出され るプログラム、
    /Path/to/Prog はその絶対パスです)

         #!/bin/bash
# AppName
if [ -x "/Path/to/Prog" ]; then
    "
/Path/to/Prog" &
fi


    (二行目は、AppName による拡張である事の識別に使用します。これは主
    として、
AppName のアンインストールに容易に対応出来るようにする為の
    仕様です)


    三行目から五行目で、拡張によって、rox コマンド実行時に実際に呼び出
    す実行ファイルを絶対パスで呼び出します。

    以上の 2〜5 行目の計四行が、拡張を利用するアプリケーションのエント
    リ・スロットの一単位となります。

    以降、拡張を利用するアプリケーションごとに、自らが利用するエント
    リ・スロットを追加登録していきます。


         #!/bin/bash
# App1
if [ -x "/path/to/Prog1" ]; then
    "/path/to/Prog1 &
fi
# App2
if [ -x "/path/to/Prog2" ]; then
    "/path/to/Prog2 &
fi
.....

    結果として、上のような内容の $HOME/bin/rox_startup が、rox コマン
    ドが実行されるたびに呼び出されるようになります。
 
    実際にエントリ・スロットを用意するには、以下のようなスクリプトを実
    行すると良いでしょう。

    ※ app_name に拡張を利用するアプリケーション名、app_path に rox コ
    マンドが実行されるたびに呼び出して欲しい実行可能ファイルの絶対パス
    を代入して次のスクリプトを実行します。

script1
         # $HOME/bin/rox_startup が存在しない時は新規に作成
if ! [ -x $HOME/bin/rox_startup ]; then
    echo "#!/bin/bash" > $HOME/bin/rox_startup
    chmod u+x $HOME/bin/rox_startup
fi
# app_name のエントリが存在しない時は追加
if [ -z "`grep "# $app_name" $HOME/bin/rox_startup`" ]; then
    cat << EOF >> $HOME/bin/rox_startup
# $app_name
if [ -x "$app_path" ]; then
    "$app_path" &
fi
EOF
fi


    上記の実行により、既に
$HOME/bin/rox_startup が存在する場合も、存
    在しない場合も、適切に app_name 用のエントリ・スロットを追加し、又
    
app_name による多重追加を防ぐことができます。

----------------------------------------------------------------------

・ 拡張例

    ここでは AppDirGen の場合の拡張の例を述べておきます。

    1.AppDirGen がホームディレクトリにインストールされる時、$HOME/bin
    以下に、rox_startup を生成します。この時、

        1)まだ $HOME/bin/rox_startup が存在しない場合は、まず、
         #!/bin/bash
        という内容の
$HOME/bin/rox_startup を生成し、実行属性を設定し
        ます。
        ($HOME/bin/rox_startup が既に存在する場合は、この処理は行いま
        せん)

        2)
$HOME/bin/rox_startup に"# AppDirGen" 識別行が存在しない場合
        は、以下の 4行
         # AppDirGen
if [ -x "/home/hoge/Apps/AppDirGen/AppDirGen_extend" ]; then
    "/home/hoge/Apps/AppDirGen/AppDirGen_extend" &
fi
        を、$HOME/bin/rox_startup に書き加えます
        (
"# AppDirGen" 識別行が既に存在する場合、つまり再インストール
        などの場合は、この処理は行いません)

        以上の拡張処理は、前項 script1 同様のスクリプトを、
           
app_name=AppDirGen
           
app_path=/home/hoge/Apps/AppDirGen/AppDirGen_extend
        で、呼び出す事で自動化できます。

    これらの処理により、
/usr/bin/rox が拡張され、か つ「更新通知を有効
     にする」に設定されている場合に、
      "/home/hoge/Apps/AppDirGen/AppDirGen_extend"
    を実行する準備が整えられます。

    2.AppDirGen アイコンを右クリックし「更新通知を有効にする」を実行し、
    「実行しますか?」の問い合わせに 'y' で答えると、当拡張が行われ、
    /usr/bin/rox が書き換えられます。
    この拡張には root 権限が必要です。root 権限の取得を許可されていない
    ユーザーは、"管理者に相談" する事になります。
    root 権を持つユーザは各ユーザーの運用状況に合わせてこの拡張を制御す
    る必要があります。


    3.以上の処理が行われた状態で、rox コマンドが実行されると
        1) /usr/bin/rox により、$HOME/bin/rox_startup が呼び出されます。
        2) $HOME/bin/rox_startup により、
            "/home/hoge/Apps/AppDirGen/AppDirGen_extend"
        が呼び出されます。
        3) AppDirGen_extend は /usr/share/applications をチェックし、更
        新が有った場合は、AppDirGen/AppRun を実行し、
        ~/Apps/Applications/ 以下に、適切に AppDir 群を生成します。
        4) 本来の rox コマンドに戻り、ROX-Filer バイナリを実行します。

        ※ 実際には、時間の掛る AppDirGen/AppRun は遅延実行されます。処
        理は、即
/usr/bin/rox に戻り ROX-Filer バイナリの実行に移りますの
       
こ の拡張により、ROX-Filer バイナリの実行が感覚的に遅く感じるよう
       
事 は、有りません