ほぼ意味がわからないまま四苦八苦して、なんとか使いやすい感じになったけど、メモしとかないと絶対に再現できないので自分用にメモ。
まずはインストール
sudo apt-get install xmonad xmobar
xmobarはなんかステータスバーみたいなやつ。デフォルトだとウィンドウ以外は表示されないけどとりあえず時計だけでも表示されて欲しいので導入。
それで、ホームフォルダ下の.xmonadフォルダのxmonad.hsに設定を書いていくわけだけど、わからないのでとりあえずm2ymさんのxmonad.hsをいただく。
https://gist.github.com/769071
よくわかんない部分が多いけどとりあえず
modm = mod4Mask
はsuperキーを修飾に使う的なことで、
borderWidth = 2 , normalBorderColor = "#99ccff" , focusedBorderColor = "#0033dd"
この辺はウィンドウ境界の線の太さとかいろとか。
`additionalKeys` [ ((modm, xK_f), sendMessage (Toggle FULL)) , ((modm, xK_g), sendMessage ToggleGaps) , ((modm, xK_j), sendMessage MirrorShrink) , ((modm, xK_k), sendMessage MirrorExpand) , ((modm, xK_period), windows W.focusDown) , ((modm, xK_comma), windows W.focusUp) , ((modm .|. shiftMask, xK_period), windows W.swapDown) , ((modm .|. shiftMask, xK_comma), windows W.swapUp) , ((modm, xK_w), nextScreen) ]
は上から、
現在のウィンドウのフルスクリーン化したり戻したりのトグル、
ステータスバーを出したり消したり、
ウィンドウの上下の境界を下に、
ウィンドウの上下の境界を上に、
フォーカスを前のウィンドウに、
フォーカスを次のウィンドウに、
現在のウィンドウを前のウィンドウの位置と入れ替え、
現在のウィンドウを次のウィンドウの位置と入れ替え、
???
といった感じ。
wを押したときに何がおきてるのかわかんないっす。
`additionalKeys` [ ((modm, xK_a), runOrRaise "emacs" (className =? "Emacs")) , ((modm, xK_s), runOrRaise "gnome-terminal" (className =? "Gnome-terminal")) , ((modm, xK_d), runOrRaise "firefox" (className =? "Namoroka")) ]
この辺は、「もしEmacsが起動してなかったら起動、起動してたらそれにフォーカス」
みたいなやつ。
m2ymさんは端末はurxvt, ブラウザはChromeをつかってるみたいですが、僕はgnome-terminalとfirefoxなのでこんな感じになってます。(いつの間にかfirefoxがNamorokaって名前になっちゃってるんだけどこれはなんなんだろ?)
classNameの調べ方は、
http://watermans-linuxtips.blogspot.com/2009/02/window.html
にあるように
$ xprop | grep WM_CLASS
で調べられます。
xmonadをインストールした時点でログイン画面のセッションの選択のとこにxmonadがでるのでこれを選ぶとxmonadが起動できるようになるのですが、そのままだとちょっとこまったことになります。
gnomeがやってくれてたこと(音量調節ボタンとか)がいろいろ効かなくなっちゃうので、それらをちゃんとつかえるようにします。
これは、~/.xsessionってファイルに書きこんでいきます。
現時点での僕の.xsessionは
#!/bin/sh xmodmap $HOME/.Xmodmap $HOME/.dropbox-dist/dropboxd & gnome-volume-control-applet & stalonetray -i 1 --geometry 6x1-0-0 -bg white & gnome-settings-daemon & xcompmgr & exec xmonad
こんな感じです。
xmodmapは変換キーをAltに、無変換キーをSuperにしてます。
んで、dropboxもつかうので、起動させています。
その次はボリュームコントロール用のアプリケーションの起動、
その次はgnomeだと右上らへんにあるシステムトレイがxmonadにはないのでその代わりになるやつです。
これは
sudo apt-get install stalonetray
しといてください。
次のgnome-settings-daemonは、もともとぼくはctrlとcapsの入れ替えをgnomeの設定の方でやってたので、その設定を適用してくれるやつっぽいです。
xcompmgrはemacsとかの半透明を有効にしてくれるやつです。
タイル型WMなので半透明にしても背景しか見えないのであんまり意味ないのですが気持ち的な問題でこれも付け足してます。
最後に、xmobarの設定です。
この設定は、~/.xmobarrcファイルに書いていくことになるのですが、ぐぐって見る限り大体みんな同じような設定をしているようなので、どれでも適当にもらってきてコピペしたらいいと思います。
そして、
main = xmonad $ defaultConfig ...
ってなってるとこを
main = do xmproc <- spawnPipe "xmobar" xmonad $ defaultConfig ...
にして、
最初の方に、
import XMonad.Util.Run(spawnPipe)
を足しといてください。
ただ、ひとつ僕がはまったのが、現在のワークスペースとフォーカスのあるウィンドウのタイトルを表示させる方法で、StdinReaderってやつらしいってのはすぐわかったのですが、表示させようとするとUpdating...とだけ表示されてうまくいきませんでした。
しらべてみたら、なんかlogHookとかいうのをいじんなきゃいけないみたいです。
http://web.archiveorange.com/archive/v/j8BnASHPs7ocYRzEB2yM
ということで、上記サイトにある通り、
myLogHook dest = dynamicLogWithPP defaultPP { ppOutput = hPutStrLn dest ,ppVisible = wrap "(" ")" } xmonad $ defaultConfig { ... , logHook = myLogHook xmproc }
と変更しておきます。
さらに、
import XMonad.Hooks.DynamicLog import XMonad.Util.Run
も追加しておいてください。
あと、もしかしたら、
sudo apt-get install i3status
がいるかもしれませんが、いらないかもしれません。
まとめ
xmonad.hs
import qualified Data.Map as M import XMonad import qualified XMonad.StackSet as W import XMonad.Actions.WindowGo import XMonad.Actions.CycleWS import XMonad.Hooks.ManageDocks import XMonad.Hooks.EwmhDesktops import XMonad.Hooks.DynamicLog import XMonad.Layout import XMonad.Layout.Gaps import XMonad.Layout.ResizableTile import XMonad.Layout.NoBorders import XMonad.Layout.MultiToggle import XMonad.Layout.MultiToggle.Instances import XMonad.Util.EZConfig import XMonad.Util.Run(spawnPipe) import XMonad.Util.Run tall = ResizableTall 1 (3/100) (1/2) [] layout = smartBorders $ mkToggle1 FULL $ gaps [(U,24)] $ tall ||| Mirror tall works = map show [1..9] modm = mod4Mask myLogHook dest = dynamicLogWithPP defaultPP { ppOutput = hPutStrLn dest , ppVisible = wrap "(" ")" } main = do xmproc <- spawnPipe "xmobar" xmonad $ defaultConfig { borderWidth = 2 , terminal = "gnome-terminal" , normalBorderColor = "#99ccff" , focusedBorderColor = "#0033dd" , layoutHook = layout , manageHook = manageDocks <+> composeAll [ className =? "MPlayer" --> doFloat, className =? "Gimp" --> doFloat, title =? "Speedbar" --> doFloat, title =? "Adobe Reader" --> doFloat] , logHook = myLogHook xmproc , workspaces = works , modMask = modm } `additionalKeys` [ ((modm, xK_f), sendMessage (Toggle FULL)) , ((modm, xK_g), sendMessage ToggleGaps) , ((modm, xK_j), sendMessage MirrorShrink) , ((modm, xK_k), sendMessage MirrorExpand) , ((modm, xK_period), windows W.focusDown) , ((modm, xK_comma), windows W.focusUp) , ((modm .|. shiftMask, xK_period), windows W.swapDown) , ((modm .|. shiftMask, xK_comma), windows W.swapUp) , ((modm, xK_w), nextScreen) ] `additionalKeys` [ ((modm .|. m, k), windows $ f i) | (i, k) <- zip works [ xK_exclam, xK_at, xK_numbersign , xK_dollar, xK_percent, xK_asciicircum , xK_ampersand, xK_asterisk, xK_parenleft , xK_parenright ] , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)] ] `additionalKeys` [ ((modm, xK_a), runOrRaise "emacs" (className =? "Emacs")) , ((modm, xK_s), runOrRaise "gnome-terminal" (className =? "Gnome-terminal")) , ((modm, xK_d), runOrRaise "firefox" (className =? "Namoroka")) ]
.xmobarrc
Config { font = "xft:Sans-9:bold" , bgColor = "black" , fgColor = "grey" , position = Top , lowerOnStart = False , commands = [ Run Weather "EGPF" ["-t","<station>: <tempC>C","-L","18","-H","25","--normal","green","--high","red","--low","lightblue"] 36000 , Run Network "eth0" ["-L","0","-H","32","--normal","green","--high","red"] 10 , Run Network "eth1" ["-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 Com "uname" ["-s","-r"] "" 36000 , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10 , Run StdinReader ] , sepChar = "%" , alignSep = "}{" , template = "%cpu% | %memory% * %swap% | %eth0% - %eth1% } %StdinReader% { <fc=#ee9a00>%date%</fc>| %EGPF% | %uname%" }
.xsession
#!/bin/sh xmodmap $HOME/.Xmodmap $HOME/.dropbox-dist/dropboxd & gnome-volume-control-applet & stalonetray -i 1 --geometry 6x1-0-0 -bg white & gnome-settings-daemon & xcompmgr & exec xmonad