Mulai April 2020, bandithijo.com akan menggunakan GitHub subdomain menjadi bandithijo.github.io. Penggunaan domain .com tidak sejalan dengan cara pandang saya terhadap sebuah blog, dimana blog harus bisa tetap hidup tanpa saya. Terima kasih (^_^) (bandithijo, 2020/03/25) ●

Membuat Module Sederhana untuk Status Bar GNU/Linux dan FreeBSD

Ditulis: 2020/05/11
Script Tips

بسم الله الرحمن الرحيم

Pendahuluan

Bagi teman-teman yang menggunakan Window Manager pasti sudah sangat familiar dengan status bar. Ada bermacam-macam nama status bar yang dapat digunakan. Salah satu yang saya gunakan terakhir kali adalah Polybar. Saya sudah pernah membahas tentang Polybar di sini: Polybar, Bar yang Mudah Dikonfig, Praktis, dan Mudah Dikustomisasi.

Catatan kali ini, saya ingin membahas tentang status bar yang kita racik sendiri, dan tidak tergantung dengan status-status bar yang sudah ada.

Permasalahan

Saya tidak menggunakan alasan bahwa status-status bar tersebut bloated, karena tidak semua module kita gunakan. Namun, saya ingin lebih tidak tergantung terhadap status-status bar tersebut yang bisa jadi hanya spesifik untuk sistem operasi tertentu saja. Misal untuk Polybar, sebagian besar module-module yang disediakan, tidak dapat berjalan dengan baik pada FreeBSD.

Kalau hal tersebut terjadi, maka saya yang repot. Karena harus meluangkan waktu lagi untuk melakukan riset dan membuat ulang module-module tersebut agar dapat digunakan dengan Polybar.

Pemecahan Masalah

Saya sudah membuatkan beberapa module yang dapat digunakan untuk membangun status bar sendiri atau digunakan oleh Polybar. Module akan saya tulis dalam dua sistem operasi. Karena backend program yang digunakan tentu saja berbeda pada kedua sistem operasi.

[ ! ] Perhatian

Saya tidak banyak pengalaman dalam menulis Bash Script. Apabila ada logika yang kurang baik, boleh sekali loh dikasih saran dan dibenerin. Saya sangat terbuka dan senang sekali. Terima kasih (^_^)

Module

CPU Temperature

GNU/Linux

1
2
3
4
5
#!/usr/bin/env bash

get_temp_cpu0=$(cat /sys/class/thermal/thermal_zone0/temp)
temp_cpu0=$(($get_temp_cpu0/1000))
echo "" $temp_cpu0"°C"

FreeBSD

1
2
3
4
#!/usr/local/bin/bash

temp_cpu0=$(sysctl -n dev.cpu.0.temperature | cut -d "." -f1)
echo "" $temp_cpu0"°C"

Memory

GNU/Linux

1
2
3
4
5
6
7
#!/usr/bin/env bash

mem_total=$(free | awk 'NR%2==0 {print $2}')
mem_avail=$(free | awk 'NR%2==0 {print $7}')
mem_used=$(( $mem_total - $mem_avail))
mem_usage=$(( $mem_used * 100 / $mem_total ))
echo " "$mem_usage"%"

FreeBSD

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/local/bin/bash

mem_phys=$(sysctl -n hw.physmem)
mem_hw=$mem_phys
pagesize=$(sysctl -n hw.pagesize)
mem_inactive=$(( $(sysctl -n vm.stats.vm.v_inactive_count) * $pagesize))
mem_cache=$(( $(sysctl -n vm.stats.vm.v_cache_count) * $pagesize))
mem_free=$(( $(sysctl -n vm.stats.vm.v_free_count) * $pagesize))
mem_total=$mem_hw
mem_avail=$(( $mem_inactive + $mem_cache + $mem_free ))
mem_used=$(( $mem_total - $mem_avail ))
mem_usage=$(( $mem_used * 100 / $mem_total ))
echo "" $mem_usage"%"

File System

GNU/Linux

1
2
3
4
#!/usr/bin/env bash

cap_percentage=$(df -h --output=pcent / | awk 'NR%2==0 {print $0}')
echo ""$cap_percentage

FreeBSD

1
2
3
4
5
6
7
#!/usr/local/bin/bash

cap_percentage=$(df -h / | tail -1 | awk '{print $(NF-1)}' | cut -d "G" -f1)
cap_avail=$(df -h / | tail -1 | awk '{print $(NF-2)}' | cut -d "G" -f1)
cap_total=$(df -h / | tail -1 | awk '{print $(NF-4)}' | cut -d "G" -f1)
echo $cap_avail"/"$cap_total"G ("$cap_percentage")"
echo ""$cap_percentage

Volume

GNU/Linux

1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash

mute=$(pamixer --get-mute)
if [ $mute = "true" ]; then
    echo " MUTE"
elif [ $mute = "false" ]; then
    volume=$(pamixer --get-volume-human)
    echo "" $volume
else
    echo " ERROR"
fi

FreeBSD

1
2
3
4
5
6
7
8
9
10
11
#!/usr/local/bin/bash

mute=$(sysctl -n dev.acpi_ibm.0.mute)
if [ $mute = "1" ]; then
    echo " MUTE"
elif [ $mute = "0" ]; then
    volume=`mixer vol | awk '{print $(NF)}' | cut -d ":" -f1`
    echo "" $volume
else
    echo " ERROR"
fi

Backlight

GNU/Linux

1
2
3
4
#!/usr/bin/env bash

backlight=$(xbacklight -get | cut -d "." -f1)
echo "" $backlight"%"

FreeBSD

1
2
3
4
#!/usr/local/bin/bash

backlight=$(sysctl -n hw.acpi.video.lcd0.brightness | awk '{print $(NF)}')
echo "" $backlight"%"

Network Traffic

GNU/Linux & FreeBSD

1
2
3
4
5
6
#!/bin/bash

wlan_card='wls3'
wlan_do=$(ifstat2 -i $wlan_card 1 1 | awk 'NR%3==0 {print $1}')
wlan_up=$(ifstat2 -i $wlan_card 1 1 | awk 'NR%3==0 {print $2}')
echo "" $wlan_do "" $wlan_up "KB/s"

Battery Capacity

GNU/Linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env bash

cap=$(cat /sys/devices/platform/smapi/BAT0/remaining_percent)
if [ $cap -ge 0 ] && [ $cap -le 20 ]; then
    echo "" $cap"%"
elif [ $cap -ge 21 ] && [ $cap -le 40 ]; then
    echo "" $cap"%"
elif [ $cap -ge 41 ] && [ $cap -le 60 ]; then
    echo "" $cap"%"
elif [ $cap -ge 61 ] && [ $cap -le 90 ]; then
    echo "" $cap"%"
elif [ $cap -ge 91 ] && [ $cap -le 100 ]; then
    echo "" $cap"%"
else
    echo "UNKNWN"
fi

FreeBSD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/local/bin/bash

cap=$(sysctl -n hw.acpi.battery.life)
if [ $cap -ge 0 ] && [ $cap -le 20 ]; then
    echo "" $cap
elif [ $cap -ge 21 ] && [ $cap -le 40 ]; then
    echo "" $cap
elif [ $cap -ge 41 ] && [ $cap -le 60 ]; then
    echo "" $cap
elif [ $cap -ge 61 ] && [ $cap -le 90 ]; then
    echo "" $cap
elif [ $cap -ge 91 ] && [ $cap -le 100 ]; then
    echo "" $cap
else
    echo "UNKNWN"
fi

Battery Status

GNU/Linux

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env bash

state=$(cat /sys/devices/platform/smapi/BAT0/state)
if [ $state = "charging" ]; then
    echo " " # charging
elif [ $state = "discharging" ]; then
    echo " " # discharging
elif [ $state = "idle" ]; then
    echo " " # idle
else
    echo " " # unknown
fi

FreeBSD

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/local/bin/bash

state=$(sysctl -n hw.acpi.battery.state)
if [ $state = "2" ]; then
    echo " " # charging
elif [ $state = "1" ]; then
    echo ""  # discharging
elif [ $state = "0" ]; then
    echo " " # idle
else
    echo ""  # unknown
fi

Selesai!

Ya, seperti ini saja yang dapat saya catat.

Mudah-mudahan dapat bermanfaat untuk teman-teman yang memerlukan.

Terima kasih.

(^_^)

Penulis

bandithijo

BanditHijo adalah nama pena saya – meminjam istilah keren dari para penulis. Teman-teman menyebut saya sebagai GNU/Linux Enthusiast. Saya memang gemar mengutak-atik sistem operasi ini. Bukan karena hobi tapi karena saya perlu untuk menggunakannya. Hehe.

- Rizqi Nur Assyaufi

Berlangganan via Email

Jangan sampai ketinggalan kabar dan info terbaru mengenai BanditHijo (R)-Chive.
Ayo bergabung!

d9fa304ba660ef3df99f5ad20c41927b51e6ff4b