Difference between revisions of "Spectrwm"

From ArchWiki
Jump to: navigation, search
m (Statusbar configuration)
Line 189: Line 189:
  
 
Here are some other ideas for status bar items : ethernet, email notification, disk space, mounts.
 
Here are some other ideas for status bar items : ethernet, email notification, disk space, mounts.
 +
 +
==Usage==
 +
 +
*Layouts are handled dynamically and can be changed on the fly. There are three standard layouts (horizontal, vertical 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 size of the master area can be adjusted with the keys. Windows can be added to/removed from the master area.
 +
 +
*To save space, window title bars are not shown. Window borders are one pixel wide. The border changes colour to indicate focus.
 +
 +
Some of the most useful key bindings:
 +
<pre>
 +
Meta+Shift+Return: open terminal
 +
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+p: dmenu (then type the name of the program to run)
 +
Meta+Space: cycle through layouts (horizontal, vertical, maximized)
 +
Meta+Tab/j/k: cycle through windows
 +
Meta+Return: make current window the master
 +
Meta+h/l:  increase/decrease size of master area
 +
</pre>
 +
 +
Other useful bindings
 +
<pre>
 +
Meta+q: restart scrotwm (resets desktops and rereads scrotwm config without stopping running programs)
 +
Meta+Shift+q: exit scrotwm
 +
</pre>
  
 
==Troubleshooting==
 
==Troubleshooting==

Revision as of 15:48, 5 December 2009

scrotwm 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 content. 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.

It is written in C and configured with a text configuration file. It is not the poster-boy for any minority language, either for programming or configuration.

Installation

scrotwm is not yet available in the main repositories.

Two PKGBUILDs are available in AUR: Template:Package AUR, the last snapshot release, and Template:Package AUR, the latest development repository.

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

scrotwm can make use of the dmenu package, so install that too:

# pacman -S dmenu

Template:Codeline is also useful:

# pacman -S xscreensaver

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

Configuration

scrotwm first tries to open the user specific file, Template:Filename. If that file is unavailable, it tries to open the global configuration file, Template:Filename. The initial configuration provides a good set of defaults.

Optionally, scrotwm can call Template:Filename (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 scrotwm

To start scrotwm via startx or the SLIM login manager, simply append the following to Template:Filename:

exec scrotwm

Starting scrotwm with CDM

For CDM, create Template:Filename like this:

logger "Starting scrotwm from /usr/bin/startscrotwm."
xrandr --dpi 96
xscreensaver -no-splash &
# and start the window manager
exec scrotwm

And add startscrotwm to Template:Filename:

...
wmbinlist=(startscrotwm ... )
...
wmdisplist=(Scrotwm ...)

Starting scrotwm with KDM

For KDM, create Template:Filename like this:

[Desktop Entry]
Type=XSession
Exec=/usr/bin/startwm scrotwm
TryExec=/usr/bin/startwm
Name=Scrotwm
Comment=The scrotwm window manager

Create Template:Filename like this, and set execute permission.

#!/bin/sh
$HOME/.xsession_$1

For each user create Template:Filename, and set execute permission.

logger "Starting scrotwm from ~/.xsession_scrotwm."
xrandr --dpi 96
xscreensaver -no-splash &
# and start the window manager
exec scrotwm

Log out and new entry "Scrotwm" will appear in KDM's list of window managers.

This technique can be used to run other window managers from KDM of course. Just create a Template:Filename file and a Template:Filename file for each one.

Statusbar configuration

To enable the statusbar, uncomment these two items in Template:Filename (or Template:Filename). By default they are commented out and the statusbar is disabled.

bar_action              = baraction.sh
bar_delay               = 5

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

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

SLEEP_SEC=5  # set bar_delay = 5 in /etc/scrotwm.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 Modkey+Q to restart scrotwm 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 Template:Filename with the more useful file below. Note it needs these packages, and whatever you need for WiFi:

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 wlan0.
#!/bin/bash
#baraction.sh for scrotwm 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

	#scrotwm 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"
	sleep $SLEEP_SEC
done

Here are some other ideas for status bar items : ethernet, email notification, disk space, mounts.

Usage

  • Layouts are handled dynamically and can be changed on the fly. There are three standard layouts (horizontal, vertical 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 size of the master area can be adjusted with the keys. Windows can be added to/removed from the master area.
  • To save space, window title bars are not shown. Window borders are one pixel wide. The border changes colour to indicate focus.

Some of the most useful key bindings:

Meta+Shift+Return: open terminal
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+p: dmenu (then type the name of the program to run)
Meta+Space: cycle through layouts (horizontal, vertical, maximized)
Meta+Tab/j/k: cycle through windows
Meta+Return: make current window the master
Meta+h/l:  increase/decrease size of master area

Other useful bindings

Meta+q: restart scrotwm (resets desktops and rereads scrotwm config without stopping running programs)
Meta+Shift+q: exit scrotwm

Troubleshooting

  • 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 (man scrotwm) to see the other default key bindings. Also check your configuration file.

See also

  • scrotwm - scrotwm's official website
  • dmenu - Simple application launcher from the developers of dwm