CDEと心中する

Last modified: 2007/05/07 02:01:59 JST

CDEってゴミだよね

CDE (Common Desktop Environment)は、 The Open GroupによるUNIXのデスクトップ環境です。 商用UNIXのデフォルトのデスクトップ環境はみんなこれです。 UNIXベンダがよってたかって作ったわりには、ゴミですね。 普通は、.dtprofileにSESSIONTYPE=xdmと書いて、 こんなゴミは捨ててしまいます。

いいから早く捨てろって

とはいえ、世の中には、いろんな理由でCDEを使う人がいるものです。 実は最近、僕も使うようになりました。 さすがに、そのままでは使う気になれないので、カスタマイズして使ってます。

カスタマイズにはリソースの指定が必要ですが、 CDEのセッションマネージャ(dtsession)がリソース周りで余計なことをするので、 最初にそれを何とかする必要があります。 まず、勝手に.Xdefaultsをxrdbするのですが、 タイミングが遅すぎるので、.Xresourcesにして.dtprofileで先に読んでしまいます。 そのときに、勝手に設定されている*Font:とかも削ります。

xrdb -query | grep -v '^\*Font[:LS]' | cat - ${HOME}/.Xresources | xrdb -load

さらに、.Xresourcesかアプリケーションリソースファイルに Dtsession*writeXrdbColors: Falseを入れておくと、 dtsessionが*Foreground:と*Background:を上書きする悪癖が止まります。

フロントパネルっていらないよね

dtsessionの悪さを止めてしまえば、あとはDtwmクラスのリソースや.dt/dtwmrcで、 なーんぼでもカスタマイズできます。 dtwm(1)およびdtwmrc(4)を参照されたし。 僕はDtwm*useFrontPanel: Falseとしてフロントパネルを消しています。 どこがCDEなんだ?と馬鹿にされます。

dtwmrcに以下の記述を入れると、Alt+Control+hljk でキーボードフォーカスの切り替えと、raise/lower ができます。 いまどきの Window Manager なら珍しくもないだろうけど、 これは dtwm の前身の mwm のころ、つまり10数年前からできたのさ。

Keys DtKeyBindings
{
...
  Alt Ctrl<Key>k  root|window  f.raise
  Alt Ctrl<Key>j  root|window  f.lower
  Alt Ctrl<Key>l  root|window  f.next_key window
  Alt Ctrl<Key>h  root|window  f.prev_key window
}

.xsession で立ち上げてたコマンドはどうするんだ

ほとんどの場合、起動するコマンドをどこかに書いておく必要はありません。 アプリケーションを起動したままログアウトすれば、 次にログインしたときにdtsessionが同じアプリケーションをあげてくれます。

ただし、セッションマネージャに対応していないアプリケーションはあがってこないので、 .dt/session/sessionetcに起動するコマンドを書きます。 セッションマネージャに対応しているアプリケーションをここに書くと、 ログインするたびにアプリケーションが増殖します。 このファイルは“実行”されるので実行権限が必要です。 また、コマンドをバックグラウンドで実行して、終了しなければなりません。

コマンドの実行に必要な環境変数の設定を .loginとか.profileとか.zsh_profileとか.bash_profileに書いている人は、 .dtprofileにDTSOURCEPROFILE=trueと書いておきましょう。

マニュアルには書いてありませんが、少なくとも Solaris 8以降の/usr/dt/bin/Xsessionは、bashもzshもtschのことも知っていて、 対応する設定ファイルを読んだログインシェルが、 dtsessionを起動するようにはからってくれます。

ssh-agent を使いたいんですけど

.dtprofile に以下の一行を入れます。デフォルトでは dtstart_session[0] には dtsession が入っているのですが、これをssh-agent の子プロセスにします。

dtstart_session[0]="ssh-agent ${dtstart_session[0]}"

そうしておいて先のsessionetcにssh-add < /dev/null と書いておけば、ログイン時に${SSH_ASKPASS}がパスフレーズを聞いてくるでしょう。

いろんな言語のフォントを使いたい

Solarisにはせっかくいろんな言語のフォントが付いているのに、 ロケールがjaだと使えません。 .dprofileに以下の記述を入れて、 Xのフォントパスの設定をja_JP.UTF-8に合わせてやると、 大体必要なフォントがそろうはずです。

fontpath=""
fs="fp+ "
for f in `cat /usr/openwin/lib/locale/ja_JP.UTF-8/OWfontpath`
do
    fontpath="$fontpath$fs$f"
    fs=","
done
xset $fontpath

参考文献

Solaris 共通デスクトップ環境 上級ユーザ及びシステム管理者ガイド >> 2.セッション・マネージャの構成

ま、これを読めばだいたいわかるんじゃないでしょうか。


藤枝@JAIST