2011年7月13日水曜日

Idesk用壁紙変更ツールをシェルスクリプトで書いてみた

Puppy Linuxでは、標準でROX-Filerのピンボードを使って、デスクトップアイコンや壁紙を表示している。
ピンボードの挙動(デフォルトがアイコンのシングルクリックで起動。設定をダブルクリックにしても、クリック間隔 の調整が「簡単には」できない)があまり好きでないので、切ってしまった。

替わりに、Ideskってのを使う事にした。

標準ならば壁紙変更ツールがあって、GUIでの操作が可能だけど、Ideskで壁紙を変更するには、設定ファイルを 開いて、手動で書き換えないといけない。
面倒なので、Idesk用の壁紙変更ツールを作ってみた。

Linuxでのシェルスクリプトは「はじめての、おつかい」状態なので。細かい事は置いといて、「動く事」が目的。
で、作ったスクリプトが下のコード
#!/bin/bash

def_str=`grep 'Background.File' /root/.ideskrc`
def_length=${#def_str}
temp_str=`echo $def_str | cut -c 41-$def_length`

export MAIN_DIALOG='
<window title="idesk_bg_changer">
  <vbox>
    <text><label>idesk用壁紙変更ツール(AO_o10yan)</label></text>
    <frame ファイル名入力  OKで壁紙変更>
      <hbox>
        <text>
          <label>ファイル名:</label>
        </text>
        <entry><variable>FILENAME</variable>
          <default>'$temp_str'</default> 
        </entry>
      </hbox>
      <hbox>
        <button ok>
          <action>"./idesk_bg_function.sh 'onclick' $FILENAME &"</action>
        </button>
      </hbox>
    </frame>

    <frame ファイル選択で壁紙変更>
      <hbox>
        <entry accept="filename">
          <label>Select an Existing File</label>
          <variable>FILE_FILENAME</variable>
          <default>/usr/share/backgrounds/'$temp_str'</default>
          <action>"./idesk_bg_function.sh 'onchange' $FILE_FILENAME &"</action>
        </entry>
        <button>
          <input file stock="gtk-open"></input>
          <variable>FILE_BROWSE_FILENAME</variable>
          <action type="fileselect">FILE_FILENAME</action>
          <default>/usr/share/backgrounds/'$temp_str'</default>
        </button>
      </hbox>
    </frame>

    <hbox>
      <button cancel></button>
    </hbox>
  </vbox>
</window>
'
gtkdialog3 --center --program=MAIN_DIALOG
最初に #!/bin/bash でbushを使う事を明示。
次の3行は、Ideskの設定ファイルから現在壁紙に指定されている画像ファイルのファイル名を抜き出しているだけ。
あとは、Gtkdialogの生成。

肝は、<action></action>で、別途スクリプトファイルを、引数を渡しながら呼び出している事


上のスクリプトから idesk_bg_function.sh として呼ばれるのが下のスクリプト
#!/bin/bash
new_str=$2

if [ $1 = 'onchange' ];then
  new_length=${#new_str}
  new_str=`echo $new_str | cut -c 24-$new_length`
fi

def_str=`grep 'Background.File' /root/.ideskrc`
def_length=${#def_str}
temp_str=`echo $def_str | cut -c 41-$def_length`
sed --in-place=.bak --expression=s/$temp_str/$new_str/ /root/.ideskrc

idesk

0 件のコメント :

コメントを投稿