FrontPage  Index  Search  Changes  Login

xmonad

xmonad

Haskellで書かれたタイル型WM。設定ファイルもHaskell。

インストール

aptでxmonadをインストールしてやりましょう。ついでにdmenu(インストールするのはdwm-tools)とxmobarもインストールしておけば後で幸せになれるかも。

設定

なにはともあれ、無変換キーが存在しているキーボードならば、それをmod3(xmodmapを使いましょう)に割り当てておく。私のxmodmapはこんな感じ。

clear mod3
add mod3 = Muhenkan

$HOME/.xmonad/xmonad.hsへ設定を記述。設定例は/usr/share/doc/libghc6-xmonad-doc/examples/xmonad.hs.gz(Debian/Ubuntuの場合)を見ましょう。私のxmonad.hsは以下のとおり。 xmonad 0.9.1の時。ただし、

import XMonad
import XMonad.Hooks.DynamicLog
import XMonad.Hooks.ManageDocks
import XMonad.Util.Run(spawnPipe)
import System.IO

-- Layout
import XMonad.Layout.Spiral
import XMonad.Layout.DragPane

myTerminal = "urxvt"

myManageHook = composeAll
   [ className =? "Wmmixer" --> doShift "3:音楽"
   , className =? "Audacious" --> doShift "3:音楽"
   , className =? "Firefox" --> doShift "2:web"
   , className =? "Smplayer" --> doShift "4"
   , className =? "stalonetray" --> doIgnore
   , className =? "Gimp"           --> doFloat
   , className =? "Skype.real"           --> doFloat
   , title     =? "VLC メディアプレイヤー" --> doFloat
   , title     =? "MPlayer"           --> doFloat
   , title     =? "MPlayer - Video"           --> doFloat
   ]

myWorkspaces = ["1:ターミナル","2:web","3:音楽"] ++ map show [4..9]

myLayout = avoidStruts $ spiral (6/7) ||| dragPane Horizontal 0.1 0.5 ||| Full

mylogHook h = dynamicLogWithPP defaultPP {
                ppTitle  = shorten 80
              , ppLayout = (>> "")
              , ppOutput = hPutStrLn h
              }

main = do
  xmproc <- spawnPipe "xmobar $HOME/.xmobarrc"
  xmonad $ defaultConfig {
               terminal = myTerminal
             , manageHook = myManageHook
             , workspaces = myWorkspaces
             , layoutHook = myLayout
             , logHook = mylogHook xmproc
             }

ついでに.xsessionも弄って、xmonadが起動したときに他のソフトも起動させるようにする。以下私の例。

#!/bin/sh
PATH=$HOME/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/1.8/bin:/usr/lib/:$HOME/.cabal/bin:
#xrdb -merge $HOME/.Xresources
xmodmap $HOME/.Xmodmap

/opt/atokx3/sample/iiimf_status_hide

# $ fc-list :lang=ja を参考にフォントを指定
#uxterm -fa 'xft:VL ゴシック' -fs 11 -e screen -R &
#urxvt -e screen -R &
urxvt -e byobu &

# NicoCacheを起動
java -jar $HOME/Nico/NicoCache_nl.jar &
# Dropboxdを起動
$HOME/.dropbox-dist/dropboxd &
# 音量調節アプリを起動
gnome-volume-control-applet &
# systrayを起動
stalonetray -i 1 --geometry 6x1-0+0 -bg white &
#壁紙を設定
Esetroot -scale $HOME/Img/Air___Exo-1680x1050.jpg

numlockx on &

exec xmonad

xmonad.hsで呼び出してるxmobarの設定はほとんどデフォルトのまま。若干いじってますが。以下.xmobarrc

Config { font = "xft:IPA UIゴシック-9:bold"
       , bgColor = "black"
       , fgColor = "grey"
       , position = Static { xpos = 0 , ypos = 0, width = 1590, height = 16 }
       , lowerOnStart = True
       , commands = [ Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
                    , Run Swap [] 10
    		    , Run Date "%Y/%m/%d %k:%M:%S" "LA_ALL=ja date" 10
		    , Run StdinReader
		    , Run Com "$HOME/bin/myuptime.rb" [] "myuptime" 60
                    ]
       , sepChar = "%"
       , alignSep = "}{"
       , template = "%StdinReader% }{ %cpu% | %memory% * %swap% | <fc=#ee8a00>%date%</fc>| Uptime: <fc=#ee9a00>%myuptime%</fc>"
       }

myuptime.rbはuptimeを加工して表示させてます。ちょっと問題があるので公開は勘弁してください。

操作方法

以下の表は本家のチートシートmono-hateの週記さんを参考にしながら作成。

用語説明

マスターエリア
一番見やすい場所。大抵は左だったり上だったり。
フォーカス
操作している場所(という表現でいいのだろうか)。デフォルトで赤線で囲ってあるところ。
mod
modキーのこと。デフォルトはleft altな模様。

xmonad自体の操作

コマンド動作
mod + q xmonadの再起動
mod + shift + q xmonadの終了

プログラムの起動と終了

コマンド動作
mod + p dmenuの起動
mod + shift + pgmrunの起動
mod + shift + cフォーカスウインドウにあるプログラムの終了
mod + EnterTerminalの起動

workspaces

コマンド動作
mod + 数字対応するワークスペースへ移動
mod + shift + 数字現在操作しているウインドウを対応するワークスペースへ移動させる

layouts

コマンド動作
mod + t Tile floating window(よく分からないので原文ママ)
mod + space次のレイアウトへ
mod + shift + speace デフォルトのレイアウトへ
mod + t
Alt(Mod)キー?を押しながらマウスでドラッグすると、そのエリアにあったソフトがタイルで管理されなくなるものを、再度タイルとして扱う機能でした。訳し方に困ったのでとりあえずそのままですが。

master area

コマンド動作
mod + hマスターエリアを縮める
mod + lマスターエリアを広げる
mod + mフォーカスをマスターエリアへ
mod + ,画面の分割具合を変更?
mod + .上に同じ?
mod + Enter現在操作しているウインドウをマスターエリアへ移動

windows

mod + tabフォーカスを次のウインドウへ
mod + shift + tabフォーカスを前のウインドウへ
mod + jフォーカスを次のウインドウへ
mod + shift + j次のウインドウと位置を交換
mod + kフォーカスを前のウインドウへ
mod + shift + k前のウインドウと位置を交換

尚、チートシートにあるXineramaの項目に関してはマルチディスプレイ環境じゃないのでよく分からないので省略してます。

Document

HaskellWikixmonadに関するDocumentを邦訳したもの(かなりいい加減な上に、もう内容が古い。また、時間がある時頑張って翻訳しよう)。

Xmonad/FAQ

Name: Comment:

Last modified:2010/10/12 00:03:35
Keyword(s):
References:[FrontPage]