「とにかく軽いウインドウ環境を使いたい」という場合、「twm」が候補に上がってくる。だが、Window Makerと違ってtwmは設定を自分で設定ファイルに書く必要がある。ファイルはホームディレクトリ直下に「.twmrc」という名前で作成する。

Ubuntu 18.04 LTSでインストールできるtwmのデフォルトの設定ファイルはあまり使いやすいとは言えないため、基本的には自分で書いて利用することになる。ただし、twmになじみがないとそもそも何をどう設定すればよいのかわからないだろう。そこで今回は、twmの最低限の設定方法を紹介するとともに、twmの使い方を説明しよう。

まず、Xサーバ「VcXsrv」をフルスクリーンモードで起動する。

VcXsrvをフルスクリーンモードで起動

WSLのUbuntuからは次のようにしてtwmを起動する。

export DISPLAY=localhost:0.0
xsetroot -solid gray
xterm &
twm

$HOME/.twmrcファイルに設定を書いてから上記コマンドでtwmを起動すれば、設定が反映されたtwmが起動するようになる。何度か繰り返して設定を確認してみていただきたい。

色の設定

まず最初に設定する必要があるのは色の設定だ。twmは設定をしないと白黒モードが動作する。これはあまり使いやすいとはいえないと思う。次のように最低限の色設定を行っておく。これはコピペでよいだろう。

# カラー設定
Color
{
    BorderColor "slategrey"
    DefaultBackground "rgb:2/a/9"
    DefaultForeground "gray85"
    TitleBackground "rgb:2/a/9"
    TitleForeground "gray85"
    MenuBackground "rgb:2/a/9"
    MenuForeground "gray85"
    MenuBorderColor "slategrey"
    MenuTitleBackground "gray70"
    MenuTitleForeground "rgb:2/a/9"
    IconBackground "rgb:2/a/9"
    IconForeground "gray85"
    IconBorderColor "gray85"
    IconManagerBackground "rgb:2/a/9"
    IconManagerForeground "gray85"
}

この設定だと、次のように緑色をベースとした色が使われるようになる。

緑色を使うように設定されたtwm

ほかの色がよい場合は各種値を変更すればよい。ただし、それほど生産的な設定でもないので、問題がなければこのまま使えばよいと思う。

メニューの設定

メニューの設定では、少なくともメニューからターミナルアプリケーションを起動できるようにしておく。そうしておけば起動したターミナルアプリケーションからコマンドの実行やほかのアプリケーションの起動を行うことができるからだ。設定は、次のようになる。

# マウスボタンとメニュー表示を結び付け
Button1 = : root : f.menu "rootmenu"

# ルートメニュー
menu "rootmenu"
{
    "Twm"           f.title
    "XTerm"         f.exec "exec xterm &"
    "LXTerminal"    f.exec "exec lxterminal &"
    "Full screen"   f.fullzoom
    "Iconify"       f.iconify
    "Move"          f.move
    "Resize"        f.resize
    "Down"          f.lower
    "Applications      " f.menu "menu_application"
    "Restart"       f.restart
    "Exit"          f.quit
}

menu "menu_application"
{
    "Applications"  f.title
    "Chromium"      f.exec "exec chromium &"
    "Firefox"       f.exec "exec firefox &"
    "Gimp"          f.exec "exec gimp &"
    "Video LAN"     f.exec "exec vlc &"
}

上記では、マウスの左ボタン(Button1)からメニューが起動するように設定している。「rootmenu」という部分の設定と次の表示を比べてもらえれば、どういった設定がどういった表示になるのかおわかりいただけるのではないだろうか。

rootmenuの表示例

rootmenuのなかにある「f.menu」という文字列は、サブメニューの指定になっている。これにより、メニューを入れ子にすることができ、入れ子にしたメニューは次のようにマウスを合わせることで表示させられる。

入れ子指定したメニューを表示

また、次のようにメニューを書けば、マウスの右ボタン(Button3)からウインドウ操作用のメニューを表示させることができる。

# マウスボタンとメニュー表示を結び付け
Button3 = : root : f.menu "windowmenu"

# ウインドウ操作メニュー
menu "windowmenu"
{
    "Window Menu"   f.title
    "Full screen"   f.fullzoom
    "Iconify"       f.iconify
    "Move"          f.move
    "Resize"        f.resize
    "Down"          f.lower
    "Close"         f.delete
    "Kill"          f.destroy
}

ウインドウ操作用メニュー

Full screen=フルスクリーン、Iconify=アイコン化、Move=ウィンドウの移動、Resize=ウィンドウのリサイズ、Down=ウィンドウを背面へ移動、Close=ウィンドウを終了、Kill=ウィンドウを強制終了、といった操作になっている。特にMoveは使う機会が多いだろう。タイトルバーを表示しないアプリケーションを移動する場合などは、このメニューを使うことになる。

タイトルバー

twmのタイトルバーにはアイコン化とサイズ変更が表示されていて、アプリケーションを終了するボタンが付いていない。次の設定を追加すると、アプリケーションを終了するためのアイコン[X]がタイトルバーに表示されるようになる。

# タイトルバーに終了ボタンを追加
RightTitleButton ":delete" = f.delete

右から2つ目の[X]アイコンがアプリケーション終了ボタン

もう1つ設定を知っておいたほうがよいのが、タイトルバーを表示しない設定だ。次のようにタイトルバーを表示したくないアプリケーションの名前を列挙しておくと、該当するアプリケーションはタイトルバーが表示されなくなる。

# タイトルバーを付けないアプリケーションを設定
NoTitle
{
    "wmalbum" "wmcdplay" "wmfmixer" "wmix" "wmmixer" "wmmp3" "wmrecord"
    "wmsmixer" "wmtune" "wmusic" "wmglobe" "wmjupiter" "wmmoonclock"
    "wmsolar" "wmspaceweather" "wmsun" "wmpinboard" "wmstock" "wmget"
    "wmeyes" "wmfortune" "wmminichess" "wmpuzzle" "wmqstat" "wmshuffle"
    "wmtictactoe" "wmtimebomb" "wmgrabimage" "wmbiff" "wmmail" "wmmaiload"
    "wmmultipop3" "wmpop3" "wmcalc" "wmScoreBoard" "wmcalendar" "wmcp"
    "wmfirew" "wminfo" "wmjulia" "wmmand" "wmpal" "wmproxyper" "wmtunlo"
    "wmweather" "wmweather+" "wmwork" "wmx10" "wmlj" "wmnd" "wmnet"
    "wmnet2" "wmnetload" "wmnetmon" "wmpiki" "wmping" "wmq3" "wmwave"
    "wmlpq" "wmcyrx" "wmapm" "wmapmload" "wmavgload" "wmbattery"
    "wmbluecpu" "wmbsdbatt" "wmcpuload" "wmcube-gdk" "wmcube" "wmfire"
    "wmflame" "wmfsm" "wmhm" "wminet" "wmlmmon" "wmlongrun" "wmmemfree"
    "wmmemload" "wmmemmon" "wmmon" "wmmount" "wmpccard" "wmshutdown"
    "wmtop" "wmupmon" "wmzazof" "wmnetselect" "wmbday" "wmbinclock"
    "wmblueclock" "wmcalclock" "wmclock" "wmclockmon" "wmdate" "wmfishtime"
    "wmfuzzy" "wmitime" "wmtime" "wmtimer" "wmtz" "wmappl" "wmblob"
    "wmbutton" "wmcliphist" "wmctrl" "wmdrawer" "wmessage" "wmfstatus"
    "wmmatrix" "wmmenu" "wmmsg" "wmoldmenu2new" "wmxss" "wmsysmon"
}

Window Makerのときに取り上げたドックアプリは、どちらかというとタイトルバーが付いてほしくない。この場合、上記設定を行えば、次のようにタイトルバーのつかない状態でドックアプリが表示されるようになる。

タイトルバーの表示されないアプリケーションの例

こうしたアプリケーションはルートウインドウに張り付いたように見え、なかなか便利だったりする。こうしたアプリケーションを移動するには、先述のようにメニューからMoveを選んで移動させればよい。

ウインドウのランダム配置

もう1つやっておいたほうがよいのが、ランダム配置の設定だ。この設定を行っておくと、アプリケーションを起動したときにウインドウがランダムに配置されるようになる。設定は次のとおりだ。

# 位置情報指定のないウィンドウはランダムに配置
RandomPlacement

twmは設定を行わないとアプリケーション起動時にどこにアプリケーションを配置するかをユーザーに尋ねる。いちいち聞かれるのは面倒なので、勝手に配置してくれるようにしておこうというわけだ。

$HOME/.twmrcの設定まとめ

今回取り上げた$HOME/.twmrcの設定例を1つのファイルにしたものを次に記載しておく。

# カラー設定
Color
{
    BorderColor "slategrey"
    DefaultBackground "rgb:2/a/9"
    DefaultForeground "gray85"
    TitleBackground "rgb:2/a/9"
    TitleForeground "gray85"
    MenuBackground "rgb:2/a/9"
    MenuForeground "gray85"
    MenuBorderColor "slategrey"
    MenuTitleBackground "gray70"
    MenuTitleForeground "rgb:2/a/9"
    IconBackground "rgb:2/a/9"
    IconForeground "gray85"
    IconBorderColor "gray85"
    IconManagerBackground "rgb:2/a/9"
    IconManagerForeground "gray85"
}

# マウスボタンとメニュー表示を結び付け
Button1 = : root : f.menu "rootmenu"
Button3 = : root : f.menu "windowmenu"

# ルートメニュー
menu "rootmenu"
{
    "Twm"           f.title
    "XTerm"         f.exec "exec xterm &"
    "LXTerminal"    f.exec "exec lxterminal &"
    "Full screen"   f.fullzoom
    "Iconify"       f.iconify
    "Move"          f.move
    "Resize"        f.resize
    "Down"          f.lower
    "Applications      " f.menu "menu_application"
    "Restart"       f.restart
    "Exit"          f.quit
}

menu "menu_application"
{
    "Applications"  f.title
    "Chromium"      f.exec "exec chromium &"
    "Firefox"       f.exec "exec firefox &"
    "Gimp"          f.exec "exec gimp &"
    "Video LAN"     f.exec "exec vlc &"
}

# ウインドウ操作メニュー
menu "windowmenu"
{
    "Window Menu"   f.title
    "Full screen"   f.fullzoom
    "Iconify"       f.iconify
    "Move"          f.move
    "Resize"        f.resize
    "Down"          f.lower
    "Close"         f.delete
    "Kill"          f.destroy
}

# タイトルバーに終了ボタンを追加
RightTitleButton ":delete" = f.delete

# タイトルバーを付けないアプリケーションを設定
NoTitle
{
    "wmalbum" "wmcdplay" "wmfmixer" "wmix" "wmmixer" "wmmp3" "wmrecord"
    "wmsmixer" "wmtune" "wmusic" "wmglobe" "wmjupiter" "wmmoonclock"
    "wmsolar" "wmspaceweather" "wmsun" "wmpinboard" "wmstock" "wmget"
    "wmeyes" "wmfortune" "wmminichess" "wmpuzzle" "wmqstat" "wmshuffle"
    "wmtictactoe" "wmtimebomb" "wmgrabimage" "wmbiff" "wmmail" "wmmaiload"
    "wmmultipop3" "wmpop3" "wmcalc" "wmScoreBoard" "wmcalendar" "wmcp"
    "wmfirew" "wminfo" "wmjulia" "wmmand" "wmpal" "wmproxyper" "wmtunlo"
    "wmweather" "wmweather+" "wmwork" "wmx10" "wmlj" "wmnd" "wmnet"
    "wmnet2" "wmnetload" "wmnetmon" "wmpiki" "wmping" "wmq3" "wmwave"
    "wmlpq" "wmcyrx" "wmapm" "wmapmload" "wmavgload" "wmbattery"
    "wmbluecpu" "wmbsdbatt" "wmcpuload" "wmcube-gdk" "wmcube" "wmfire"
    "wmflame" "wmfsm" "wmhm" "wminet" "wmlmmon" "wmlongrun" "wmmemfree"
    "wmmemload" "wmmemmon" "wmmon" "wmmount" "wmpccard" "wmshutdown"
    "wmtop" "wmupmon" "wmzazof" "wmnetselect" "wmbday" "wmbinclock"
    "wmblueclock" "wmcalclock" "wmclock" "wmclockmon" "wmdate" "wmfishtime"
    "wmfuzzy" "wmitime" "wmtime" "wmtimer" "wmtz" "wmappl" "wmblob"
    "wmbutton" "wmcliphist" "wmctrl" "wmdrawer" "wmessage" "wmfstatus"
    "wmmatrix" "wmmenu" "wmmsg" "wmoldmenu2new" "wmxss" "wmsysmon"
}

# 位置情報指定のないウインドウはランダムに配置
RandomPlacement

こんな感じでtwmを設定することができる。「twmrc」という名前でlocale検索を書けるとサンプルの設定ファイルが見つかるので、そちらも参考にされたい。

また、$HOME/.twmrcで設定できる内容はtwm(1)のオンラインマニュアルにひととおり書いてあるので、こちらを参考にして書いてもらってもよいだろう。