前から興味のあった xmonad におもむろに手を出したので、その記録です。

現状の xmonad の設定ファイルは以下の場所に push しています。

環境

  • OS: Arch Linux
  • Display Manager: LightDM 1.22.0

インストール

以下の 2 つのパッケージをインストールします。 xmonad-contribxmonad の動作自体には必須では無さそうですが、 xmonad の設定を変更していったりする上で実質無くてはならない存在なので同時にインストールしておきます。

$ yaourt -S xmonad xmonad-contrib

インストール後 /usr/share/xsessions/ 以下に xmonad 用のデスクトップエントリファイルができ、LightDM ではログイン時に右上のボタンから xmonad を選択できるようになりました (参考: ArchWiki ディスプレイマネージャ)。

xmonad の操作

一通りの操作は以下のガイドから学ぶことができます。

カスタマイズ

xmonad は初期状態だとまだまだ使いにくい部分も多くカスタマイズを加えたい点が出てきます。 ここではさくっと設定ができた以下のものについて何をやったかまとめておきます。

dmenu

dmenu をインストールすると <mod-p> でアプリケーションの検索、起動が行えるようになります (mod はデフォルトでは <Alt> キーを表す)。

$ yaourt -S dmenu

xmobar

xmobar をインストールするとよくある感じにディスプレイ上部にステータスバーが表示できます。 ここに例えば現在アクティブな画面の情報や CPU, Memory といった情報を出すことができます。

$ yaourt -S xmobar

xmobar を有効にするためには ~/.xmonad/xmonad.hsmain = xmonad =<< xmobar defaultConfig {...} という記述を足します。

import XMonad
import XMonad.Hooks.DynamicLog

main = xmonad =<< xmobar defaultConfig
    { terminal = "urxvt"
    , borderWidth = 3
    }

xmobar 以外にも多少記述がありますが、このように xmonad の設定はこの xmonad.hs に集約されます。

xmobar 自体の設定はデフォルトでは ~/.xmobarrc のようです。

設定を変更後は xmonad --recompile からの <mod-q> で設定を現在動作中の xmonad に反映することができます (設定によってはだめなときもある気がしますが)。

gvim

自分は gvim を使うことがあるのですが、xmonad で使用した場合、下部に不自然なスペースができてしまいます。これを直すために こちら を参考に .vimrc に以下の設定を足しました。

set guiheadroom=0

画面の輝度と音量調節

画面の輝度と音量をキーで調整できるように、ショートカットを作成します。

import           XMonad
import           XMonad.Hooks.DynamicLog
import           XMonad.Util.EZConfig    (additionalKeysP)
import           XMonad.Util.Run         (spawnPipe)

main = xmonad =<< xmobar (def
    { terminal = "urxvt"
    , modMask = mod4Mask -- Change mod key to <Super-L> (windows key)
    , borderWidth = 3
    }
    `additionalKeysP` keysP' -- additionalKeysP :: XConfig l -> [(String, X ())] -> XConfig l
    )

-- shortcut key settings
keysP' = [ ("<XF86AudioRaiseVolume>", spawn "pactl set-sink-volume 0 +5%") -- Volume up
         , ("<XF86AudioLowerVolume>", spawn "pactl set-sink-volume 0 -5%") -- Volume down
         , ("<XF86AudioMute>", spawn "pactl set-sink-mute 0 toggle") -- Toggle volume mute
         , ("<XF86MonBrightnessUp>", spawn "xbacklight + 5 -time 100 -steps 1") -- Monitor brightness up
         , ("<XF86MonBrightnessDown>", spawn "xbacklight - 5 -time 100 -steps 1") -- Monitor brightness down
         ]

keysP' がショートカットキーの定義で、各キーを押した場合に対応するコマンドが実行されるようにしています。 キーの名称は xev で確認しました。

実際にショートカットキーを反映させるには xmonad-contrib が提供する additionalKeysP 関数を使用しています。

TODO

何となく xmonad を使い始めるのは色々設定が必要で大変そうだというイメージがあったのですが、カスタマイズにものすごいこだわりがあるというわけでなければ思ったよりは敷居が低そうに感じました。

とはいえまだ本格的に移行できる状態ではなく、少なくとも以下の設定はできるように今後ちょくちょく手を入れたいと思います。

  • Screen Lock
  • 日本語入力
  • Display network
  • Display battery in xmobar
  • Touch pad

参考