bspwm 平铺式窗口管理器配置
bspwm is a tiling window manager that represents windows as the leaves of a full binary tree. It has support for EWMH and multiple monitors, and is configured and controlled through messages. —From archlinux wiki.
bspwm 和i3wm,openbox 以及其他众多平铺式窗口管理器一样都是比较简洁易配置的窗口管理器。比较适合强迫症和有洁癖的人使用,当然有的人觉得这样的linux才是真正的沉侵式体验。
- 折腾了下i3和bspwm 这两个都是比较容易配置的窗口管理器(如果有人折腾了openbox或者其他的wm欢迎补充,下面上个bspwm+lemonbar的图,并贴下大概的配置)。

- 贴下配置
- lemonbar,我分成了三个文件,另外因为我是台式机,所以我把电池去掉了。需要的话自己搜索折腾下
- 1.panel文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
source ~/.config/bspwm/lemonbar/setup
while true; do
# echo $! > pid
echo "%{U#FCFCFC}%{B$COLOR_HIGHLIGHT F$COLOR_TEXT_HIGHLIGHT}$(power)%{B- F-}$(workspace)$(title)%{r}$(volume)$(network)%{B$COLOR_HIGHLIGHT F$COLOR_TEXT_HIGHLIGHT}$(clock)%{B- F-}"
sleep 5s
done |
lemonbar -p\
-g x$PANEL_HEIGHT\
-B "$COLOR_BACKGROUND"\
-F "$COLOR_FOREGROUND"\
-u 4\
-U "#FCFCFC"\
-f "$PANEL_FONT_FAMILY"\
-f "$ICON_FONT" | bash
- 2.setup文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
PANEL_FIFO=/tmp/panel-fifo
PANEL_HEIGHT=28
# PANEL_FONT_FAMILY="CamingoCode:size=9"
PANEL_FONT_FAMILY="hack:size=8"
#ICON_FONT2="typicons:size=11"
ICON_FONT="MaterialIcons:size=8"
COLOR_BACKGROUND="#0F0F0F"
COLOR_FOREGROUND="#FCFCFC"
COLOR_HIGHLIGHT="#0F0F0F"
COLOR_TEXT_HIGHLIGHT="#FFFFFF"
UPDATE="~/.config/bspwm/lemonbar/update"
if [ $(pgrep -cx panel) -gt 2 ] ; then
printf "%s\n" "The panel is already running." >&2
exit 1
fi
trap 'trap - TERM; kill 0' INT TERM QUIT EXIT
# Power button
power(){
echo -e '%{A:oblogout:} \uE8AC %{A}'
}
# Clock
clock(){
TIME=$(date "+%a %d %b %H:%M")
echo -e '\uE924' $TIME ' '
}
# Networking
network(){
NETSTATUS=$(ping -c 1 111.13.101.208 >/dev/null 2>&1 && echo "UP" || echo "DOWN")
if [ $NETSTATUS = 'UP' ]; then
icon='\ue1b9'
ssid=''
else
icon='\ue1cf'
ssid=''
fi
echo -e $icon $ssid ' '
}
# Volume
volume(){
vol=$(amixer get Master | grep % | sed -n 1p | awk -F '[' '{print $2}' | awk -F ']' '{print $1}' | sed s/%//)
if [ $vol = 0 ]; then
icon='\uE04F'
elif [ $vol -lt 33 ]; then
icon='\uE04E'
elif [ $vol -lt 66 ]; then
icon='\uE04D'
else
icon='\uE050'
fi
echo -e "%{A4:amixer -q set Master 5%+ && ${UPDATE}:}%{A5:amixer -q set Master 5%- && ${UPDATE}:} " $icon $vol'%' ' %{A}%{A}'
}
# Workspace
workspace() {
wslist=$(\
wmctrl -d \
| awk '/ / {print $2 $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20}' ORS=''\
| sed -e 's/\s* //g' \
-e 's/\*[ 0-9A-Za-z]*[^ -~]*/\\uE3FA /g' \
-e 's/\-[ 0-9A-Za-z]*[^ -~]*/%{A:i3-msg workspace & \&\& \~\/.config\/lemonbar\/update:}\\uE836 %{A}/g' \
-e 's/\*//g' \
-e 's/ -/ /g' \
)
if (( $(wmctrl -d | wc -l) == 10)); then
new=""
else
new=$(\
wmctrl -d\
| rev\
| cut -c 1\
| awk -v RS='\\s+' '{ a[$1] } END { for(i = 1; i in a; ++i); print i }'\
)
new="%{A:i3-msg workspace $new && ${UPDATE}:}\uE3BA%{A}"
fi
echo -n -e " $wslist$new"
}
title(){
title=$(xdotool getactivewindow getwindowname)
echo " [$title]" | cut -c 1-70
}
3.update文件(如果不kill的话panel或直接僵死掉,目前也并不是完美的,依然有几率会出现panel僵死,求解决办法)
1
2
3
4
# TODO: make this less hacky.
pkill -f "sleep 5s"更多配置请参考 google+