Ubuntu Weekly Recipe

第124回タイル型ウィンドウマネージャを使ってみよう

デフォルト状態のUbuntuでは、Gnomeというデスクトップ環境が動いているのは皆様ご存知の通りです。しかし、Ubuntuにはそれ以外にも多くのデスクトップ環境やウィンドウマネージャがパッケージとして用意されており、簡単にデスクトップを着替えることができたりします。

さて、6月といえば衣替えの季節。そこで今週は、Ubuntuのデスクトップも衣替えをしてみることにしましょう。

様々なデスクトップ環境

Gnome以外の環境として、まず最初に思いつくのがKDEとXFCEです。Kubuntu、Xubuntuといった派生バージョンは、これらのデスクトップ環境がGnomeに代わってデフォルトに採用されています。標準のUbuntuに、KubuntuやXubuntuのデスクトップをインストールすることもできます。それにはtaskselコマンドを使用するのがよいでしょう。端末からtaskselを実行すると、インストールできる「タスク」の一覧が表示されます。ここでインストールしたいタスク、つまりKubuntu DesktopやXubuntu Desktopにチェックを入れれば、必要なパッケージの一切合切を自動的にインストールしてくれるというわけです。kubuntu-desktopパッケージを手動でインストールするよりも、taskselに任せてしまうことをおすすめします。他にも軽量なデスクトップ環境であるLXDEなどもパッケージが用意されています。

そしてインストールしたウィンドウマネージャは、ログイン時にディスプレイマネージャから「セッション」として選択することができます。ユーザを選択したら、パスワードを入力する際に使いたいセッションを選択してからログインしてみましょう。

図1 taskselでデスクトップ環境をインストール`
図1 taskselでデスクトップ環境をインストール
図2 KDEのデスクトップ画面
図2 KDEのデスクトップ画面
図3 XFCEのデスクトップ画面
図3 XFCEのデスクトップ画面
図4 GDMのログイン画面からセッションを選択
図4 GDMのログイン画面からセッションを選択

タイル型ウィンドウマネージャとは?

さて、GnomeやKDE、XFCEなどのデスクトップ環境はそれぞれ違うものですが、⁠ウィンドウを重ね合わせて表示する」という点では共通しています。これらのウィンドウマネージャはスタック型やコンポジット型に分類されるもので、デスクトップ上にウィンドウが「浮かんで」おり、それぞれのウィンドウを「重ねて」配置するような挙動をとります。WindowsやMac OS Xと同じような、いわゆる一般的なウィンドウシステムの挙動をするウィンドウマネージャです[1]⁠。

このようなスタック型、コンポジット型ウィンドウマネージャの対極に「タイル型ウィンドウマネージャ」が存在します。タイル型のウィンドウマネージャの特徴は、デスクトップ全体を使ってウィンドウを「敷き詰める」ところにあります。開いているウィンドウが一つであればデスクトップ全体に最大化して表示し、ウィンドウが増減すると、デスクトップ全体にフィットするよう、すべてのウィンドウの大きさと位置を自動的に調整して再配置します。デスクトップ上で、これらのウィンドウが「重なる」ことはありません。

スタック型のウィンドウマネージャを使っていると、デスクトップ上に「無駄なエリア」ができてしまいます。例えばウィンドウを最大化していない限り、ウィンドウの外側の部分は無駄なデッドスペースになっています。またウィンドウが重なっていると、下にあるウィンドウを操作したい時は、クリックして最前面に移動させなければなりません。もしも二つのウィンドウを並べて作業したいと思ったら、マウスドラッグでウィンドウサイズを調整し、手でウィンドウを配置する必要があります。タイル型ウィンドウマネージャは、このようなウィンドウ配置、リサイズを自動的に行うことができるので、デスクトップの面積を最も効率よく使うことができるウィンドウマネージャと言えるでしょう。また、すべてのウィンドウを常時俯瞰することができるため、ウィンドウが行方不明になってしまうこともありません。

図5 ウィンドウのまわりには、無駄な領域ができてしまうこともある
図5 ウィンドウのまわりには、無駄な領域ができてしまうこともある

Xmonadを使ってみよう

それでは、タイル型ウィンドウマネージャであるXmonadをインストールしてみましょう。端末から以下のコードを入力したら、いったんログアウトしてセッション「Xmonad」でログインしてください。

$ sudo apt-get install xmonad

Xmonadのセッションへログインすると、壁紙だけが表示されるはずです。Gnomeのようにパネルやアイコンは表示されないので、起動に失敗したかと見間違えてしまう画面ですが、これでXmonadは正常に起動しています。

このままでは何もできないので、まずは端末を起動させてみましょう。Xmonadでは、各種動作のショートカットキーに専用のModキーを使用し、デフォルトでModキーは左Altに設定されています。端末の起動はMod+Shift+Enterです。どうでしょう? 画面一杯にGnome端末が表示されましたか? 次は端末を複数起動させてみたり、exitで端末を終了させてみましょう。ウィンドウのリサイズと再配置が自動的に行われるのが分かるはずです。

図6 壁紙だけが表示される、シンプルきわまるXmonadのデスクトップ
図6 壁紙だけが表示される、シンプルきわまるXmonadのデスクトップ
図7 端末を複数開けば、自動的に再配置が行われる
図7 端末を複数開けば、自動的に再配置が行われる

Xmonadでは、アプリケーションの起動にキーワードランチャを使用することができます。デフォルトでショートカットから呼び出せるランチャにはdwm-toolsとgmrunがありますので、それぞれパッケージをインストールしておきましょう。これらはxmonadパッケージが依存しているわけではないので、手動でインストールする必要があります。

$ sudo apt-get install dwm-tools gmrun

dwm-toolsはMod+pで呼び出します。Mod+pを押すと、画面最上部に灰色の帯状のエリアが表示され、ここに入力したキーワードと候補の一覧が表示されます。起動させたいプログラム名を入力してEnterを押せば、そのプログラムを起動させることができます。つまりGnome-Doと同じですね。対してgmrunはMod+Shift+pで呼び出します。こちらはキーワードの入力欄が画面中央に表示されます。GnomeでAlt+F2で呼び出せる「アプリケーションの実行」とほぼ同じようなものだと思ってください。

図8 キーワードランチャのgmrun
図8 キーワードランチャのgmrun

Xmonadの基本的な操作

Xmonadはマウスを使わずに快適なウィンドウ環境を提供することを目指していますから、ウィンドウ操作のショートカットをマスターする必要があります。まずはウィンドウ分割の操作です。デフォルトでは画面左半分にマスターウィンドウが表示され、右側にその他のウィンドウが並んでいますが、Mod-Spaceを押す度にこの分割方法を変えることができます。マスターウィンドウが画面上半分に表示される横分割と、マスターウィンドウがデスクトップ全体に表示される最大化を、状況によって使い分けるとよいでしょう。Mod-Shift-Spaceを押せば、いつでもデフォルトのレイアウトに戻すこともできます。

それぞれのウィンドウのフォーカスは、Mod-j/kで移動させます。Mod-mを押せば、現在のフォーカスがどこにあっても、強制的にマスターウィンドウへフォーカスを移動させられます。

作業の内容によって、マスターウィンドウを変更したいこともあるでしょう。その時はマスターウィンドウにしたいウィンドウにフォーカスを移動し、Mod-Enterを押してください。現在のウィンドウとマスターウィンドウを入れ替えることができます。またMod-h/lではマスターウィンドウが画面全体に対して占有する面積を調整できます。さらにXmonadは1から9までのワークスペースを持っていますが、ワークスペースの切り替えやワークスペース間のウィンドウ移動もショートカットで行います。

Xmonadの使い方については、Xmonadのガイドが参考になります。一読しておくとよいでしょう。

表1 Xmonadの主なキーバインド
Mod-Shift-cフォーカスされているウィンドウを閉じる
Mod-Space縦分割->"横分割->"最大化の順でレイアウトアルゴリズムを変更する
Mod-Shift-Spaceレイアウトアルゴリズムをデフォルト(縦分割)に戻す
Mod-j/kウィンドウフォーカスを順/逆に移動する
Mod-mマスターウィンドウへフォーカスを移動する
Mod-Enterマスターウィンドウとフォーカスウィンドウを入れ替える
Mod-h/lマスターウィンドウのサイズ比率を縮小/拡大する
Mod-1~9指定したワークスペースへ切り替える
Mod-Shift-1~9フォーカスウィンドウを指定したワークスペースへ移動させる
Mod-qXmonadを再起動
Mod-Shift-qXmonadを終了

Xmobarでステータスを表示

XmonadにはGnomeのようなパネルが存在しないため、少々殺風景です。そこでXmobarというステータスバーを追加してみることにしましょう。

$ sudo apt-get install xmobar

Xmobarの設定は、~/.xmobarrcに記述します。筆者はUbuntuのバージョン、CPU負荷、メモリ/スワップ使用量、ネットワーク負荷、バッテリー残量、日時を表示させるため、以下のような内容で設定を記述してみました。

Config { font = "xft:Sans-9:bold"
       , bgColor = "black"
       , fgColor = "grey"
       , position = Top
       , lowerOnStart = False
       , commands = [ Run Network "eth0" ["-L","0","-H","32","--normal","green","--high","red"] 10
                    , Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Swap [] 10
                    , Run Battery [] 600
                    , Run Com "lsb_release" ["-s","-d"] "" 36000
                    , Run Date "%Y %b %_d(%a) %H:%M:%S" "date" 10
                    ]
       , sepChar = "%"
       , alignSep = "}{"
       , template = "<fc=#ee9a00>%lsb_release%</fc> | %cpu% | %memory% %swap% | %eth0% | %battery% }{ %date%"
       }

さて、Xmobarを使うにはこれだけでは不足です。Xmonad側にXmobarを呼び出すことを知らせなければなりません。そのために設定ファイルである~/.xmonad/xmonad.hsファイルを作成します。余談ですが、拡張子hsはHaskellのソースコードで、Xmonadの設定ファイルは(実はXmoand本体も)Haskellで記述されています。Xmonadは再起動時に設定ファイルをコンパイルし、読み込んでいるのです。以下ではxmprocにxmobarを設定しています。これによってXmonad起動時にXmobarが起動されます。また、Modキーを左Altではなく、Windowsキーにバインドしなおしています。Xmonadの設定についてはコンフィグアーカイブが参考になるでしょう。

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import XMonad.Util.EZConfig(additionalKeys)
import System.IO
 
main = do
    xmproc <- spawnPipe "/usr/bin/xmobar /home/mizuno/.xmobarrc"  -- .xmoabrrcのパスを記述しておく
    xmonad $ defaultConfig
        { manageHook = manageDocks <+> manageHook defaultConfig
        , layoutHook = avoidStruts  $  layoutHook defaultConfig
        , logHook = dynamicLogWithPP $ xmobarPP
                        { ppOutput = hPutStrLn xmproc
                        , ppTitle = xmobarColor "green" "" . shorten 50
                        }
        , modMask = mod4Mask     -- WindowsキーをModキーとしてバインドする
        } `additionalKeys`
        [ ((mod4Mask .|. shiftMask, xK_z), spawn "xscreensaver-command -lock")
        , ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
        , ((0, xK_Print), spawn "scrot")
        ]

設定が完了したら、Xmonadを再起動しましょう。ショートカットはMod+qです。また、Xmonadを終了させてログイン画面に戻るには、Mod+Shift+qを使います。

図9 xmobarで現在のステータスを表示させてみた
図9 xmobarで現在のステータスを表示させてみた

いかがでしょうか? 一風変わったタイル型ウィンドウマネージャを、ぜひ試してみてください。

おすすめ記事

記事・ニュース一覧