本来一直用Fvwm,不过最近老导致不能正常关机,于是改成了fluxbox。但是接到我MM给我的任务,帮她翻译资料。打开太多,窗口总是不停的遮盖,效率很低,于是换成了Awesome窗口管理器。这个是我从LinuxTOY上看来的,非常适合工作用。
Awesome是一个平铺型的窗口管理器。就是说,不会出现窗口重叠的现象,也不会出现窗口不能填满桌面的现象。为了完成任务,之前一直没关心我的桌面设置的细节,今天圣诞节,就抽空搞了一下。
主要是设置了一下状态栏的细节,字体啦颜色啦,还有一些快捷键,默认程序和程序的默认设置,比如,把浏览器和pidgin都设置在了tag=Webs上打开,这样就很专心,也不用关心程序的长时间启动。
此外,最重要的是,添加了两个脚本,一个是显示系统状态的,一个是显示时间的。由于awesome不带session管理,所以很多东东都要从~/.xinitrc里面启动。和fvwm一样,awesome是一个对unix相当友好的窗口管理器,意思就是说,你可以用很多基本的程序和窗口管理器对话。比如toviso当年在fvwm的截图式的最小化。而且fvwm也有很多小脚本实现诸如时间显示啦,音量调节啦,等等。awesome也是这样的,新的awesome3.1可以实现非常复杂的功能。
FreeBSD里面还是awesome2.3.4的版本,对我来说,这个足够用了。本来打算用conky来显示的,不过由于FreeBSD对我的笔记本的ACPI的电源管理支持不够好 ,使得conky运行一段时间后必然出错,系统缓慢。我只好自己从系统里面提取数据来显示了。不过很成功,哈
看图:

桌面效果
OK,这里是我的两个脚本文件,添加到 ~/.xinitrc里面后台启动就行(仅适用于FreeBSD以及Awesome2.3.4)以及相应的配置文件
显示时钟:
#!/bin/sh
# this script is for awesome 2.3# Point this to a directory you can write to.
#PID=~/var/run/awesome_clock.pid
PID=~/.awesome/awesome_clock.pidupdateClock() {
# See 'man date' to see the possible replacements for the % fields.
echo "0 widget_tell mystatusbar clock text " `date +"%a %Y-%m-%d% %H:%M:%S"` "" | awesome-client
}# This will prevent this script from running multiple times
if [ -f $PID ] ; then
kill -0 `cat $PID` 2> /dev/null
if [ $? -ne 0 ] ; then
echo "["`date`"] $0 killed bogus lock file ["`cat $PID`"]"
else
echo "["`date`"] $0 already running ["`cat $PID`"]"
exit
fi
fi
echo $$ > $PID
while true; do
updateClock
sleep 1;
done
显示系统状态:
#!/bin/sh
# this script is for awesome 2.3# Point this to a directory you can write to.
#PID=~/var/run/awesome_stat.pid
PID=~/.awesome/awesome_stat.pid
NET_IF=nfe0 #换成你自己的网卡界面
NET_HOST=dy #换成你自己的机器名字
DELAY_TIME=2 #2秒更新一次updateSTAT() {
NET_DOWN_NEW=`netstat -I $NET_IF -b | grep $NET_HOST | awk '{print $7}'`
NET_UP_NEW=`netstat -I $NET_IF -b | grep $NET_HOST | awk '{print $10}'`
NET_DOWN_SHOW=`expr \( $NET_DOWN_NEW - $NET_DOWN_OLD \) / 1024 / $DELAY_TIME`
NET_UP_SHOW=`expr \( $NET_UP_NEW - $NET_UP_OLD \) / 1024 / $DELAY_TIME`
echo "0 widget_tell mystatusbar stat text" " CPU" `sysctl dev.cpu.0.freq | awk '{print $2}'`"MHz" `sysctl hw.acpi.thermal.tz0.temperature | awk '{print $2}'` NET down $NET_DOWN_SHOW K/s,up $NET_UP_SHOW K/s BAT `sysctl hw.acpi.battery.life | awk '{print $2}'`% "" | awesome-client
NET_DOWN_OLD=$NET_DOWN_NEW
NET_UP_OLD=$NET_UP_NEW
}
# This will prevent this script from running multiple times
if [ -f $PID ] ; then
kill -0 `cat $PID` 2> /dev/null
if [ $? -ne 0 ] ; then
echo "["`date`"] $0 killed bogus lock file ["`cat $PID`"]"
else
echo "["`date`"] $0 already running ["`cat $PID`"]"
exit
fi
fi
echo $$ > $PID
#
NET_DOWN_OLD=0
NET_UP_OLD=0
while true; do
updateSTAT
sleep $DELAY_TIME;
done
配置文件:
screen 0
{
general
{
border = 1
snap = 8
mwfact_lower_limit = 0.1
mwfact_upper_limit = 0.9
resize_hints = false
new_get_focus = true
}
styles
{
normal
{
font = "smoothansi,WenQuanYi Bitmap Song 8"
fg = "#a0a0a0"
bg = "#0a0a0a"
border = "#0a0a0a"
shadow = "#111111"
shadow_offset = "1"
}
focus
{
fg = "#ffffff"
bg = "#285577"
border = "#285577"
}
urgent
{
fg = "#ff5656"
bg = "#a0a0a0"
}
}
tags
{
tag Main {layout = "tile" }
tag Webs {layout = "tile" }
tag Stat {layout = "tile" }
tag View {layout = "tile" }
tag Funs {layout = "floating" }
tag File {layout = "tile" }
#tag tag1 {layout = "tile" }
#tag tag2 {layout = "tile" }
#tag tag3 {layout = "tile" }
}
layouts
{
layout tile { image = "/usr/local/share/awesome/icons/layouts/tileleftw.png" }
layout tilebottom { image = "/usr/local/share/awesome/icons/layouts/tiletopw.png" }
layout floating { image = "/usr/local/share/awesome/icons/layouts/floatingw.png" }
}
statusbar mystatusbar
{
position = "top"
height = "15"taglist mytaglist
{
#align = "center"
mouse
{
button = "1"
command = "tag_view"
}
mouse
{
button = "1"
modkey = {"Mod4"}
command = "client_tag"
}
mouse
{
button = "3"
command = "tag_toggleview"
}
mouse
{
button = "3"
modkey = {"Mod4"}
command = "client_toggletag"
}
mouse
{
button = "4"
command = "tag_viewnext"
}
mouse
{
button = "5"
command = "tag_viewprev"
}
}
layoutinfo mylayoutinfo
{
mouse
{
button = "1"
command = "tag_setlayout"
arg = "+1"
}
mouse
{
button = "4"
command = "tag_setlayout"
arg = "+1"
}
mouse
{
button = "3"
command = "tag_setlayout"
arg = "-1"
}
mouse
{
button = "5"
command = "tag_setlayout"
arg = "-1"
}
}
textbox stat # "clock" is the name of your widget
{
text_align = "center"
align = "left"
style { fg = "pink" bg = "#0a0a0a" }
#width = 160
text = "" # the - will be replaced by the date and time
}
tasklist mytasklist
{
#text_align = "center"
mouse
{
button = "4"
command = "client_focusnext"
}
mouse
{
button = "5"
command = "client_focusprev"
}
mouse
{
modkey = {"Mod4"}
button = "4"
command = "client_swapnext"
}
mouse
{
modkey = {"Mod4"}
button = "5"
command = "client_swapprev"
}
}
textbox clock # "clock" is the name of your widget
{
text_align = "center"
align = "right"
style { fg = "yellow" bg = "#0a0a0a" }
#width = 160
text = "" # the - will be replaced by the date and time
}
}
}
rules
{
rule { name = "Gimp" float = true }
rule { name = "MPlayer" float = true }
rule { name = "Acroread" float = true }
rule { name = "pinentry" float = true }
rule { name = "pidgin" tags = "Webs" }
rule { name = "skype" float = true }
rule { name = "Dialog" float = true }
rule { name = "Download" float = true }
rule { name = "Widget" float = true }
rule { name = "feh" float = true }
rule { name = "Opera" tags = "Webs"}
}
mouse
{
root
{
button = "3"
command = "spawn"
arg = "exec urxvtc"
}
root
{
button = "4"
command = "tag_viewnext"
}
root
{
button = "5"
command = "tag_viewprev"
}
client
{
modkey = {"Mod4"}
button = "1"
command = "client_movemouse"
}
client
{
modkey = {"Mod4"}
button = "2"
command = "client_zoom"
}
client
{
modkey = {"Mod4"}
button = "3"
command = "client_resizemouse"
}
titlebar
{
button = "1"
command = "client_movemouse"
}
titlebar
{
button = "3"
command = "client_resizemouse"
}
}
keys
{
key
{
modkey = {"Mod4"}
key = "F1"
command = "spawn"
arg = "for i in /usr/share/man/man?;do ls $i; done | cut -d. -f1 | awesome-menu -e 'urxvtc -e man ' 'See manual page for:'"
}
key
{
modkey = {"Mod4"}
key = "F2"
command = "spawn"
# arg = "find /usr/bin -type f -executable ! -empty | awesome-menu -e 'exec ' Execute:"
# arg = "exec dmenu_run -fn '-*-fixed-medium-r-normal--20-*-*-*-*-*-*-*' -nb '#0a0a0a' -nf '#a0a0a0' -sb '#285577' -sf '#ffffff'"
arg = "exec dmenu_run -fn smoothansi -nb '#0a0a0a' -nf '#a0a0a0' -sb '#285577' -sf '#ffffff'"
}
key
{
modkey = {"Mod4"}
key = "F3"
command = "spawn"
# arg = "cut -d' ' -f1 ~/.ssh/known_hosts | cut -d, -f1 | awesome-menu -e 'urxvtc -e ssh ' 'ssh to:'"
# arg = "exec firefox"
}
key
{
modkey = {"Mod1"}
key = "F1"
command = "spawn"
arg = "exec urxvtc"
}
key
{
modkey = {"Mod1"}
key = "F2"
command = "spawn"
arg = "exec gmrun"
}
key
{
modkey = {"Mod4"}
key = "Return"
command = "spawn"
arg = "exec urxvtc"
}
key
{
modkey = {"Mod4"}
key = "space"
command = "tag_setlayout"
arg = "+1"
}
key
{
modkey = {"Mod4", "Shift"}
key = "space"
command = "tag_setlayout"
arg = "-1"
}
key
{
modkey = {"Mod4"}
key = "b"
command = "statusbar_toggle"
}
key
{
modkey = {"Mod4"}
key = "j"
command = "client_focusnext"
}
key
{
modkey = {"Mod4"}
key = "k"
command = "client_focusprev"
}
key
{
modkey = {"Mod4"}
key = "Tab"
command = "focus_history"
arg = "-1"
}
key
{
modkey = {"Mod4", "Shift"}
key = "j"
command = "client_swapnext"
}
key
{
modkey = {"Mod4", "Shift"}
key = "k"
command = "client_swapprev"
}
key
{
modkey = {"Mod4", "Control"}
key = "j"
command = "screen_focus"
arg = "+1"
}
key
{
modkey = {"Mod4", "Control"}
key = "k"
command = "screen_focus"
arg = "-1"
}
key
{
modkey = {"Mod4"}
key = "h"
command = "tag_setmwfact"
arg = "-0.05"
}
key
{
modkey = {"Mod4"}
key = "l"
command = "tag_setmwfact"
arg = "+0.05"
}
key
{
modkey = {"Mod4", "Shift"}
key = "h"
command = "tag_setnmaster"
arg = "+1"
}
key
{
modkey = {"Mod4", "Shift"}
key = "l"
command = "tag_setnmaster"
arg = "-1"
}
key
{
modkey = {"Mod4", "Control"}
key = "h"
command = "tag_setncol"
arg = "+1"
}
key
{
modkey = {"Mod4", "Control"}
key = "l"
command = "tag_setncol"
arg = "-1"
}
key
{
modkey = {"Mod4"}
key = "Escape"
command = "tag_prev_selected"
}
key
{
modkey = {"Mod4"}
key = "Left"
command = "tag_viewprev"
}
key
{
modkey = {"Mod4"}
key = "Right"
command = "tag_viewnext"
}
key
{
modkey = {"Mod4"}
key = "m"
command = "client_togglemax"
}
key
{
modkey = {"Mod4", "Control"}
key = "Return"
command = "client_zoom"
}
key
{
modkey = {"Mod4", "Control"}
key = "space"
command = "client_togglefloating"
}
key
{
modkey = {"Mod4"}
key = "s"
command = "client_togglescratch"
}
key
{
modkey = {"Mod4", "Control"}
key = "s"
command = "client_setscratch"
}
key
{
modkey = {"Mod4", "Shift"}
key = "c"
command = "client_kill"
}
key
{
modkey = {"Mod4", "Shift"}
key = "q"
command = "quit"
}
key
{
modkey = {"Mod4", "Control"}
key = "r"
command = "restart"
}
key
{
modkey = {"Mod4"}
key = "0"
command = "tag_view"
}
keylist
{
modkey = {"Mod4"}
command = "tag_view"
keylist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
arglist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
}
key
{
modkey = {"Mod4", "Control"}
key = "0"
command = "tag_toggleview"
}
keylist
{
modkey = {"Mod4", "Control"}
command = "tag_toggleview"
keylist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
arglist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
}
key
{
modkey = {"Mod4", "Shift"}
key = "0"
command = "client_tag"
}
keylist
{
modkey = {"Mod4", "Shift"}
command = "client_tag"
keylist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
arglist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
}
key
{
modkey = {"Mod4", "Shift", "Control"}
key = "0"
command = "client_toggletag"
}
keylist
{
modkey = {"Mod4", "Shift", "Control"}
command = "client_toggletag"
keylist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
arglist = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }
}
}
# vim:filetype=config:cfg