Xmonad/Using xmonad in Gnome: Difference between revisions
(Clean up and prioritize ManageDocks over gaps) |
m (Minor verbiage, style edits) |
||
Line 74: | Line 74: | ||
<haskell> | <haskell> | ||
main = xmonad $ defaultConfig | main = xmonad $ defaultConfig | ||
modMask = mod4Mask | { modMask = mod4Mask | ||
} | |||
</haskell> | </haskell> | ||
===Make space for the panel=== | ===Make space for the panel=== | ||
[http://hackage.haskell.org/packages/archive/xmonad-contrib/0.5/doc/html/XMonad-Hooks-ManageDocks.html ManageDocks] makes it possible for Xmonad to work with panels in the way they expect, automatically leaving the appropriate amount of room for them at the edges of the screen. | [http://hackage.haskell.org/packages/archive/xmonad-contrib/0.5/doc/html/XMonad-Hooks-ManageDocks.html ManageDocks] makes it possible for Xmonad to work with panels in the way they expect, automatically leaving the appropriate amount of room for them at the edges of the screen. ''ManageDocks'' has been enabled in the example configuration above. By itself, configuration looks like this: | ||
<haskell> | <haskell> | ||
Line 94: | Line 94: | ||
<haskell> | <haskell> | ||
main = xmonad $ defaultConfig | main = xmonad $ defaultConfig | ||
defaultGaps = [(24,24,0,0)] | { defaultGaps = [(24,24,0,0)] | ||
} | |||
</haskell> | </haskell> | ||
===Extended Window Manager Hints=== | ===Extended Window Manager Hints=== | ||
[http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html EwmhDesktop] makes it possible to let Gnome know about Xmonad windows and workspaces. EwmhDesktop has been enabled in the example configuration above. By itself, | [http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html EwmhDesktop] makes it possible to let Gnome know about Xmonad windows and workspaces. ''EwmhDesktop'' has been enabled in the example configuration above. By itself, configuration looks like this: | ||
<haskell> | <haskell> | ||
import XMonad.Hooks.EwmhDesktops | import XMonad.Hooks.EwmhDesktops | ||
main = xmonad $ defaultConfig { | main = xmonad $ defaultConfig | ||
{ logHook = ewmhDesktopsLogHook | |||
} | |||
</haskell> | </haskell> | ||
Revision as of 01:07, 30 March 2008

Introduction

Xmonad makes an excellent drop-in replacement for Gnome's default window manager (metacity) giving you a slick tiling window manager. This guide will help you set up Gnome to use Xmonad 0.6.
This is an update to the previous page on Xmonad/Using xmonad in Gnome/0.5, which in turn was an update to the original page on the subject.
Setting up Gnome to use Xmonad
The easiest way is to let Gnome start Xmonad itself by modifying ~/.gnomerc to contain
export WINDOW_MANAGER=/usr/bin/xmonad
Configure Xmonad to interoperate with Gnome
Put this in ~/.xmonad/xmonad.hs:
import XMonad
import XMonad.Hooks.ManageDocks
import XMonad.Hooks.EwmhDesktops
main = xmonad $ defaultConfig
{ manageHook = manageDocks <+> manageHook defaultConfig
, logHook = ewmhDesktopsLogHook
, layoutHook = avoidStruts $ layoutHook defaultConfig
, modMask = mod4Mask
}
This should set up Xmonad to make space for Gnome's panel and status bar automatically.
Having done this, you should now be able to use Gnome with Xmonad, and most things will work. At the time of writing, there are a couple of things that don't fully work: clicking on the taskbar to select a window doesn't focus the window, and clicking on the panel to switch desktops doesn't. Of course you can use the standard Xmonad keys to perform these actions instead.
Explanations of the various options are given below, along with some other things you might want to tweak.

Tweak Gnome to work better with Xmonad
These are a few steps that greatly improves the experience of running Xmonad under Gnome. Note that on some systems the binary gconftool is called gconftool-2.
Disable the Nautilus desktop
From the command line execute:
gconftool --type boolean --set /apps/nautilus/preferences/show_desktop false
Changing desktop background
If you need to change the workspace background programmatically (i.e. from some extension setting in xmonad's configuration file), you can use the command:
gconftool --type string --set /desktop/gnome/background/picture_filename "/path/to/your/image.png"
Fixing the pointer
After switching to Xmonad you might notice that the default pointer isn't the one you chose in your beautiful Gnome theme. The way to address this is to run xsetroot during session startup. Open the session configuration dialogue (System -> Preferences -> Sessions). Add a new startup program, choose any name and comment you want but make the command
/usr/bin/xsetroot -cursor_name left_ptr
Tips on configuring Xmonad
Allthe configuration is done in ~/.xmonad/xmonad.hs.
Change the mod key
The default mod key is alt, which conflicts with Gnome keybindings. In order to use be able to use the keyboard to e.g. getting rid of dialogues we rebind it to the left logo key:
main = xmonad $ defaultConfig
{ modMask = mod4Mask
}
Make space for the panel
ManageDocks makes it possible for Xmonad to work with panels in the way they expect, automatically leaving the appropriate amount of room for them at the edges of the screen. ManageDocks has been enabled in the example configuration above. By itself, configuration looks like this:
import XMonad.Hooks.ManageDocks
main = xmonad defaultConfig
{ manageHook = manageDocks <+> manageHook defaultConfig
, layoutHook = avoidStruts $ layoutHook defaultConfig
}
Prior to version 0.7, Xmonad alternatively supported a gaps option, configured like this:
main = xmonad $ defaultConfig
{ defaultGaps = [(24,24,0,0)]
}
Extended Window Manager Hints
EwmhDesktop makes it possible to let Gnome know about Xmonad windows and workspaces. EwmhDesktop has been enabled in the example configuration above. By itself, configuration looks like this:
import XMonad.Hooks.EwmhDesktops
main = xmonad $ defaultConfig
{ logHook = ewmhDesktopsLogHook
}
Key bindings for switching desktops
Gnome lays out the desktops in a row by default, and uses Ctrl+Alt+Left/Right for switching desktops left/right. To get similar behaviour in Xmonad, you need to add some keybindings. The contrib module XMonad.Actions.CycleWS has some useful actions for cycling workspaces, and I use these keybindings:
-- moving workspaces
, ((modMask, xK_Left ), prevWS )
, ((modMask, xK_Right ), nextWS )
, ((modMask .|. shiftMask, xK_Left ), shiftToPrev )
, ((modMask .|. shiftMask, xK_Right ), shiftToNext )