This tutorial covers these topics:
•Usage of the client
•The tiling method
•Tags (or workspaces...)
After installing it, the default configuration file has to be copied to your home directory:
mkdir -p ~/.config/herbstluftwm cp /etc/xdg/herbstluftwm/autostart ~/.config/herbstluftwm/
You also should activate the tab completion for herbstclient. In case of bash, you can either activate the tab completion in general or source the herbstclient-completion from the bash_completion.d directory in your bashrc. In case of zsh the tab-completion normally is activated already (if not, consider activating it).
git clone https://github.com/herbstluftwm/herbstluftwm cd herbstluftwm make # build the binaries # install files mkdir -p ~/bin # you also have to put $HOME/bin to your path, e.g. by: echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc # or to your zshrc, etc... ln -s `pwd`/herbstluftwm ~/bin/ ln -s `pwd`/herbstclient ~/bin/ # copy the configuration mkdir -p ~/.config/herbstluftwm/ cp share/autostart ~/.config/herbstluftwm/ cp share/panel.sh ~/.config/herbstluftwm/
•If you are using bash, then source the bash completion file in your ~/.bashrc
•If you are using zsh, then copy the share/_herbstclient file to the appropriate zsh-completion directory.
Each time there is an update, you have to do the following steps in your herbstluftwm directory:
git pull make
# start herbstluftwm in locked mode (it will be unlocked at the end of your # autostart) exec herbstluftwm --locked
After logging in the next time, you will get a default herbstluftwm session.
Start an xterm by pressing Alt-Return, which will fill your entire screen.
shell COMMANDS, ╲ COMMAND, ARGUMENTS ╲ ARGUMENTS ╭────────────╮ ╲ │ │ V │ V herbstclient herbstluftwm ╱ ^ │ ╱ output, │ │ ╱ exit-code ╰────────────╯ V output, shell/terminal exit-code
The most simple command only prints the herbstluftwm version:
$ # lines prefixed with $ describes what to type, other lines describe the $ # typical output $ # Type: her<tab>c<tab> ve<tab> $ herbstclient version herbstluftwm 0.4.1 (built on Aug 30 2012) $ herbstclient set window_border_active_color red $ # now the window border turned red
The configuration of herbstluftwm only is done by calling commands via herbstclient. So the only configuration file is the autostart which is placed at ~/.config/herbstluftwm/ and which is a sequence of those herbstclient calls.
Open it in your favourite text editor and replace the Mod-line by this to use the Super-key (or also called Windows-key) as the main modifier:
# Mod=Mod1 # use alt as the main modifier Mod=Mod4 # use Super as the main modifier
After saving the autostart file, you have to reload the configuration:
# the following line is identical to directly calling: # ~/.config/herbstluftwm/autostart herbstclient reload
Now you may notice that the red border color of your terminal turned green again, because the color is set in the default autostart. That’s the typical configuration workflow:
1.Try some new settings in the command line
2.Add them to the autostart file
3.Press Mod-Shift-r which calls the reload command or directly execute the autostart file from your shell to get the error messages if something went wrong.
To learn more about herbstluftwm, just go through the man page line by line and check using the herbstluftwm(1) man page what it does. For a quick introduction to the central paradigms, continue reading this.
1.It serves as a container for windows, i.e. it can hold zero up to arbitrarily many windows. Launch several more terminals to see what happens: If there are multiple windows in one frame, they are aligned below each other. To change this layout algorithm, press Mod-space to cycle all the available layouting algorithms for the focused frame.
2.A frame also can be split into two subframes, which can be aligned next to or below each other. Press Mod-o to split to an horizontal alignment. To navigate to the fresh frame right of the old one press Mod-l. Press Mod-u to split vertically. The intuitive navigation is:
⎧ h (or ←) ⎫ ⎧ left ⎪ j (or ↓) ⎪ means ⎪ down Mod + ⎨ k (or ↑) ⎬ ═══════> focus ⎨ up ⎩ l (or →) ⎭ ⎩ right
To undo splitting, you can remove a frame via Mod-r. To shift some window from one frame to one of its neighbours, use the same keyboard shortcut while holding the Shift key pressed. It is not possible to resize single windows, only to resize frames. The according keyboard shortcut is the same while holding Control pressed. All in all it is:
⎧ h (or ←) ⎫ ⎧ left ⎧ ⎫ ⎪ j (or ↓) ⎪ means ⎧ focus frame ⎫ ⎪ down Mod + ⎨ Shift ⎬ + ⎨ k (or ↑) ⎬ ═════> ⎨ move window ⎬ ⎨ up ⎩ Control ⎭ ⎩ l (or →) ⎭ ⎩ resize frame ⎭ ⎩ right
With this, you can define a custom layout. It can be printed via the layout command:
$ herbstclient layout ╾─┐ horizontal 50% selection=1 ├─┐ vertical 70% selection=0 │ ├─╼ vertical: 0x1400009 │ └─╼ vertical: └─╼ max: 0x1a00009 [FOCUS]
Just play with it a bit to understand how it works. You also can permanently save the layout using the dump command:
$ herbstclient dump (split horizontal:0.500000:1 (split vertical:0.700000:0 (clients vertical:0 0x1400009) (clients vertical:0)) (clients max:0 0x1a00009)) $ layout=$(herbstclient dump)
And after some changes you can rewind to the original layout with the load command:
$ herbstclient load "$layout" # mind the quotes!
Initially there is only one large monitor ranging over your entire screen:
$ herbstclient list_monitors 0: 1440x900+0+0 with tag "1" [FOCUS]
The output shows that there is only one monitor with index 0 at position +0+0 of size 1440x900 showing tag 1. In most cases, the herbstluftwm monitors will match the list of physical monitors. So to add another physical monitor, you have to perform several steps:
1.Enable it, such that it shows a part of your screen. You can use xrandr, xinerama or any other tool you like.
2.Register it in herbstluftwm: Lets assume your new monitor has the resolution 1024x768 and is right of your main screen, then you can activate it via:
$ herbstclient set_monitors 1440x900+0+0 1024x768+1440+0
Alternatively, if xinerama or xrandr works for your setup, simply run:
$ herbstclient detect_monitors
For even more automation, you can enable the setting auto_detect_monitors. For more advanced examples, look at the q3terminal.sh example script, which implements a drop-down-terminal like monitor where you can put any application you like.