2014年4月19日土曜日

Puppy Linux にXfceをいれたら

Precise Puppy 5.7.1JPに色んなウィンドウマネージャ(以後WMと表記)を入れてみた。
JWMは元から入っているもので、IceWM、Fluxbox、Openboxを追加した。


これらの「単体」のWMには、壁紙の表示やデスクトップアイコンを表示する機能がない
(らしい)ので、お馴染みのROX-Filerのピンボード機能をそのまま使ってる。
(勿論、ROX-Filerのピンボードを使わずとも、Idesk等で実現できることは以前のブログに
書いたとおり)
そして、パネルに関してはOpenbox用にLxpanelを入れてある。

さて、、、。問題はXfce。

Xfceはデスクトップ環境なので、当然単体のWMとは違う。
Xfceで使われているWMはxfwmなので、これを単体でいれる分には、
上記WMと同じくROX-filerのピンボード機能を使って問題ない。

でも、デスクトップ環境を導入するとなれば別のはなし。

XfceにはWMの他にセッションマネージャ、ファイルマネージャ
デスクトップマネージャ、パネル等が含まれるので、Puppy Linuxの環境と競合する部分が出てくる。

私が、Xfceを導入した際には、この(特にデスクトップマネージャの)競合による不具合に遭遇した。


導入自体は、パピーパッケージマネジャでxfceを検索して、xfce4_4.8.0.3 をクリックするだけの
簡単操作。

インストール後、一旦「プロンプトへ戻る」でXを終了し、

xwin startxfce4

として、X及びXfceを起動すると↓のようになる。
(xwinと言うスクリプトを通して起動するには訳がある。それについては別の機会に)


これで、表面上は問題ないのだが、先に設定しておいたダブルクリック間隔が反映されていない。


Xfceがデスクトップ環境として統合して持っている設定と、.gtkrc-2.0(.gtkrc.mine)
での設定が競合しているらしい。
ここが、単体のWMとしてxfwmを使用する場合と、デスクトップ環境としてのXfceを使う場合の
違い。

この競合は、.gtkrc-2.0をリネームしておくなどすれば、解決できる。
JWM等に切り替えたときに、ファイル名を戻せば良い。
(この辺は、WMSwitcerを使えばスクリプトが自動でやってくれる)

但し表面上の解決ができればそれで良いと言うことではなく、この違いは、結構重要なことじゃないか
勝手に思っている。
最初に紹介した画像では、WMSwitcher(ここを参照) というWM切り替えツールが、Xfceを
他のWMと同列に表示している。
また、ここの「Q5:ウィンドウマネージャ」 に見るように、WMの話題のなかで、あたかもXfceが
WMであるかのような記述がされているのを目にする。

ここを無意識にやり過ごしてしまうと、WM関連で問題が発生したときの解決糸口を自ら、
蔑ろにしてしまう結果になりかねないと思っている。


実は、ここからが本題。
※ここから書く内容はマネしないでください。トラブルから復帰できなくなる可能性があります※

Xfceは、ウィンドウの透過処理に(簡易的に?)対応しており、「ウィンドウマネージャ(詳細)」の
「合成処理」設定で指定できる。


この「合成処理」を設定した状態で、他のWMに切り替えてから再度Xfceを起動したり、
再起動をした場合、非常に困った事態に陥る。

xwin startxfce4 を実行してもXfceの画面が表示されず、他のWMで設定した画面になってしまう。
更に、見た目が違うだけではなく、実際の操作結果が画面上で見えなくなってしまう!!!

Xfceが起動されていない訳ではなく、ROX-Filerのピンボードが上から覆い被さっているらしい。
実際にどんな状況なのかをスクリーンショットでお見せしたくても、操作画面が表示されない状態で、
どうやって画像を撮れば良いのか、その方法を知らない。

ただ、画面上部のパネル部分へマウスポインタを合わせれば、ツールチップが表示されるので、
そこから「ログアウトダイアログの表示」を探りだし、クリックをすることでダイアログを
表示させることはできる。一旦「ログアウト」してプロンプトに戻り、JWM等を表示させれば、
通常の画面に戻ることはできる。

初めてこの状態になったときの驚愕と慌てぶりは、ご想像にお任せする(笑)

しかし、JWMに戻してから冷静に考えれば原因は明らかだった。
Xfceのデスクトップマネージャの設定とROX-Filerのピンボード機能が競合してると推測するのに
時間はかからなかった。
他のWMで設定した画面が出るということは、それを制御しているROX-Filerのピンボードが
動いていると考えるのが自然の流れ。

そこで、X起動時に読み込まれる /root/.xnintrc を覘いてみた。
その中に、次の記述を見ることができる。

if [ -f /root/Choices/ROX-Filer/PuppyPan1 ];then
rox -p /root/Choices/ROX-Filer/PuppyPin -r /root/Choices/ROX-Filer/PuppyPan1
else
rox -p /root/Choices/ROX-Filer/PuppyPin
fi

ROX-Filerのパネルを使える状態ならば、ピンボードとパネルを起動し、
パネルが使えないならば、ピンボードのみを起動しろと命令しているらしい。

-p -r オプションの参考
Puppy Linuxではパネルの使用を廃止しているため、結果としてピンボードが起動される。
ただ、この起動には他の条件式が付加されていないので、基本的にピンボードは起動されてしまう。

WMを単体で切り替えるならば、この命令でも問題はなかったのだろう。
が、Xfceのようにデスクトップマネージャが含まれ、更に透過処理を行うような状況では、
この競合は致命的なんじゃないだろうか。
今までこの .xinitrc のままだったということは、これは私の環境依存による不具合なのかも知れない
(過去にはここの事例に見るようなこともあったようだが、、、)
そうであれば、それにこしたことはない。私だけが対策をすれば済む。
もし、そうでないのならば、他の使用者への注意を促してほしい。
対策といっても、下のように現在使われているWMが何かを判定に入れただけ。

if [ "$CURRENTWM" != "startxfce4" ];then
if [ -f /root/Choices/ROX-Filer/PuppyPan1 ];then
rox -p /root/Choices/ROX-Filer/PuppyPin -r /root/Choices/ROX-Filer/PuppyPan1
else
rox -p /root/Choices/ROX-Filer/PuppyPin
fi
fi

今回はXfceのみを対象にしているが、ほかのデスクトップ環境を導入した際にはそれに応じた判定を
加えれば良いはず。

今回のことに限らず、Puppy Linuxの .xinitrc には疑問に思うことがある。
まるで「アキラ」の冷凍設備のような印象を受けなくもない、、、。

0 件のコメント :

コメントを投稿