▼twmウィンドウマネージャの使い方▼

X11の初期からあるウィンドウマネージャのtwmは、 今時使う人が少なくなったせいもあるのと、 使い方が(X11的には)あまりにも自明すぎて使い方の解説が見当たらなかったりします。 本稿ではデフォルト状態の twm の使い方について解説します。 (2017.11)

$Keywords: twm window manager basic usage, pointer focus$

$Id$


▼twmを使ってみるには

まずインストールされていないと話にならないのでインストールしましょう。 大半のディストリビューションには標準では入ってなくても 多くの場合は用意されています。

インストールできたら、普段使うstartx の代わりに xinit を使うと、xtermが1枚だけ開いている状態になります。 マウスカーソルをxtermの中に入れて、twm & と打てば twm が起動します。 タイトルバーが異様に大きい場合は フォントを追加してみて下さい。

[xterm 1枚だけのtwm画面]

最初から開いていたxtermをexitで終了させるとX11のセッションが 終了します。

とりあえず使ってみるだけならこの起動方法でもいいんですが、 常用する場合は twmを ~/.xinitrc の最後のフォアグラウンドプロセスとして起動し、 twm を修了させるとXのセッションが終了するように設定します。

▼2枚目のxtermを開く

画面上の何もない所(ルートウィンドウといいます)で マウスの左ボタンを押すとメニューが出るので、 Xterm を選びます。するとウィンドウの枠が表示されるので、 置きたい場所を選んで左クリックすると、新しいxtermウィンドウが開きます。

▼右クリックで初期ウィンドウサイズ変更

新しいウィンドウを開くときの枠線が出ている時に、 左ではなく右クリックすると、ウィンドウの大きさは画面下端までに調整されます。 最初から大きなウィンドウサイズにしたり、大きすぎるウィンドウを 小さめに出したりできます。


▼ポインタフォーカスの考え方

twm はフォーカスの考え方が Microsoft Windows や mwm と異なるので、 知っていないと面食らう箇所です。説明しましょう。

フォーカスとは、端的に言えばキーボード入力が送られるウィンドウのことです。 そのウィンドウにキーボード入力が送られる状態にあることを、 「そのウィンドウがフォーカスされている」と言います。

twm では、キーボード入力は 「今現在マウスカーソルがある場所の下のウィンドウ」に送られます。 これをポインタフォーカス式(pointer focus)のフォーカスといいます。

対するに、「普通」のウィンドウマネージャでは、 マウスの位置に関係なく、 最前面にあるウィンドウに対してキーボード入力が行われます。 フォーカスを変えるときは、そのウィンドウをクリックして 前面に持ってきます。 これをクリック・オン・フォーカス式(click-on-focus)のフォーカスといいます。

twm が一見不自然なポインタフォーカスを採用しているのは、 生のX11が元々そうだからです。twmを終了させてウィンドウマネージャが 無い状態で使うと、キーボード入力のフォーカスは マウスポインタがあるウィンドウに送られます。 フォーカスを変えるにはマウスを動かします。 twm はこのX11のデフォルトのポインタフォーカス方式をそのまま踏襲 しているだけです。

一見不便そうですが、そうでもありません。 前面にある情報を見つつ、裏側に少し隠れているウィンドウに文字を打ちこむ、 といったことができます。

なお、twmはクリック・オン・フォーカスには対応していません。


▼タイトルバーの使い方

ウィンドウの上にあるタイトルバーは、

twmが使われていた頃のUNIXワークステーションでは、マウスは3ボタン式 (まだスクロールホイールは発明されていなかった)のものが普通だったので、 中ボタンにそれなりの機能が割り当てられています。 2ボタンマウスでtwmを使うのはデフォルト設定では不便なこともありますが、 設定でいくらでも変えられます。

▼タイトルバーのダブルクリック

▼移動のキャンセル


▼Meta(Alt)キーの使い方

タイトルバーが隠れてしまったウィンドウを前面に出したりするには、 Meta(Alt)キーを押しながらマウスボタンを操作します。

左クリックで最背面、右クリックで最前面というのはやや不自然な感じは否めないので、 設定をいじるならまずここでしょうか。

▼Alt+ドラッグでウィンドウ移動


▼標準メニューの使い方

ルートウィンドウで左クリックすると出てくるメニューです。 行いたい動作を選ぶとマウスカーソルの形が変わるので、そこで 操作対象のウィンドウをクリックします。

デフォルトの左クリックメニュー
Iconify
選んだウィンドウをアイコン化します。
Resize
大きさの変更。
Move
移動。
Raise
ウィンドウを最前面に持ってくる。
Lower
ウィンドウを最背面に持っていく。
Focus
フォーカス固定。ポインタフォーカスではなく、 選んだウィンドウをフォーカスし続けます。背面にあるウィンドウでも選べます。
Unfocus
Focusを解除します。
Show Iconmgr
アイコンマネージャを表示します。
Hide Iconmgr
アイコンマネージャを非表示にします。
Xterm
Xtermを起動します。 メニューのなかでは唯一、アプリケーションを起動するメニューエントリです。 (設定を書けば他のアプリケーションも登録できます)
Kill
そのウィンドウを出しているアプリケーションを強制終了させます。 まず下のDeleteを先に試しましょう。
Delete
そのウィンドウを閉じます。 他のウィンドウマネージャでは [X]ボタンに相当するもの。
Restart
twmの設定ファイルを再読み込みします。
Exit
twmを終了します。 twmが ~/.xinitrc の最後のフォアグラウンドアプリケーションだった場合は ログアウトと同様になります。

▼設定ファイル

自分でtwmをカスタマイズしたくなったら、~/.twmrc として設定ファイルを置きます。 デフォルトの設定ファイルをコピーして、そこから始めるのが良いでしょう。 デフォルトの設定ファイルは /usr/share/X11/twm/system.twmrc とか /etc/X11/twm/system.twmrc あたりに置いてあります。


◇アイコンマネージャって何に使うの?
単独ではあまり用途はありません。 キーボードショートカットを使って アイコンマネージャ上のアプリケーションを選択するよう設定することで、 フォーカスを簡単に切り替えられるような環境にするときなどに使います。

◇Alt+Tabでアプリケーションを切り替えたいんだけど
WindowRing {
	"xterm"
	"konqueror"
}
"Tab" = meta : window|title|root|frame : f.warpring "next"
"Tab" = m|s  : window|title|root|frame : f.warpring "prev"
のように書けば、似たようなことができます。

◇WindowRingに書くウィンドウの名前が分からない!
xprop (xorg-x11-utils) を使って WM_CLASS(STRING) を抽出するか、 twmのメニューに f.identify を起動するエントリを追加してみましょう。 それで判明します。

◇ウィンドウが開くたびに枠がでてクリックするのウザい。自動でウィンドウ出せないの?
RandomPlacement オプションを試してみましょう。

◇枠をドラッグしてウィンドウの大きさを変えたい
以下のような設定はどうでしょう。 枠の太さがデフォルトの2ピクセルでは細すぎると思うので、 BorderWidth は適宜調整してください。
Cursors {
	Frame	"sizing"
}
BorderWidth 4
Function "resize-or-raise" { f.resize f.deltastop f.raise }
Button1 = : frame : f.function "resize-or-raise"

kabe.sra-tohoku.co.jp