xmonad ことはじめ
前から興味のあった xmonad におもむろに手を出したので、その記録です。
現状の xmonad の設定ファイルは以下の場所に push しています。
環境
- OS: Arch Linux
- Display Manager: LightDM 1.22.0
インストール
以下の 2 つのパッケージをインストールします。
xmonad-contrib
は xmonad
の動作自体には必須では無さそうですが、 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.hs
に main = 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