Bonjour

Je viens de terminer un script qui permet d'afficher des informations système via une barre de statut (dzen2).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/bin/sh
 
############
# separator
############
 
sep=`echo -e "|"`
 
############
# functions
############
 
gcpu () {
    cpu_r=""
    cpu_s=`sysctl -n hw.sensors.cpu0.temp0 | awk '{ print $1 }' | cut -c 1-2`
    cpu_t=105 # max temperature (intel core i5 mobile processor)
    if [ "$cpu_s" -ge 90 ]; then
        cpu_r="CPU: ${cpu_s}°C"
    else
        cpu_r="CPU: ${cpu_s}°C"
    fi
    echo -e $cpu_r
}
 
gmem () {
    mem_r=`vmstat | tail -1 | awk '{ print $3"/"$4 }'`
    echo -e "Mem: ${mem_r}"
}
 
gpf () {
    pf_r=""
    pf_s=`doas pfctl -si | grep -E ^Status | cut -c 9-15`
    if [ "$pf_s" == "Enabled" ]; then
        pf_r="PF: On"
    else
        pf_r="PF: Off"
    fi
    echo -e $pf_r
}
 
gnet () {
    net_r=""
    trunk_s=`ifconfig | grep -A8 "^trunk0" | awk '$1 ~ /status/ { print $2 }'`
    em_s=`ifconfig | grep -A8 "^em0" | awk '$1 ~ /status/ { print $2 }'`
    iwn_s=`ifconfig | grep -A8 "^iwn0" | awk '$1 ~ /status/ { print $2 }'`
    if [[ "$trunk_s" == "active" && "$em_s" == "active" ]]; then
        net_r="net: On - Eth"
    elif [[ "$trunk_s" == "active" && "$iwn_s" == "active" ]]; then
        net_r="Net: On - Wifi"
    else
        net_r="Net: Off"
    fi
    echo -e $net_r
}
 
gbacklight () {
    backlight_p=`xbacklight | awk '{printf("%d\n",$1 + 0.5)}'`
    echo -e "Backlight: ${backlight_p}"
}
 
gbatt() {
    batt_r=""
    batt_s=`apm -a` # 0 (disconnected) 1 (connected)
    ac_s=`apm -b`   # 1 (high) 2 (low) 3 (critical)
    batt_p=`apm -l`
    batt_t=`apm -m`
    tleft_h=`echo "($batt_t)/60" | bc`
    tleft_m=`echo "($batt_t)-$tleft_h*60" | bc`
    if [[ "$ac_s" -eq 1 && "$batt_s" -eq 0 && "$batt_t" -eq 0 ]]; then
        batt_r="Batt: ${batt_p} - Time left: Calculating..."
    elif [[ "$ac_s" -eq 2 && "$batt_s" -eq 0 && "$batt_t" -eq 0 ]]; then
        batt_r="Batt: ${batt_p}% - Time left: Calculating..."
    elif [[ "$ac_s" -eq 1 && "$batt_s" -eq 0 ]]; then
        batt_r="Batt: ${batt_p}% - Time left: ${tleft_h}h:${tleft_m}m"
    elif [[ "$ac_s" -eq 1 && "$batt_s" -eq 1 ]]; then
        batt_r="Batt: ${batt_p}%"
    elif [[ "$ac_s" -eq 2 && "$batt_s" -eq 0 ]]; then
        batt_r="Batt: ${batt_p}% - Time left: ${tleft_h}h:${tleft_m}m"
    elif [[ "$ac_s" -eq 2 && "$batt_s" -eq 1 ]]; then
        batt_r="Batt: ${batt_p}%"
    else
        batt_r="Batt: ${batt_p}%"
    fi
    echo -e $batt_r
}
 
gvol() {
    vol_r=""
    vol_p=$((`mixerctl -n outputs.master | cut -f 1 -d ','`*100/255))
    vol_m=`mixerctl -n outputs.master.mute`
    if [[ "$vol_p" -eq 0 || "$vol_m" == "off" ]]; then
        vol_r="Vol: Off"
    else
        vol_r="Vol: ${vol_p}%"
    fi
    echo -e $vol_r
}
 
gdate() {
    date_f="%d %b %H:%M"
    echo -e "`date +"%a, ${date_f}"`"
}
 
########
# dzen2
########
 
width=800
height=12
 
resol=`xrandr -q | grep -w Screen | awk '{ print $8 }'`
 
xwidth=`echo "($resol)-($width)" | bc`
yheight=1
 
font="terminus:size=8"
align="r" # l (left) c (center) r (right)
 
bgcolor="#000000"
fgcolor="#8f8f8f"
 
params="-x $xwidth -y $yheight -h $height -fn $font -bg $bgcolor -fg $fgcolor -ta $align"
actions="button3=entertitle=unhide"
 
#########
# output
#########
 
while true; do
    echo "$(gcpu) $sep $(gmem) $sep $(gnet) $sep $(gpf) $sep $(gbacklight) $sep $(gbatt) $sep $(gvol) $sep $(gdate)"
    sleep 1
done | dzen2 $params -e $actions &
Le script fonctionne mais je souhaite savoir si certaines parties peuvent être optimisées.
J'ai retiré volontairement les couleurs sinon c'est le foutoir.

Merci d'avance pour vos commentaires