Difference between revisions of "Spectrwm"

From ArchWiki
Jump to: navigation, search
m (deleted CDM configuration - out-of-date)
m (style changes)
Line 1: Line 1:
 
{{DISPLAYTITLE:spectrwm}}
 
{{DISPLAYTITLE:spectrwm}}
 
[[Category:Dynamic WMs]]
 
[[Category:Dynamic WMs]]
From spectrwm's website:
+
From [http://spectrwm.org/ spectrwm website]:
 
   
 
   
<blockquote>
+
:''spectrwm is a small dynamic tiling window manager for [[Xorg]]. It tries to stay out of the way so that valuable screen real estate can be used for much more important stuff. It has sane defaults and does not require one to learn a language to do any configuration. It was written by hackers for hackers and it strives to be small, compact and fast.''
“[http://spectrwm.org/ spectrwm] is a small dynamic tiling window manager for [[Xorg]]. It tries to stay out of the way so that valuable screen real estate can be used for much more important stuff. It has sane defaults and does not require one to learn a language to do any configuration. It was written by hackers for hackers and it strives to be small, compact and fast.
+
</blockquote>
+
  
 
Spectrwm is written in C and configured with a text configuration file. It was previously known as scrotwm.
 
Spectrwm is written in C and configured with a text configuration file. It was previously known as scrotwm.
  
==Installation==
+
== Installation ==
{{ic|spectrwm}} is available in the [community] repository.
+
 
 +
{{Pkg|spectrwm}} is available in the [community] repository.
  
 
The modkey (the main key to issue commands with) is set to Mod4, which is usually the Windows key.
 
The modkey (the main key to issue commands with) is set to Mod4, which is usually the Windows key.
Line 24: Line 23:
 
See [[Xdefaults]] for details of how to set up fonts, colours and other settings for {{Ic|xterm}} and {{Ic|xscreensaver}}. Run {{Ic|xscreensaver-demo}} to select the animation (or blank) and display power management (recommended).
 
See [[Xdefaults]] for details of how to set up fonts, colours and other settings for {{Ic|xterm}} and {{Ic|xscreensaver}}. Run {{Ic|xscreensaver-demo}} to select the animation (or blank) and display power management (recommended).
  
==Configuration==
+
== Configuration ==
  
 
spectrwm first tries to open the user specific file, {{ic|~/.spectrwm.conf}}.  If that file is unavailable, it tries to open the global configuration file, {{ic|/etc/spectrwm.conf}}. The initial configuration provides a good set of defaults.
 
spectrwm first tries to open the user specific file, {{ic|~/.spectrwm.conf}}.  If that file is unavailable, it tries to open the global configuration file, {{ic|/etc/spectrwm.conf}}. The initial configuration provides a good set of defaults.
Line 30: Line 29:
 
Optionally, spectrwm can call {{ic|baraction.sh}} (in the user's path), which should output a text status message to {{Ic|stdout}} for the status bar at the top of the screen.
 
Optionally, spectrwm can call {{ic|baraction.sh}} (in the user's path), which should output a text status message to {{Ic|stdout}} for the status bar at the top of the screen.
  
==Starting spectrwm==
+
== Starting spectrwm ==
  
 
To start spectrwm via {{Ic|startx}} or the [[SLIM]] login manager, simply append the following to {{ic|~/.xinitrc}}:
 
To start spectrwm via {{Ic|startx}} or the [[SLIM]] login manager, simply append the following to {{ic|~/.xinitrc}}:
 +
 
  exec spectrwm
 
  exec spectrwm
===Starting spectrwm with XDM===
+
 
 +
=== Starting spectrwm with XDM ===
 +
 
 
For [[XDM]], create {{ic|~/.xsession}} with the following contents:
 
For [[XDM]], create {{ic|~/.xsession}} with the following contents:
 +
 
  # .xsession
 
  # .xsession
 
  # This file is sourced by xdm
 
  # This file is sourced by xdm
 
  spectrwm
 
  spectrwm
 +
 
Make sure {{ic|~/.xsession}} is executable:
 
Make sure {{ic|~/.xsession}} is executable:
chmod a+x ~/.xsession
 
'''Note:''' if you do not create {{ic|~/.xsession}} then {{ic|~/.xinitrc}} will be used, but you might want different settings depending on if you use {{ic|startx}} or XDM. Remember to make {{ic|~/.xinitrc}} executable, or XDM won't start, if you use that method.
 
  
For a nice simple Arch themed xdm, try {{AUR|xdm-arch-theme}}.
+
$ chmod a+x ~/.xsession
 +
 
 +
{{Note|If you do not create {{ic|~/.xsession}}, then {{ic|~/.xinitrc}} will be used, but you might want different settings depending on if you use {{ic|startx}} or XDM. Remember to make {{ic|~/.xinitrc}} executable, or XDM won't start, if you use that method.}}
 +
 
 +
{{Tip|For a nice simple Arch themed xdm, try {{AUR|xdm-arch-theme}}.}}
  
===Starting spectrwm with KDM===
+
=== Starting spectrwm with KDM ===
  
 
For [[KDM]], make sure {{ic|/usr/share/xsessions}} is listed in SessionDirs in {{ic|/usr/share/config/kdm/kdmrc}} as described [[KDM#SessionsDirs|here]]. SpectrWM will then be available as an option in the Session Type menu in KDM.
 
For [[KDM]], make sure {{ic|/usr/share/xsessions}} is listed in SessionDirs in {{ic|/usr/share/config/kdm/kdmrc}} as described [[KDM#SessionsDirs|here]]. SpectrWM will then be available as an option in the Session Type menu in KDM.
Line 52: Line 58:
 
described [[KDM#Session|here]], and then edit it, for example like this:
 
described [[KDM#Session|here]], and then edit it, for example like this:
  
case $session in
+
{{bc|<nowiki>
 +
case $session in
 
   "")
 
   "")
 
     exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
 
     exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
Line 73: Line 80:
 
     eval exec "$session"
 
     eval exec "$session"
 
     ;;
 
     ;;
esac
+
esac
 +
</nowiki>}}
  
==Multiple monitors (Xinerama)==
+
== Multiple monitors (Xinerama) ==
  
 
With a non-Xrandr multiple monitor setup create regions to split the total desktop area into one region per monitor:
 
With a non-Xrandr multiple monitor setup create regions to split the total desktop area into one region per monitor:
Line 82: Line 90:
 
  region                = screen[1]:1280x1024+1280+0
 
  region                = screen[1]:1280x1024+1280+0
  
==Statusbar configuration==
+
== Statusbar configuration ==
  
 
To enable the statusbar, uncomment these two items in {{ic|/etc/spectrwm.conf}} (or {{ic|~/.spectrwm.conf}}). By default they are commented out and the statusbar is disabled.
 
To enable the statusbar, uncomment these two items in {{ic|/etc/spectrwm.conf}} (or {{ic|~/.spectrwm.conf}}). By default they are commented out and the statusbar is disabled.
 +
 
  bar_action              = baraction.sh
 
  bar_action              = baraction.sh
 
  bar_delay              = 5
 
  bar_delay              = 5
  
===Bash scripts===
+
=== Bash scripts ===
  
 
To test the status bar, place the following simple {{ic|baraction.sh}} in a
 
To test the status bar, place the following simple {{ic|baraction.sh}} in a
 
{{ic|~/scripts}} (or {{ic|~/bin}}) directory which you have previously added to your $PATH in your [[bashrc|~/.bashrc]] file.
 
{{ic|~/scripts}} (or {{ic|~/bin}}) directory which you have previously added to your $PATH in your [[bashrc|~/.bashrc]] file.
  
<pre>
+
{{bc|<nowiki>
 
#!/bin/bash
 
#!/bin/bash
 
# baraction.sh script for spectrwm status bar
 
# baraction.sh script for spectrwm status bar
Line 105: Line 114:
 
         sleep $SLEEP_SEC
 
         sleep $SLEEP_SEC
 
done
 
done
</pre>
+
</nowiki>}}
  
Press Modkey+Q to restart spectrwm and after a few seconds you should see the output in the status bar. If you have problems at this stage, make sure the script is executable, test it from the command line, and check the path/filename you specified in bar_action.
+
Press {{Keypress|Modkey+Q}} to restart spectrwm and after a few seconds you should see the output in the status bar. If you have problems at this stage, make sure the script is executable, test it from the command line, and check the path/filename you specified in {{ic|bar_action}}.
  
Next replace {{ic|baraction.sh}} with the more useful file below. Note it needs these packages, and whatever you need for WiFi:
+
Next replace {{ic|baraction.sh}} with the more useful file below. You need to have {{Pkg|bc}} and {{Pkg|lm_sensors}} installed, and whatever you need for WiFi. You should configure [[lm_sensors]].
pacman -S bc lm_sensors
+
  
You should configure [[lm_sensors]].
+
{{Note|You may need to modify this script slightly for your computer. You may have different units in the acpi battery info, different temperature output from sensors or a different wifi interface than {{ic|wlan0}}.}}
  
{{Note|You may need to modify this script slightly for your computer. You may have different units in the acpi battery info, different temperature output from sensors or a different wifi interface than wlan0.}}
+
{{bc|<nowiki>
 
+
<pre>
+
 
#!/bin/bash
 
#!/bin/bash
 
#baraction.sh for spectrwm status bar
 
#baraction.sh for spectrwm status bar
Line 198: Line 204:
 
sleep $SLEEP_SEC
 
sleep $SLEEP_SEC
 
done
 
done
</pre>
+
</nowiki>}}
  
Here are some other ideas for status bar items : ethernet, email notification, disk space, mounts, now playing (mpc current).
+
Here are some other ideas for status bar items: ethernet, email notification, disk space, mounts, now playing (mpc current).
  
 
The baraction.sh script may also show the date, in which case the built-in clock can be disabled:
 
The baraction.sh script may also show the date, in which case the built-in clock can be disabled:
Line 206: Line 212:
 
  clock_enabled    = 0
 
  clock_enabled    = 0
  
===Conky===
+
=== Conky ===
  
 
Instead of a bash script, conky may be used. It should be used in non-graphical mode as shown below to output a text string to stdout which can be read in by spectrwm. First install conky.
 
Instead of a bash script, conky may be used. It should be used in non-graphical mode as shown below to output a text string to stdout which can be read in by spectrwm. First install conky.
Line 212: Line 218:
  
 
In {{ic|~/.spectrwm.conf}} set
 
In {{ic|~/.spectrwm.conf}} set
 +
 
  bar_action = conky
 
  bar_action = conky
  
Line 224: Line 231:
 
  ${time %R %a,%d-%#b-%y} |Mail:${new_mails} |Up:${uptime_short} |Temp:${acpitemp}C |Batt:${battery_short} |${addr wlan0} |RAM:$memperc% |CPU:${cpu}% | ${downspeedf wlan0}
 
  ${time %R %a,%d-%#b-%y} |Mail:${new_mails} |Up:${uptime_short} |Temp:${acpitemp}C |Batt:${battery_short} |${addr wlan0} |RAM:$memperc% |CPU:${cpu}% | ${downspeedf wlan0}
  
==Alternative status bar==
+
== Alternative status bar ==
  
 
An alternative is to use [[dzen|dzen2]] to create a status bar. This has the advantage that colors and even icons may be used, but the disadvantage that the bar is not integrated with spectrwm. So the current workspace number and layout and the bar-toggle keybinding are not available. The "region" option can be used to reserve the required screen space.
 
An alternative is to use [[dzen|dzen2]] to create a status bar. This has the advantage that colors and even icons may be used, but the disadvantage that the bar is not integrated with spectrwm. So the current workspace number and layout and the bar-toggle keybinding are not available. The "region" option can be used to reserve the required screen space.
 
For example to reserve 14 pixels at the top of the screen in spectrwm.conf change
 
For example to reserve 14 pixels at the top of the screen in spectrwm.conf change
 +
 
  bar_enabled            = 1
 
  bar_enabled            = 1
 
  region                  = screen[1]:1024x768+0+0
 
  region                  = screen[1]:1024x768+0+0
 +
 
to
 
to
 +
 
  bar_enabled            = 0
 
  bar_enabled            = 0
 
  region                  = screen[1]:1024x754+0+14
 
  region                  = screen[1]:1024x754+0+14
 +
 
(adjust for your screen resolution).
 
(adjust for your screen resolution).
  
 
Then, for example using [[i3|i3status]] to supply the information:
 
Then, for example using [[i3|i3status]] to supply the information:
 +
 
  $ i3status | dzen2 -fn -*-terminus-medium-*-*-*-*-*-*-*-*-*-*-* &
 
  $ i3status | dzen2 -fn -*-terminus-medium-*-*-*-*-*-*-*-*-*-*-* &
Spectrwm's own bar can still be enabled and disabled with Meta+b.
 
  
==Screenshots==
+
Spectrwm's own bar can still be enabled and disabled with {{Keypress|Meta+b}}.
 +
 
 +
== Screenshots ==
  
 
Spectrwm has the facility to execute a script called {{ic|screenshot.sh}} with the keybindings
 
Spectrwm has the facility to execute a script called {{ic|screenshot.sh}} with the keybindings
 +
 
  Meta+s      for a full screenshot
 
  Meta+s      for a full screenshot
 
  Meta+Shift+s for a screenshot of a single window
 
  Meta+Shift+s for a screenshot of a single window
  
 
First install scrot
 
First install scrot
Then copy the default script supplied in the spectrwm package to a location in your $PATH, for example:
+
Then copy the default script supplied in the spectrwm package to a location in your {{ic|$PATH}}, for example:
  
 
  $ cp /usr/share/spectrwm/screenshot.sh ~/bin
 
  $ cp /usr/share/spectrwm/screenshot.sh ~/bin
  
==Screen locking==
+
== Screen locking ==
  
By default the lock keybinding (Mod+Shift+Delete) executes xlock
+
By default the lock keybinding {{Keypress|Mod+Shift+Delete}} executes ''xlock''
  
 
  program[lock]      = xlock
 
  program[lock]      = xlock
Line 260: Line 274:
 
  program[lock]      = xscreensaver-command -lock
 
  program[lock]      = xscreensaver-command -lock
  
==Using spectrwm==
+
== Using spectrwm ==
  
*To save space, window title bars are not shown. Window borders are one pixel wide. The border changes colour to indicate focus.
+
* To save space, window title bars are not shown. Window borders are one pixel wide. The border changes colour to indicate focus.
  
*Layouts are handled dynamically and can be changed on the fly. There are three standard layouts (stacking algorithms): vertical, horizontal and maximized (indicated in the status bar as [|], [-] and [ ])
+
* Layouts are handled dynamically and can be changed on the fly. There are three standard layouts (stacking algorithms): vertical, horizontal and maximized (indicated in the status bar as [|], [-] and [ ])
  
*There is the concept of a master area (a working area). Any window can be switched to become the master and will then be shown in the master area. The master area is the left (top) portion of the screen in vertical (horizontal) mode. The size of the master area can be adjusted with the keys. By default the master area holds one window, but this can be increased.
+
* There is the concept of a master area (a working area). Any window can be switched to become the master and will then be shown in the master area. The master area is the left (top) portion of the screen in vertical (horizontal) mode. The size of the master area can be adjusted with the keys. By default the master area holds one window, but this can be increased.
  
*The area excluding the master area is called the stacking area. New windows are added to the stacking area. By default the stacking area has one column (row) in vertical (horizontal) mode, but his can be increased.
+
* The area excluding the master area is called the stacking area. New windows are added to the stacking area. By default the stacking area has one column (row) in vertical (horizontal) mode, but his can be increased.
  
*Windows may be moved to a floating layer -- i.e. removed from the tiling management. This is useful for programs which are not suitable for tiling.
+
* Windows may be moved to a floating layer -- i.e. removed from the tiling management. This is useful for programs which are not suitable for tiling.
  
 
Some of the most useful key bindings:
 
Some of the most useful key bindings:
<pre>
+
 
 +
{{bc|<nowiki>
 
Meta+Shift+Return: open terminal
 
Meta+Shift+Return: open terminal
 
Meta+p: dmenu (then type the start of the program name and return)
 
Meta+p: dmenu (then type the start of the program name and return)
Line 285: Line 300:
 
Meta+Return: move current window to master area
 
Meta+Return: move current window to master area
 
Meta+h/l:  increase/decrease size of master area
 
Meta+h/l:  increase/decrease size of master area
</pre>
+
</nowiki>}}
  
 
Advanced stacking
 
Advanced stacking
<pre>
+
 
 +
{{bc|<nowiki>
 
Meta+,/. : increase/decrease the number of windows in master area (default is 1)
 
Meta+,/. : increase/decrease the number of windows in master area (default is 1)
 
Meta+Shift+,/. : increase/decrease number of columns(rows) in stacking area in vertical(horizontal) mode (default is 1)
 
Meta+Shift+,/. : increase/decrease number of columns(rows) in stacking area in vertical(horizontal) mode (default is 1)
 
Meta+Shift+j/k: swap window position with next/previous window
 
Meta+Shift+j/k: swap window position with next/previous window
 
Meta+t: float<->tile toggle
 
Meta+t: float<->tile toggle
</pre>
+
</nowiki>}}
  
 
Mouse bindings
 
Mouse bindings
<pre>
+
 
 +
{{bc|<nowiki>
 
Mouseover: focus window
 
Mouseover: focus window
 
Meta+LeftClick+Drag: move window (and float it if tiled)
 
Meta+LeftClick+Drag: move window (and float it if tiled)
 
Meta+RightClick+Drag: resize floating window
 
Meta+RightClick+Drag: resize floating window
 
Meta+Shift+RightClick+Drag: resize floating window keeping it centred
 
Meta+Shift+RightClick+Drag: resize floating window keeping it centred
</pre>
+
</nowiki>}}
  
 
Other useful bindings
 
Other useful bindings
<pre>
+
 
 +
{{bc|<nowiki>
 
Meta+x: close window
 
Meta+x: close window
 
Meta+Shift+x: kill window
 
Meta+Shift+x: kill window
Line 310: Line 328:
 
Meta+q: restart spectrwm (reset desktops and reread spectrwm config without stopping running programs)
 
Meta+q: restart spectrwm (reset desktops and reread spectrwm config without stopping running programs)
 
Meta+Shift+q: exit spectrwm
 
Meta+Shift+q: exit spectrwm
</pre>
+
</nowiki>}}
  
==Troubleshooting==
+
== Troubleshooting ==
  
*Q: Help, I just logged in and all I see is a blank screen.
+
* Q: Help, I just logged in and all I see is a blank screen.
*A: Press Shift + WindowsKey + Return and an xterm will start. Then read the manual (<code>man spectrwm</code>) to see the other default key bindings. Also check your configuration file.
+
* A: Press {{Keypress|Shift+WinKey+Return}} and an xterm will start. See {{ic|man spectrwm}} for other default key bindings. Also check your configuration file.
  
==See also==
+
== See also ==
  
 
* [http://www.spectrwm.org spectrwm] - spectrwm's official website
 
* [http://www.spectrwm.org spectrwm] - spectrwm's official website
Line 325: Line 343:
 
* #spectrwm at irc.freenode.net - (un)official IRC channel
 
* #spectrwm at irc.freenode.net - (un)official IRC channel
  
*[https://bbs.archlinux.org/viewtopic.php?id=64645 The scrotwm thread]
+
* [https://bbs.archlinux.org/viewtopic.php?id=64645 The scrotwm thread]

Revision as of 21:24, 23 July 2013

From spectrwm website:

spectrwm is a small dynamic tiling window manager for Xorg. It tries to stay out of the way so that valuable screen real estate can be used for much more important stuff. It has sane defaults and does not require one to learn a language to do any configuration. It was written by hackers for hackers and it strives to be small, compact and fast.

Spectrwm is written in C and configured with a text configuration file. It was previously known as scrotwm.

Installation

spectrwm is available in the [community] repository.

The modkey (the main key to issue commands with) is set to Mod4, which is usually the Windows key.

spectrwm can make use of the dmenu package, so you may want to install that too.

It can also execute a screenshot command from a keybinding which may be used to call scrot using the script given below.

There is also a screen lock keybinding. By default calls xlock, provided in Arch by the xlockmore package.

xscreensaver is also useful for screen saving and power management after an idle period, and screen locking.

See Xdefaults for details of how to set up fonts, colours and other settings for xterm and xscreensaver. Run xscreensaver-demo to select the animation (or blank) and display power management (recommended).

Configuration

spectrwm first tries to open the user specific file, ~/.spectrwm.conf. If that file is unavailable, it tries to open the global configuration file, /etc/spectrwm.conf. The initial configuration provides a good set of defaults.

Optionally, spectrwm can call baraction.sh (in the user's path), which should output a text status message to stdout for the status bar at the top of the screen.

Starting spectrwm

To start spectrwm via startx or the SLIM login manager, simply append the following to ~/.xinitrc:

exec spectrwm

Starting spectrwm with XDM

For XDM, create ~/.xsession with the following contents:

# .xsession
# This file is sourced by xdm
spectrwm

Make sure ~/.xsession is executable:

$ chmod a+x ~/.xsession
Note: If you do not create ~/.xsession, then ~/.xinitrc will be used, but you might want different settings depending on if you use startx or XDM. Remember to make ~/.xinitrc executable, or XDM won't start, if you use that method.
Tip: For a nice simple Arch themed xdm, try xdm-arch-themeAUR.

Starting spectrwm with KDM

For KDM, make sure /usr/share/xsessions is listed in SessionDirs in /usr/share/config/kdm/kdmrc as described here. SpectrWM will then be available as an option in the Session Type menu in KDM.

To start other tasks when the session is launched, for example to launch xscreensaver and set the background image, copy /usr/share/config/kdm/Xsession to a custom version as described here, and then edit it, for example like this:

case $session in
  "")
    exec xmessage -center -buttons OK:0 -default OK "Sorry, $DESKTOP_SESSION is no valid session."
    ;;
  failsafe)
    exec xterm -geometry 80x24-0-0
    ;;
  custom)
    exec $HOME/.xsession
    ;;
  default)
    exec /usr/bin/startkde
    ;;
  '''/usr/bin/spectrwm'''|otherwm''')'''
    '''feh --bg-scale /usr/share/wallpapers/Plasmalicious/contents/images/1280x1024.jpg'''
    '''xscreensaver -no-splash &'''
    '''eval exec "$session"'''
    ''';;'''
  *)
    eval exec "$session"
    ;;
esac

Multiple monitors (Xinerama)

With a non-Xrandr multiple monitor setup create regions to split the total desktop area into one region per monitor:

region                = screen[1]:1280x1024+0+0
region                = screen[1]:1280x1024+1280+0

Statusbar configuration

To enable the statusbar, uncomment these two items in /etc/spectrwm.conf (or ~/.spectrwm.conf). By default they are commented out and the statusbar is disabled.

bar_action              = baraction.sh
bar_delay               = 5

Bash scripts

To test the status bar, place the following simple baraction.sh in a ~/scripts (or ~/bin) directory which you have previously added to your $PATH in your ~/.bashrc file.

#!/bin/bash
# baraction.sh script for spectrwm status bar

SLEEP_SEC=5  # set bar_delay = 5 in /etc/spectrwm.conf
COUNT=0
#loops forever outputting a line every SLEEP_SEC secs
while :; do
	let COUNT=$COUNT+1
        echo -e "         Hello World! $COUNT"
        sleep $SLEEP_SEC
done

Press Template:Keypress to restart spectrwm and after a few seconds you should see the output in the status bar. If you have problems at this stage, make sure the script is executable, test it from the command line, and check the path/filename you specified in bar_action.

Next replace baraction.sh with the more useful file below. You need to have bc and lm_sensors installed, and whatever you need for WiFi. You should configure lm_sensors.

Note: You may need to modify this script slightly for your computer. You may have different units in the acpi battery info, different temperature output from sensors or a different wifi interface than wlan0.
#!/bin/bash
#baraction.sh for spectrwm status bar

SLEEP_SEC=5
#loops forever outputting a line every SLEEP_SEC secs
while :; do

 	eval $(cat /proc/acpi/battery/BAT0/state | awk '/charging state/ {printf "BAT_CHGSTATE=%s;", $3}; /remaining capacity/ {printf "BAT_REMNG=%s;",$3}; /present rate/ {printf "BAT_RATE=%s;",$3};' -)
 	eval $(cat /proc/acpi/battery/BAT0/info | awk '/present/ {printf "BAT_PRESENT=%s;", $2}; /last full capacity/ {printf "BAT_LASTFULL=%s;",$4};' -)
 
	BAT_REMNG_WH=`echo "scale=1; a=($BAT_REMNG+50)/1000; print a" | bc -l`
	BAT_RATE_W=`echo "scale=1; a=($BAT_RATE+50)/1000; print a" | bc -l`
	BCSCRIPT="scale=0; a=(100*$BAT_REMNG / $BAT_LASTFULL); print a"
	BAT_PCT=`echo $BCSCRIPT | bc -l`%

	case $BAT_PRESENT in
		no)
		POWER_STR="AC, NO BATTERY"
		;;
		yes)

		case $BAT_CHGSTATE in
			charged)
			#on ac
			AC_STATUS="ON AC"
			TIME_REMNG="N/A"
			POWER_STR="$AC_STATUS $BAT_CHGSTATE $BAT_PCT"
			;;
			charging)
			#on ac
			AC_STATUS="ON AC"
			BCSCRIPT="scale=1; a=(60*($BAT_LASTFULL - $BAT_REMNG) / $BAT_RATE); print a"
			TIMETOFULL_MIN=`echo $BCSCRIPT | bc -l`
			POWER_STR="$AC_STATUS $BAT_CHGSTATE $BAT_PCT C="$BAT_REMNG_WH"Wh Rate="$BAT_RATE_W"W TTF="$TIMETOFULL_MIN"min"
			;;
			discharging)
			AC_STATUS="ON BATT"
			TIME_REMNG_MIN=`echo "scale=0; a=(60*$BAT_REMNG / $BAT_RATE); print a" | bc -l`
			TIME_REMNG_HH=`echo "scale=0; a=($BAT_REMNG / $BAT_RATE); if (a<10) {print "0"; print a} else {print a}" | bc -l`

			TIME_REMNG_MM=`echo "scale=0; a=($TIME_REMNG_MIN-60*$TIME_REMNG_HH); if (a<10) {print "0"; print a} else {print a}" | bc -l`
			POWER_STR="$AC_STATUS $BAT_PCT C="$BAT_REMNG_WH"Wh P="$BAT_RATE_W"W R="$TIME_REMNG_HH":"$TIME_REMNG_MM
			;;
			*)
			POWER_STR=$BAT_CHGSTATE
			;;
		esac

		;;
		*)
		POWER_STR="error"
		;;
	esac

	#spectrwm bar_print can't handle UTF-8 characters, such as degree symbol
	#Core 0:      +67.0°C  (crit = +100.0°C)
	eval $(sensors 2>/dev/null | sed s/[°+]//g | awk '/^Core 0/ {printf "CORE0TEMP=%s;", $3}; /^Core 1/ {printf "CORE1TEMP=%s;",$3}; /^fan1/ {printf "FANSPD=%s;",$2};' -)
	TEMP_STR="Tcpu=$CORE0TEMP,$CORE1TEMP F=$FANSPD"

	WLAN_ESSID=$(iwconfig wlan0 | awk -F "\"" '/wlan0/ { print $2 }')
	eval $(cat /proc/net/wireless | sed s/[.]//g | awk '/wlan0/ {printf "WLAN_QULTY=%s; WLAN_SIGNL=%s; WLAN_NOISE=%s", $3,$4,$5};' -)
	BCSCRIPT="scale=0;a=100*$WLAN_QULTY/70;print a"
	WLAN_QPCT=`echo $BCSCRIPT | bc -l`
	WLAN_POWER=`iwconfig 2>/dev/null| grep "Tx-Power"| awk {'print $4'}|sed s/Tx-Power=//`
	WLAN_STR="$WLAN_ESSID: Q=$WLAN_QPCT% S/N="$WLAN_SIGNL"/"$WLAN_NOISE"dBm T="$WLAN_POWER"dBm"

	CPUFREQ_STR=`echo "Freq:"$(cat /proc/cpuinfo | grep 'cpu MHz' | sed 's/.*: //g; s/\..*//g;')`
	CPULOAD_STR="Load:$(uptime | sed 's/.*://; s/,//g')"

	eval $(awk '/^MemTotal/ {printf "MTOT=%s;", $2}; /^MemFree/ {printf "MFREE=%s;",$2}' /proc/meminfo)
	MUSED=$(( $MTOT - $MFREE ))
	MUSEDPT=$(( ($MUSED * 100) / $MTOT ))
	MEM_STR="Mem:${MUSEDPT}%"

	echo -e "$POWER_STR  $TEMP_STR  $CPUFREQ_STR  $CPULOAD_STR  $MEM_STR  $WLAN_STR"
        #alternatively if you prefer a different date format
        #DATE_STR=`date +"%H:%M %a %d %b"`
	#echo -e "$DATE_STR   $POWER_STR  $TEMP_STR  $CPUFREQ_STR  $CPULOAD_STR  $MEM_STR  $WLAN_STR"

	sleep $SLEEP_SEC
done

Here are some other ideas for status bar items: ethernet, email notification, disk space, mounts, now playing (mpc current).

The baraction.sh script may also show the date, in which case the built-in clock can be disabled:

clock_enabled     = 0

Conky

Instead of a bash script, conky may be used. It should be used in non-graphical mode as shown below to output a text string to stdout which can be read in by spectrwm. First install conky. It is not necessary to install the cut-down "conky-cli" from AUR (although that would work too).

In ~/.spectrwm.conf set

bar_action = conky

Then in each user's ~/.conkyrc file place for example:

out_to_x no
out_to_console yes
update_interval 1.0
total_run_times 0
use_spacer none
TEXT
${time %R %a,%d-%#b-%y} |Mail:${new_mails} |Up:${uptime_short} |Temp:${acpitemp}C |Batt:${battery_short} |${addr wlan0} |RAM:$memperc% |CPU:${cpu}% | ${downspeedf wlan0}

Alternative status bar

An alternative is to use dzen2 to create a status bar. This has the advantage that colors and even icons may be used, but the disadvantage that the bar is not integrated with spectrwm. So the current workspace number and layout and the bar-toggle keybinding are not available. The "region" option can be used to reserve the required screen space. For example to reserve 14 pixels at the top of the screen in spectrwm.conf change

bar_enabled             = 1
region                  = screen[1]:1024x768+0+0

to

bar_enabled             = 0
region                  = screen[1]:1024x754+0+14

(adjust for your screen resolution).

Then, for example using i3status to supply the information:

$ i3status | dzen2 -fn -*-terminus-medium-*-*-*-*-*-*-*-*-*-*-* &

Spectrwm's own bar can still be enabled and disabled with Template:Keypress.

Screenshots

Spectrwm has the facility to execute a script called screenshot.sh with the keybindings

Meta+s       for a full screenshot
Meta+Shift+s for a screenshot of a single window

First install scrot Then copy the default script supplied in the spectrwm package to a location in your $PATH, for example:

$ cp /usr/share/spectrwm/screenshot.sh ~/bin

Screen locking

By default the lock keybinding Template:Keypress executes xlock

program[lock]      = xlock

An alternative, if xscreensaver is already running, is to use

program[lock]      = xscreensaver-command -lock

Using spectrwm

  • To save space, window title bars are not shown. Window borders are one pixel wide. The border changes colour to indicate focus.
  • Layouts are handled dynamically and can be changed on the fly. There are three standard layouts (stacking algorithms): vertical, horizontal and maximized (indicated in the status bar as [|], [-] and [ ])
  • There is the concept of a master area (a working area). Any window can be switched to become the master and will then be shown in the master area. The master area is the left (top) portion of the screen in vertical (horizontal) mode. The size of the master area can be adjusted with the keys. By default the master area holds one window, but this can be increased.
  • The area excluding the master area is called the stacking area. New windows are added to the stacking area. By default the stacking area has one column (row) in vertical (horizontal) mode, but his can be increased.
  • Windows may be moved to a floating layer -- i.e. removed from the tiling management. This is useful for programs which are not suitable for tiling.

Some of the most useful key bindings:

Meta+Shift+Return: open terminal
Meta+p: dmenu (then type the start of the program name and return)
Meta+1/2/3/4/5/6/7/8/9/0: select workspaces 1-10
Meta+Shift+1/2/3/4/5/6/7/8/9/0: move window to workspace 1-10
Meta+Right/Left: select next/previous workspace
Meta+Shift+Right/Left: select next/previous screen
Meta+Spacebar: cycle through layouts (vertical, horizontal, maximized)
Meta+j/k: cycle through windows forwards/backwards
Meta+Tab/Meta+Shft+Tab: same as Meta+j/k
Meta+Return: move current window to master area
Meta+h/l:  increase/decrease size of master area

Advanced stacking

Meta+,/. : increase/decrease the number of windows in master area (default is 1)
Meta+Shift+,/. : increase/decrease number of columns(rows) in stacking area in vertical(horizontal) mode (default is 1)
Meta+Shift+j/k: swap window position with next/previous window
Meta+t: float<->tile toggle

Mouse bindings

Mouseover: focus window
Meta+LeftClick+Drag: move window (and float it if tiled)
Meta+RightClick+Drag: resize floating window
Meta+Shift+RightClick+Drag: resize floating window keeping it centred

Other useful bindings

Meta+x: close window
Meta+Shift+x: kill window
Meta+b: hide/show status bar
Meta+q: restart spectrwm (reset desktops and reread spectrwm config without stopping running programs)
Meta+Shift+q: exit spectrwm

Troubleshooting

  • Q: Help, I just logged in and all I see is a blank screen.
  • A: Press Template:Keypress and an xterm will start. See man spectrwm for other default key bindings. Also check your configuration file.

See also

  • dmenu - Simple application launcher from the developers of dwm
  • #spectrwm at irc.freenode.net - (un)official IRC channel