site top fluxbox tips contact blog

Okumatsu_Hiroshi Website

last update 2010/5/23

fluxboxで完全透明化

xcompmgrの設定のしかた





このページは現時点(2010年5月)の Ubuntuの最新バージョン(10.04)、fluxbox-1.1.1 で動作確認をしました。 マシンのスペックは PROFILE を見てください。


はじめに

fluxboxにも透明度を設定するメニューがあります。でも、これは擬似透過と言って、デスクトップの壁紙を写し込んでいる だけなんです。gnome-terminalなども擬似透過です。

xcompmgr というプログラムを使うと、fluxboxでも、いわゆる true transparency(完全透過)が実現できます。
実行すると以下のスクリーンショットのように、重なった下のウインドウが透けて見えるようになります。また、デスクトップ上のアイテムに影が付き、 フェード・イン、アウトの効果が有効になります。


true_transparency.png


true_transparency_0.png


true_transparency_2.png


xcompmgrをインストール

インストールは簡単です。synapticパッケージマネジャーで
xcompmgr
というのを検索してインストールするだけです。ターミナルを使うなら、

$ sudo aptitude install xcompmgr

xcompmgr は、Xウインドウシステムのエクステンションで、デスクトップ上のアイテムに影をつける、透明にする、 フェード効果を可能にするなどの機能があります。オプションなどは以下を参照してください。

man xcompmgr(1) - 日本語訳


Xサーバーの設定

Ubuntuの最新バージョン(10.04)なら、特別に設定しなくてもエクステンションが有効になっているはずです。確かめるためにターミナル から以下のようにしてみてください。

$ xdpyinfo | grep -i "render\|composite"

そして、

    Composite
    RENDER

この様に表示されれば、エクステンションは有効になっています。

これが有効でない時や、メーカー製のデバイスドライバを使っていて xcompmgr がうまく動かないというときは、以下のページが 役に立つかも知れません。

Transparency - Okumatsu_Hiroshi Website

それでもダメだというときは、わたしの手には負えませんので、メーカーのサポートに聞くとか、ググってみるとかしてみてください。


fluxboxの擬似透過設定をOFFにする

fluxboxの擬似透過がONになっていると、エクステンションが効きません。以下の様にしてOFFにしてください。

transparency_off.png

Force Pseudo-Transparency というところをチェックしてオフにします。

ちなみにこれは、 ~/.fluxbox/init ファイルを編集して、

session.forcePseudoTransparency:    false

とするのと同じです。


ウインドウのroundCornersをオフにする

fluxboxのスタイルファイルで window.roundCorners を設定してる場合、これを無効にする必要があります。

この設定と xcompmgr の相性が悪いみたいで、ウインドウのサイズの変更(最大化、元に戻す、など)をする際、デスクトップ上 の描画がおかしくなる(うまく描画できない)のです。ツールバーとメニューは、角を丸めていても特に問題は無いようなのですが。

少し調べてみましたが、有効な対策は今のところありません。どちらかを取るしかないですね。

以下のように

# window.roundCorners:    TopLeft TopRight

コメントアウトしてください。

{注: xcompmgr を実行していると、一部のアプリケーションでアイコンバー上のアイコンが正しく表示 されない、という問題もあります。わたしの場合は gnome-terminal と xfce4-terminal ですが、xcompmgr を止めるとアイコンはちゃんと 表示されます。
Ubuntuのフォーラムなどでも似たようなことが話題になっていますが、これも有効な対策はないようです。}


xcompmgrを実行する

一番シンプルな効果は、ターミナルから

$ xcompmgr &
# もしくは
$ xcompmgr -n &

とします。これはどちらも、アクティブでないウインドウを透明にします。影もフェード効果もありません。

次は、透過と影を有効にします。

$ xcompmgr -c &

透過、影、フェード効果を三つとも有効にするには、以下のように。

$ xcompmgr -cf &

どうでしょう。フェード効果がキツすぎますか?それとも影が濃すぎる?

これらを調整するオプションももちろんあります。以下に一つだけお手本を挙げておきます。

詳しい説明は上記の xcompmgr のマニュアルを読んでください。

$ xcompmgr -cf -r 6 -o 0.7 -l -8 -t -6 -I 0.07 -O 0.01 -D 3 &

このオプション指定は、影をあまりどぎつくなく、フェードインを速く、フェードアウトはゆっくりと消えるようにしました。

どうでしょう?オプションの数字をいじってみて、自分の好みを見つけてください。


アイテムの透明度を設定する

すでに、fluxboxの擬似透過設定をOFFにしましたが、透明度の設定は、何もしなければ今まで使っていた設定が そのまま引き継がれるようです。

ですから、透明度の設定は今まで通り、メニューの Transparency(透明度)の設定でウインドウとメニューを、ツールバーは アイコンバーを右クリックして Alpha というところで設定してください。

{注: ウエブ上のいろんなページを見ると、透明度の設定には trasset-df を使うといい、 ということがよく言われています。このプログラムは、コマンドによってその場で透明度を変えることができますが、特定のウインドウを常に透明にするには 自分でスクリプトを書かなくてはなりません。手間を惜しまないという人は以下をご覧ください。
man transset-df 日本語訳
Transparency - Okumatsu_Hiroshi Website

それよりも、以降で解説する、fluxboxのappsファイルで設定する方がはるかに簡単にできます。}


fluxboxの起動スクリプトに書き込む

好みの設定が決まったら、今度は自動的に起動するよう設定をしましょう。

一つ注意しないといけないことがあります。それは、fluxboxのツールバーが描画されてから起動しなければならない、ということです。 どうしてかと言うと、ツールバーが透明になってしまうからなんです。なぜかはわからないのですけど、文字もアイコンも全く見えず、見えるのは 輪郭と影だけ。これでは困るので、以下のようにしましょう。

./fluxbox/startup をエディタで開き、

#!/bin/sh
# fluxbox startup-script
#
xrdb ~/.Xresources &
sh ~/bin/touchpad.sh &

# ここの秒数は自分で決めてください
sleep 12 && xcompmgr -cf -r 6 -o 0.7 -l -8 -t -6 -I 0.07 -O 0.01 -D 3 &
exec /usr/bin/fluxbox

この設定で難しいのは、sleep の部分です。ツールバーがデスクトップに描画されるタイミングが、最初にコンピュータ を立ち上げたとき、ログアウトして再ログインしたとき、Ubuntuのバージョン、ディストリビューション、マシンのスペック、 等の条件で全く違ってくるのです。

わたしの場合、ノーパスワードで起動するようにしてますが、最初の起動では最低12秒遅らせて実行しないとダメでした。 ログアウト・ログインの時は1秒も遅らせればいいんですけどね。ここは自分で試してみて、それから秒数を決めてください。


ショートカットキーを設定する

起動スクリプトに書き込まずに、ショートカットキーに登録しておくという手もあります。その場合は以下のように。

Control F11 :ToggleCmd {Exec xcompmgr -cf -r 6 -o 0.7 -l -8 -t -6 -I 0.07 -O 0.01 -D 3} {Exec killall xcompmgr}

このキー設定は、トグルコマンドです。同じキー操作で xcompmgr をオン・オフできるんです。よかったら覚えておいてください。


もう一つちょっとした知恵を。
このコマンドのオプションがだらだらと長くて見づらいし、変更もやりにくいですよね。こういうときはスクリプトにしましょう。
ちょっと長いですが、xcompmgr.sh とでも名前をつけ、~/bin に放り込んで置けばコマンドと同じように使えます。

#!/bin/bash

# = xcompmgr.sh
# synopsis :: xcompmgr.sh [ -n | -s | -f | -d | -q ]
# option
#   -n    ノーマル。透過だけ。
#   -s    シャドウ。透過と影。
#   -f    フル。透過、影、フェード効果のすべて。
#   -d    デフォルト。gentoo-wiki より引用。
#   -q    プログラムを終了する。

# xcompmgrを終了させる関数。(killall compmgr でも構わないんですが)
Kill_Xcomp () {
  _PNAME='xcompmgr'
  _PS=$(ps auxw | awk '{print $11}' | grep ${_PNAME})
  if [ "${_PS}" != "" ]; then
    killall xcompmgr
  fi
}

# xcompmgr コマンド
_simple="xcompmgr -n"
_shadow="xcompmgr -cC -r 6 -o 0.7 -l -8 -t -6"
_full="xcompmgr -cCfF -r 6 -o 0.7 -l -8 -t -6 -I 0.07 -O 0.01 -D 3"
_default="xcompmgr -cCfF -r7 -o.65 -l-10 -t-8 -D7"

# メインスクリプト
if [ "$@" != "" ]; then
  _opt="$@"
else
  _opt="-n"
fi

case ${_opt} in
  "-n")
    Kill_Xcomp
    exec ${_simple} ;;
  "-s")
    Kill_Xcomp
    exec ${_shadow} ;;
  "-f")
    Kill_Xcomp
    exec ${_full} ;;
  "-d")
    Kill_Xcomp
    exec ${_default} ;;
  "-q")
    Kill_Xcomp ;;
  *)
    echo "$(basename $0): ${_opt}: オプションが間違っています。"
    exit 1 ;;
esac

このスクリプトを利用して、さっきのショートカットキーを書き直す。

Control F11 :ToggleCmd {Exec xcompmgr.sh -n} {Exec xcompmgr.sh -s} {Exec xcompmgr.sh -f} {Exec xcompmgr.sh -q}

初めは透過だけ、次に影を付け、三つめはすべての効果、トグルの最後はプログラム終了。

こんな風にしておけば、変更がやりやすい。グッド。


指定のアプリだけを透明にするには

ウインドウがアクティブのとき、あんまり透明度が高いとテキストが読めないですよね。かと言って、ターミナル なんかはアクティブでも透明の方がかっこいい。

では、指定のアプリケーションの透明度を変更するにはどうすればいいでしょう。前述したtransset-dfを 使うこともできますが、fluxboxには apps ファイルというとても強力な武器があります。このファイルをちょこっと変更するだけ で、ターミナル独自の透明度を設定できます。

この設定はエディタを使わなくてもメニューからできます。以下のように、

remember_window_setting.png

まず、ウインドウメニューの Remember... というところから、サブメニューを開き、TransparencySave on close にチェックを入れます(あなたのメニューが日本語だったらごめんなさい)
次に、

window_transparency.png

Transparency というサブメニューを開いて透明度を指定してください(マウスホイールでできますよ)。これで、指定のウインドウを閉じれば、 次回の起動時には設定が保存されているはずです。


もし、これでうまくいかない、という場合は、~/.fluxbox/apps ファイルを直接編集します。
ファイルの最後に以下を付け加えてください。

[app] (name=gnome-terminal) (class=Gnome-terminal)
  [Alpha] {180 110}
[end]

Reconfigure すれば有効になります。

また、こうするともっと便利ですよ。

# xtermも透明にできる
[app] (name=xterm)
  [Alpha] {180 110}
[end]
# gnome-terminal,xfce-terminal両方の設定ができる
[app] (name=.*terminal) (class=.*terminal|.*Terminal)
  [Alpha] {180 110}
[end]
# Conkyの透明度はなしに固定
[app] (name=Conky) (class=Conky)
  [Alpha] {255}
[end]

後は自分で好きなように設定してください。


関連ページ

appsファイルの編集 - Okumatsu_Hiroshi Website

fluxboxはじめの三歩 - Okumatsu_Hiroshi Website


役に立つスクリプト

xcompmgr を自動起動させるとき、window.roundCorners が設定されているなら起動しないという風にしたいですよね。 それができれば、スタイルを変更するたびにスタートアップファイルを書き換える必要がなくなります。

そんなスクリプトをサンプルとして作りましたので、よかったら使ってください。

autostart_xcomp.sh

#!/bin/bash

# function check round corners setting
Check_RoundCorners () {
  _STYLE_PATH=$(grep -i 'stylefile' ${HOME}/.fluxbox/init | awk '{print $2}')
  _VALUE=$(grep -i "^[^#\!]*window\.roundcorners.*" "${_STYLE_PATH}/theme.cfg" | awk '{print $2}')

  case ${_VALUE} in
    [Tt]op*|[Bb]ottom*)
      return 0 ;;
    *)
      return 1 ;;
  esac
}

# main script
command="xcompmgr -cCfF -r 6 -o 0.65 -l -10 -t -8 -D 4"

if ! Check_RoundCorners; then
  exec ${command}
fi

このスクリプトはスタイルファイルの中の theme.cfg というファイルを見て、roundCorners が有効かどうかを 判断してます。ディレクトリを持たない古いスタイルでは設定に関わらず xcompmgr が起動しますので、あしからず。