site top profile contact blog

Okumatsu_Hiroshi Website

last update 2010/7/29

ChFbLooks.rb





はじめに

ChFblooks.rbは、Rubyでかかれたスクリプトです。システムにRubyがインストールされていることが前提です。
基本的に何を目的としたスクリプトかというと、
- fluxboxのスタイルとGTKテーマを同時に変更します。
- fluxboxのメニューアイコンを設定ファイルに従って変更します。
- gtkrcの設定ファイル(~/.gtkrc-2.0.mine)を設定ファイルに従って書き換えます。
- rox-filerのアイコン設定を変更します。
- conkyの設定ファイルを変更します。

これらの設定は、fluxboxではそれぞれ別々にやらなくてはならず、とても面倒です。個別のものとしては、gtk-chthemefluxMenu などのツールもありますが、GnomeやKDEのように簡単にテーマやアイコンを変更することはできません。
これをすこしでも簡単にやりたい、ということです。
fluxboxに挑戦してみようという人に、このスクリプトが役に立てばいいのですが。
入り口でつまづかないように祈ります。

現在、わたしの使っている環境を念のために書いておきます。
system

$ uname -a
Linux hiro 2.6.32-22-generic #33-Ubuntu SMP Wed Apr 28 13:27:30 UTC 2010 i686 GNU/Linux

fluxbox

$ fluxbox -info
Fluxbox version: 1.1.1
Compiled: Jan 27 2010 02:28:28
Compiler: GCC
Compiler version: 4.4.3

ruby

$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]

わたしは現在Ubuntu-10.04を使っていますが、このバージョンと9.10以外では動作確認をしていません。 何か不具合が出た時のために、~/.gtkrc-2.0, ~/.gtkrc-2.0.mine, ~/.fluxbox/menu,のバックアップを取っておく ことをおすすめします。

それから、言うまでもないことかもしれませんが、これらのスクリプトはまだ未完成で、なんの保証もありません。もし、この スクリプトを使ったことでシステムに不具合が出ても、すべて自己責任ですので、心に止めておいてください。


インストールが必要なもの

ChFbLooks を動かすのに必要なツールがいくつかあります。

  • どうしても必要なもの
    • ruby => 当然のことながら必須です。
    • gtk-theme-switch2 => gtk-theme-switchパッケージをインストールして下さい。
    • fluxbox-remote => fluxbox に付属のコマンドですが、initファイルの変更が必要。
  • 必要に応じてインストールするもの
    • ROX-Filer => rox-filer をインストールします。
    • Conky => conky-allをインストールします。
    • GTKのテーマ => murrine-themesがおすすめ。
    • GTKアイコン => gnome-look.org にたくさんあります。
    • fluxboxのスタイル => box-look.orgtenr.de にたくさん。

initファイルの変更というのを説明します。~/.fluxbox/init をテキストエディタで開き、以下の行を 変更してください。

session.screen0.allowRemoteActions: false  # ここの false を true に変更

これでfluxbox-remoteコマンドが有効になります。


$HOME/binを設定

環境変数に$HOME/binを設定します。これを設定すると、このディレクトリに置いたスクリプト をターミナルから実行するとき、/home/username/bin/hogehoge.shなどと、フルパスを入力する必要がなくなります。 スクリプトのファイル名を入力すれば、自動的にこのディレクトリの中を検索するようになります。
Ubuntu-9.10なら、~/.profile に以下のように記述されていると思います。

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
    PATH=~/bin:"${PATH}"
fi

もし記述がなければ、この行を追加してください。



RUBYLIBの設定

環境変数RUBYLIBを設定します。~/bin と同じように、Rubyが指定のディレクトリのファイルを 自動的に読み込むようにするためです。これも、~/.profileに以下のように追加します。

# RUBYLIB
export RUBYLIB=${HOME}/ruby/lib

これでOKです。



ファイルをインストール

ダウンロードしたファイルを指定の場所へ配置します。一応、自動でインストールするためのスクリプトを 同梱してあります。

以下の様にしてください。

$ cd ChFbLooks
$ sh install.sh

これで必要なファイルがホームディレクトリにインストールされます。

もし、手動でやるというときは、こうしてください。

$ cd ChFbLooks
$ cp -r ./bin ${HOME}/.
$ cp -r ./ruby ${HOME}/.
$ cp -r ./etc ${HOME}/.
$ cp -r ./.fluxbox ${HOME}/.

$ cd ~/bin
$ chmod 744 *

ChFbLooksメニューを追加

~/.fluxbox/ 以下に chfblooks_menu というファイルがコピーされてますので、これをfluxboxのメニュー に追加します。~/.fluxbox/menu をエディタで開き、適当な場所に以下を追加してください。

[include] (~/.fluxbox/chfblooks_menu)

このメニューには以下のものが含まれています。

fluxboxのテーマを変更する ー ダイアログでテーマを選び、適用する
fluxboxの設定ファイルを編集する ー ダイアログからfluxboxに関係するファイルを選んでエディタで開く
linuxのユーザー設定ファイルを編集する - ホームにある主要な設定ファイルをダイアログからエディタで開く
fluxboxメニューをアップデートする - メニューを書き換えたときに他の設定ファイルも更新できる
fluxboxメニューアイコン設定ファイルを生成 - 現在のメニューから設定ファイルを生成する
fluxboxの設定をリロード - スタイルやその他の設定をリロードする

どれもちょっとしたシェルスクリプトですが、かなり便利です。


ChFbLooksを実行

上記のメニューから「fluxboxのテーマを変更する」を選び、ダイアログを表示します。~/etc/fluxbox/theme 内にある テーマファイルがリストアップされますので、一つ選んで実行します。初めて実行したときに、ホームディレクトリに設定ファイルが生成されます。

※実行の前に一度ログアウトが必要です。

ターミナルからでも実行できます。以下のように。

$ chfblooks "default"

ChFbLooksメニューについて

このカスタムメニューについて少し説明しましょう。

上から三つのメニューは、zenity というプログラムを利用したシェルスクリプトを実行します。
zenity は簡単なシェルスクリプトでGUIのダイアログを表示することができます。

一つ目はもう説明しました。二つ目と三つ目のメニューは、fluxbox と linux の主要な設定ファイルをダイアログ から選んでテキストエディタを起動するというものです。ちょっとしたスクリプトですがけっこう便利なものですよ。

ここで使用するエディタは、Gedit にしてありますが、これを変更するには、~/bin/My_Function というファイルを編集します。
変数 _EDITOR の値を書き替えてください。

#_EDITOR="/usr/bin/gedit"   => これをコメントアウト
_EDITOR="/usr/bin/gvim -f"  => 好きなエディタを指定

「fluxboxメニューをアップデートする」というのは、まず、debian のメニューコマンドである update-menus を実行して メニューを更新してから、メニューのアイコンを再設定し、最後にすべてのメニューアイコン設定ファイルを更新します。新しいメニューを追加したとき などに役に立つと思います。

「fluxboxメニューアイコン設定ファイルを生成」というのは、現在のメニューからメニューエントリーとアイコンパスを読み込んで、 メニュー設定ファイルを自動生成するスクリプトです。手作業で編集したメニューのアイコン設定を保存できます。

最後の「fluxboxの設定をリロード」は、fluxboxに元からある「reconfigure」というのと似てますが、若干手を加えてます。 というのは、アイテムに「roundCorners」を設定している場合、メニューを書き替えるとそれが無効になってしまうという、今のところ解決不能の問題がありまして、 苦肉の策として、一度ターミナルを表示させてから「reconfigure」を実行するという面倒くさいことをしております。「roundCorners」を設定してない スタイルの場合は、普通の「reconfigure」コマンドと同じです。


ChFbLooksの設定ファイル

次に、設定ファイルの書き方です。パッケージの中にはサンプルとして、defaultという 名前の設定ファイルを用意しました。この中身を解説しましょう。

conkyrc_name=file_name
  - ~/etc/conky 内にある設定ファイル名を指定します。中身はconkyrcの設定ファイルそのものです。
    デフォルト値はありません。指定がなければ何もしません。
roxrc_name=file_name
  - ~/etc/rox/icon 内の設定ファイルを指定します。
    ~/.config/rox.sourceforge.net/ROX-Filer 内にある globicons と中身は同じです。
    デフォルト値はありません。指定がなければ何もしません。
roxicon_theme=icon_theme_name
  - GTKのアイコンテーマを指定します。
    ~/.config/rox.sourceforge.net/ROX-Filer 内の Options というファイルを書き換えます。
    指定がなければ何もしません。デフォルト値はありません。
fluxbox_icon_name=name
  - スタイル名または ~/etc/fluxbox/menu 内の設定ファイル名を指定します。
    設定ファイルの書き方は以降で説明します。
    デフォルト値はありませんので、明示的に指定してください。
fluxbox_style_name=style_name
  - fluxboxのスタイル名を指定します。
    デフォルト値はありません。指定がなければ現在のスタイルをそのまま使います。
gtkfont_name=font_name font_size
  - GTKのデフォルトフォントを指定します。スペースで区切ってサイズを指定します。
gtkicon_sizes=gtk-small-toolbar=18,18: ... 
  - GTKの部品に適用するアイコンのサイズを指定できます。以下のリソースが使えます。
    gtk-small-toolbar
    gtk-large-toolbar
    gtk-menu
    gtk-button
    gtk-dialog
    gtk-dnd
gtkicontheme_name=icon_theme_name
  - GTKアイコンテーマの名前を指定します。
    アイコンがインストールされてなければなりません。
gtktheme_name=theme_name
  - GTKテーマの名前を指定します。
    必要なテーマを別途インストールしてください。
gtktoolbar_style=GTK_TOOLBAR_ICONS
  - GTKツールバーのスタイルを指定できます。
    GTK_TOOLBAR_ICONS       - アイコンのみ
    GTK_TOOLBAR_TEXT        - テキストのみ
    GTK_TOOLBAR_BOTH        - アイコンの下にテキスト
    GTK_TOOLBAR_BOTH_HORIZ  - アイコンの横にテキスト
gtktoolbar_icon_size=GTK_ICON_SIZE_LARGE_TOOLBAR
  - GTKツールバーのアイコンサイズを指定します。gtkicon_sizesで指定した値が適用になります。
    GTK_ICON_SIZE_LARGE_TOOLBAR
    GTK_ICON_SIZE_SMALL_TOOLBAR
    GTK_ICON_SIZE_MENU
    GTK_ICON_SIZE_BUTTON
    GTK_ICON_SIZE_DIALOG
    GTK_ICON_SIZE_DND

=(イコール)の左右には空白を入れないでください。また、右側の値は、" " (ダブル クォーテーション)で囲まないでください。
GTKのリソースにはデフォルト値が設定してあります。それは以下の値です。
- gtktheme_name=Clearlooks
- gtkicontheme_name=gnome
- gtkicon_sizes=gtk-small-toolbar=18,18:gtk-large-toolbar=22,22:gtk-menu=18,18:gtk-button=18,18:gtk-dialog=48,48
- gtktoolbar_icon_size=GTK_ICON_SIZE_LARGE_TOOLBAR
- gtktoolbar_style=GTK_TOOLBAR_ICONS
- gtkfont_name=Sans 9


menu.cfgの書き方

menu.cfgは、fluxboxのメニューアイコンを設定するためのファイルです。
一番簡単に設定するには、以下のように書いてください。

default:exec:         /usr/share/icons/gnome/16x16/hoge/hogehoge.png
default:submenu:      /usr/share/icons/gnome/16x16/hoge/hogehoge.png

とりあえずこの二行があれば、ほとんどのアイテムが二種類のアイコンで表示されます。一部、fluxboxの 特別なメニューについては、設定がない場合は標準(gnome)アイコンで表示になります。この特別なアイテムは、以下のものです。

default:commands:
default:config:
default:exit:
default:reconfig:
default:restart:
default:style:

この他、個々のメニューアイテム、個々のサブメニューにアイコンを設定するには、以下のようにしてください。

# 個々のアプリ
exec:gnome-terminal:    /usr/share/icons/gnome/16x16/hoge/hogehoge.png
exec:firefox:           /usr/share/icons/gnome/16x16/hoge/hogehoge.png
# サブメニューのアイコン
submenu:Editor:         /usr/share/icons/gnome/16x16/hoge/hogehoge.png
submenu:System:         /usr/share/icons/gnome/16x16/hoge/hogehoge.png

menu.cfgは、ホームディレクトリのスタイルフォルダの中に置くか、${HOME}/etc/menu内に置くことを推奨します。 /usr/share/fluxbox/styles以下のスタイルフォルダの中でも構いませんが、ファイルを変更するのが多少面倒になりますので。
スクリプトは、
${HOME}/.fluxbox/styles => ${HOME}/etc/fluxbox/menu => /usr/share/fluxbox/styles の順番でファイルを探します。

ファイルを、${HOME}/etc/fluxbox/menu 内に置く場合は、ファイル名は何でも構いませんが、スタイルフォルダ内に置く場合は、ファイル名を 必ず menu.cfg としてください。


conkyrcについて

conky というのは、かなりイケてるLinuxのシステムモニターツールです。インストールしただけでも デフォルトの設定で表示されますが、設定を変更するには、テキストファイルを自分で編集しなければなりません。
サンプルとして default.conkyrc を同梱しましたが、あくまでもわたしのデスクトップ上の設定なので、以下のサイト を参考にして設定ファイルを作るのがいいと思います。

Conky設定ガイド - SourceForge.JP Magazine

conky を fluxbox のスタート時に起動させる方法は、以下のページを参考にしてください。

スタートアップを編集する

Editing the startup file


roxの設定について

rox はいわゆるファイルマネジャーですが、他のもの(例えば、nautilus や thunar)とはちょっと 毛色の違うおもしろいアプリケーションです。詳しいことは以下のサイトを見てもらえば、日本語で詳しく解説されています。

ROX-Filer Information


アイコンの設定について少し解説すると、ROX-FilerはGTKのアイコン設定には影響されません(ツールバーは除きます)。 ROXのオプション設定でアイコンテーマを指定する必要があります。しかしまた、ROXではフォルダ、ファイル個別に対してアイコンを設定 することができますし、textファイル、htmlファイルといったファイルタイプに対してもアイコンを指定できます。
ファイルを選択して右クリックすると、アイコンを設定というメニューがありますので、ここから設定します。
ROXの設定ファイルは、~/.config/rox.sourceforge.net というディレクトリにあります。
個別のファイルに対してのアイコン設定は、~/.config/rox.sourceforge.net/ROX-Filer の中の globicons という XMLファイルに保存されています。
ファイルタイプに対するアイコン設定は、~/.config/rox.sourceforge.net/MIME-icons の中にアイコンそのものが保存されています。


ChFbLooksについて

ChFbLooks は、fluxbox において、外観の設定を一括して行いたい、しかもメニューから ワンタッチでできたら最高、という個人的な欲求から作ったRubyスクリプトです。
fluxbox で外観を管理しているのは、fluxbox 自身と、GTKの二つですが、これらに全く影響されないアプリケーション もあり、見た目の統一感を失わせる原因となっていると思います。まあ、しかし、軽さとカスタマイズ性をウリにする fluxbox としては仕方ないところでしょうが。
でも、スタイルやGTKテーマを変更する度にいちいち手作業でファイルを書き換える、というのはたまりません。中にはそん なこと必要ないという方もいらっしゃるかもしれませんが、わたしにとっては大事なことなのです。

そこで、このスクリプトです。ちゃんと設定ファイルを書いて、メニューに登録すれば、メニューをクリックするだけで fluxboxのスタイル、メニューのアイコン、GTKのテーマ、アイコン、フォント、Conkyの外観、ROXのアイコンをいっぺんに 変えることができます。

使い方は難しくありません。
前述の ChFbLooksメニュー から、「fluxboxのテーマを変更する」をクリックし、ダイアログを表示します。ダイアログには テーマがリストになりますので、好みのものを選んでOKをクリックするだけです。初めはテーマが三つしか用意してませんが( スタイルを含むパッケージには10程スタイルを用意しました)、いろいろ組み合わせて自分で作るのも楽しいものです。

もちろん、ターミナルからコマンドで実行することもできます。

$ chfblooks "filename"   => テーマ設定ファイル名を指定する

この時、filename はファイル名だけでもフルパスで指定しても構いません。が、ファイル名だけ の場合は、~/etc/fluxbox/thme の中に置いてください。ここで指定するファイルというのは、上で 解説した ChFbLooks の設定ファイルのことです。

fluxbox のメニューには次のように登録します。

[exec] (mytheme) {chfblooks "filename"}

しつこいようですが、~/bin を環境変数に設定すること、~/bin/chfblooks に実行可能属性を与えることを 忘れないでください。

これまた余計なことですが、fluxboxのスタイル、メニューアイコンについては、設定ファイルに指定がなければ何もしません。また、ROX、 Conkyについては、インストールされていなければもちろん何もしませんし、設定ファイルに指定されなければ何もしません。
GTKの設定については、デフォルトの値が適用されます。詳しくは同梱のreadme.txtを見てください。


FluxMenuについて

FluxMenu.rbは、fluxboxのメニューのアイコンの部分だけを書き換えて、アイコン表示を変更するための Rubyスクリプトです。fluxMenu という、メニューそのものを編集するためのGUIツールもありますが、このスクリプト はメニュー構成は変更しません。スタイルやテーマを変更する時にそれに合わせてメニューのアイコンを変更するのが目的です。
ChFbLooks.rbがこのスクリプトを呼び出して動かしますが、単独でも使うことができます。

単独で使うときは以下のようなスクリプトを書いて実行します。

#!/usr/bin/ruby
require 'FluxMenu'
ch_menuicon = FluxMenu.new("filename")
ch_menuicon.changeicon

filename には、設定ファイルの名前を指定しますが、置き場所が決まっています。
検索する順に書くと、
- ~/.fluxbox/styles/stylename/menu.cfg
- ~/etc/fluxbox/menu/filename
- /usr/share/fluxbox/styles/stylename/menu.cfg
となっています。

スタイルフォルダの中に置く場合は、ファイル名をmenu.cfgにしてください。
設定ファイルの書き方は上で書きました。


GnMenuConfについて

GnMenuConf は、現在使用中のfluxboxのメニューからメニューアイコンの設定ファイル を生成します。
これは、上で解説したFluxMenuスクリプトを動かすために必要な設定ファイルです。
書式に従って全て手書きしても、もちろん構いませんが、苦労して作った現在のメニューを利用して、< >で囲まれた アイコンパスとメニューエントリーの部分を読み出して、設定ファイルを作ってしまおう、というものです。
この設定ファイルを作ってしまえば、メニューアイコンを他のものに変更しても簡単に元に戻せます。
さて、使い方ですが、以下のような感じで、

#!/usr/bin/ruby
require 'GnMenuConf'
mk_menu_conf = GnMenuConf.new("/home/username/.fluxbox")
  => 読み出したいメニューファイルへのパスを指定する
# メニューのエントリーだけを抜き出したい場合
mk_menu_conf.generate_entry("menu")
  => 読み出すメニューファイル名を指定する
# メニューエントリーとアイコン設定を抜き出すとき
mk_menu_conf.generate_icon_entry("menu")
# 二つのメニューファイルからエントリーを抜き出す
mk_menu_conf.marge_entry("menu", "mymenu")
# 二つのメニューからエントリーとアイコン設定を抜き出す
mk_menu_conf.marge_icon_entry("menu", "mymenu")
# 生成したファイルを指定の場所へ移動する
mk_menu_conf.mov_file("/home/hiroshi/etc/menu_entry.cfg")
  => ファイル名をフルパスで指定する

出来上がった設定ファイルは、そのままでも使えますが、
default:exec:
default:submenu:
という二つのエントリーにアイコンを設定しておけば完璧です。この二つはこのスクリプトでアイコン設定を読み出すのが 不可能なのです。アイコン設定されていないエントリーにはこのエントリーのアイコンが適用されます。



ダウンロード

ChFbLooks-10.729.tar.gz - 4MB

ChFbLooks-include_styles-10.729.tar.gz - オリジナルスタイルを含んだパッケージ 20MB