xmonadを使ってみる。
xmonadっていうタイル型ウインドウマネージャを使ってみた。
設定ファイルがHaskellできれい。
他にもawesomeってのもあったが、luaって知らない言語だった。
まあ、Haskellもやったことないけど。
Ubuntuのバージョンは10.10。
インストール
インストールは
# apt-get install xmonad
これで、ログイン(gdm)のときに選択できるようになる。
ついでに
# apt-get install dwm-tools xmobar
もいれておきます。
dwm-toolsはdmenuのこと。
$ man xmonad
基本操作
最低必要な操作は、
mod-shift-q | xmonadの終了 |
mod-shift-return | terminalの起動 |
始めに使えると便利な操作は、
mod-shift-c | ウインドウを閉じる |
mod-{j,k,tab,shift-tab} | 他のウインドウにフォーカスする |
mod-{h,l} | ウインドウの大きさを変える |
mod-space | ウインドウのレイアウトを変える |
mod-[1..9] | ワークスペースの移動 |
mod-p | dmenuによるプログラムの起動 |
mod-q | xmonadの再起動 |
mod-qは設定ファイルをいじるとき、とても便利。
これのおかげで設定はかなりスムーズ。
modキーはデフォルトでは左のAlt。
設定
注意! Haskellは勉強したことないので、ここから下はかなり憶測です。
基本設定
まず、/usr/share/doc/libghc6-xmonad-doc/examples/xmonad.hs.gzに
設定ファイルの例があるので、コピーしてくる。
$ cp /usr/share/doc/libghc6-xmonad-doc/examples/xmonad.hs.gz . $ gunzip xmonad.hs.gz $ mkdir ~/.xmonad $ mv xmonad.hs ~/.xmonad/
このファイルは、基本的にはmy〜を定義していって
最後に
main = xmonad defaults
でdefaultsを実行。
defaultsっていうのはそのすぐ下で
defaults = defaultConfig { -- simple stuff terminal = myTerminal, focusFollowsMouse = myFocusFollowsMouse, borderWidth = myBorderWidth, modMask = myModMask, numlockMask = myNumlockMask, workspaces = myWorkspaces, normalBorderColor = myNormalBorderColor, focusedBorderColor = myFocusedBorderColor, -- key bindings keys = myKeys, mouseBindings = myMouseBindings, -- hooks, layouts layoutHook = myLayout, manageHook = myManageHook, handleEventHook = myEventHook, logHook = myLogHook, startupHook = myStartupHook }
と定義される。
なので、基本的にはmy〜の定義を変更するだけでかなり設定できる。
modキーとしてAltは使いたくないのでWindows(Super)に変更。
myModMask = mod4Mask
terminalはgnome-terminalを使う。
myTerminal = "gnome-terminal"
ワークスペース1,2に名前を付けてみる。
myWorkspaces = ["1:work","2:web"] ++ map show [3..9]
変更したら、mod+qで設定を反映する。
ダメなときはエラーが出る。
ごちゃごちゃしてるのはいやなので、いらないものを消してみる。
それでもうまく動いてくれるみたい。結局
-- -- .xmonad/xmonad.hs -- -- インポート import XMonad ------------------------------------------------------------------------ -- こまごました設定 -- ターミナルの指定 myTerminal = "gnome-terminal" -- modキーをWindowsに myModMask = mod4Mask -- ワークスペース myWorkspaces = ["1:work","2:web"] ++ map show [3..9] ------------------------------------------------------------------------ -- 設定の実行 -- 実行 main = xmonad myConfig -- 設定(上書きしなければデフォルトの値が用いられる) myConfig = defaultConfig { terminal = myTerminal, modMask = myModMask, workspaces = myWorkspaces }
となる。
xmobarの設定
これだけだと味気ないので、時間や日付もわかるようにしたい。
また、ワークスペースも表示してくれるとうれしい。
これは最初にいれたxmobarで実現できる。
$ man xmobar
これを用いるとCPUやメモリ、ネットワーク、バッテリー、天気なども
表示してくれるようになる。
GNU Screenのステータスバーのようなもの。
設定ファイルは~/.xmobarrcだが、これも設定例があるのでコピーしてくる。
$ cp /usr/share/doc/xmobar/examples/xmobarrc-example ~/.xmobarrc
デフォルトではいろいろ表示されるようになっているが、
必要ないものは使わない主義なので、
-- -- .xmobarrc -- Config { font = "xft:Sans-10:bold" , bgColor = "black" , fgColor = "grey" , position = Top , lowerOnStart = False , commands = [ Run Com "id" ["-un"] "uname" 36000 , Run Com "date"["+'%x(%a) %H:%M'"] "date" 10 , Run StdinReader ] , sepChar = "%" , alignSep = "}{" , template = "%StdinReader% }{ <fc=#ee9a00>%date%</fc> %uname%" }
とした。
もっぱら変更するのはcommandsの中と、templateの指定。
dateはcommandsの中で何も指定しないと普通に日本語で秒まで表示してくれるが、
Run Dateで指定すると英語になってしまう。
秒まで表示するとチカチカしていやなので書式指定したかったが、
locale?を指定する方法がわからなかったので、
普通のdateコマンドからの標準出力を用いることにした。
なにかいい方法があったら教えてください。
最後に、xmonad.hsにxmobarの設定を加えて終わり。
-- -- .xmonad/xmonad.hs -- -- インポート import XMonad import XMonad.Hooks.DynamicLog ------------------------------------------------------------------------ -- こまごました設定 -- ターミナルの指定 myTerminal = "gnome-terminal" -- modキーをWindowsに myModMask = mod4Mask -- ワークスペース myWorkspaces = ["1:work","2:web"] ++ map show [3..9] ------------------------------------------------------------------------ -- xmobarの設定 -- Command to launch the bar. myBar = "xmobar" -- 表示の指定 myPP = xmobarPP { ppCurrent = xmobarColor "#429942" "" . wrap "<" ">" } -- Keybinding to toggle the gap for the bar. toggleStrutsKey XConfig {XMonad.modMask = modMask} = (modMask, xK_b) ------------------------------------------------------------------------ -- 設定の実行 -- 実行 main = xmonad =<< statusBar myBar myPP toggleStrutsKey myConfig -- 設定(上書きしなければデフォルトの値が用いられる) myConfig = defaultConfig { terminal = myTerminal, modMask = myModMask, workspaces = myWorkspaces }
参考
xmonad - ArchWiki
適度に短く要点がまとまっているので、設定のときにかなり参考になりました。