N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

X composite と xcompmgr + transset

Windows 環境はできるだけ簡素に、Linux 環境は逆に過度な装飾をしまくるポリシーなので当然影つきスケスケウィンドウはやってみたいわけであり

/usr/lib/X11/xorg.conf

Section "Extensions"
    Option "DAMAGE" "Enable"
    Option "Composite" "Enable"
    Option "RENDER" "Enable"
EndSection

(↑/etc/X11にさっさとリンク張れよと思うんだけどめんどくさいので/usr/lib/X11のまま)

必要なツール

xcompmgr 1.1.1
transset-df 5
transset-dfは本家transsetの機能強化版みたいな感じ?本家transsetのパッケージが見付からないからこっちを入れた

試用


$ xcompmgr xcompmgr -cCfF -r5 -o.65 -l0 -t0 -D3 &
$ trannset-df 0.7
(透け透けにしたいウィンドウをクリック)
Set Property to 0.7

xcompmgrのオプションは--helpに書いてある。そんな難しくないけどわかんないのもあった

  • -c: 枠に影
  • -C: dock/panel系のウィンドウには影つけない
  • -f: フェードイン/アウト
  • -F: 透過度を変えたときもフェード
  • -r: 影半径
  • -o: 影透過度
  • -l: 左方向の影のずらし(マイナス指定で下へ)
  • -t: 上方向の影のずらし(マイナス指定で右へ)
  • -I: フェードインのコマ?
  • -O: フェードアウトのコマ?
  • -D: フェードのコマ速度(ミリ秒)

運用

でも毎回それやってるとめんどくさいからターミナルエミュレータにしぼって自動的にやってくれるようにする。KDEとかだともっと簡単なのかな。しかしデスクトップ環境使う気にはならない
.xsessionに追加

xcompmgr -cCfF -r5 -o.65 -l0 -t0 -D3 &

こんなシェルスクリプトを作る。俺はmltermを常用してるので適宜読みかえてね
mlterm-tp

#!/bin/sh
mlterm -L &
sleep 1 && transset-df -i $(xwininfo -root -tree -int|grep mlterm|cut -f 9 -d " "|sort|tail -n1)  0.7

xwininfo -name ウィンドウ名 ってしたときに、ウィンドウ名 が同じのふたつ以上存在するとき、ひとつ分しか表示してくれないのが困った。-root -treeすると全ウィンドウの分がでるからそこから必要なIDを抽出してtranssetにかける
実行権限つけてやるとmlterm起動したあとそのmltermだけが半透明に。

感想

重い重いと言われているけどあまり重い気はしない。重いことよりも、定期的に表示が破滅するのが困る
killall xcompmgr && xcompmgr & をすれば復活してくれるから、それをWMのメニューに組み込んでおいた
他に、WMのメニューにtransset-df .? を入れておくと便利
背景コピペの透過じゃないちゃんとした透過ができて、なんかとても未来っぽくなったので満足
f:id:ishn:20061124023804j:image:w200
課題: 前に入れたconky、起動するとrootウィンドウに対しての影が全滅してしまう。どうしよう
.conkyrc

own_window_type normal
own_window_transparent yes
own_window_hints undecorated,below,sticky

こうすればいいらしいけど、wmxでは効果無し。wmx以外ならいけるんかな