Beberapa waktu belakangan ini saya mengalami kesulitan karena notifikasi baterai low/lemah di Linux Mint ini tidak tampil apabila aplikasi dalam mode fullscreen, alhasil ketika saya sedang menonton film atau video tiba-tiba laptop saya mati.
Jadi, saya harus memperkirakan atau mengontrol kapan baterai laptopnya akan low, tentu saja tidak nyaman rasanya. 😅
Ada beberapa cara yang sudah saya temukan untuk mengatasi masalah ini, salah satunya dengan membuat file custom bash script dengan menggunakan bantuan GUI dialogs zenity.
Kenapa zenity? Karena kelebihan dari zenity ini, notifikasi akan tetap muncul dan pop up walaupun aplikasi dalam mode fullscreen.
Di sini laptop saya menggunakan OS Linux Mint 20.3, mungkin untuk distribusi debian lainnya seperti Ubuntu masih work silakan dicoba-coba dulu ya.
Baiklah, untuk langkah-langkahnya sebagai berikut:
Install zenity
Zenity merupakan bagian dari GNOME desktop dan sudah terinstall default pada kebanyakan distribusi Linux. Bisa dicek apakah zenity sudah terinstall atau belum dengan perintah ini:
Jika belum terinstall, kita bisa menginstallnya dengan perintah:
Jika sudah diinstall, kita bisa testing untuk menampilkan dialog notifikasinya dengan perintah berikut:
zenity --warning --text='Battery Low' --no-wrap
Kemudian untuk mengecek apakah status baterai laptopnya sedang dicas/Charging atau tidak/Discharging dan Level persentase baterai, saya menggunakan modul Linux acpi karena menurut saya simpel dan mudah digunakan.
Install acpi
JIka acpi belum terinstall, kita bisa menginstallnya dengan perintah berikut:
Untuk mengetes fungsi acpi ini, silakan ketik acpi -b
di terminal dan akan menampilkan informasi seperti berikut:
Nahh, bisa kita lihat dari informasi tersebut, status baterainya Discharging dan Level baterainya 46%. Informasi ini bisa kita ekstrak dan kita gunakan dalam logic script bash untuk membuat notifikasi urgent baterai low nantinya.
Membuat script bash
Shell script bash kali ini saya menampilkan notifikasi baterai lownya, jika statusnya Discharging dan persentase baterainya di bawah atau sama dengan 20%.
Pertama buat dulu file baru dengan ekstensi .sh, kemudian simpan file tersebut di folder yang kita inginkan, kalau di sini saya simpan ke /opt/bash-scripts/
.
sudo nano /opt/bash-scripts/notif-battery-low.sh
Berikut ini source codenya:
#!/bin/bash
while true
do
battery_state_status=`acpi -b | grep -P -o 'Discharging'`
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_state_status == "Discharging" ]; then
if [ $battery_level -le 20 ]; then
zenity --warning --title="Battery Low" --text="Battery Level now is ${battery_level}%" --no-wrap --timeout=8
fi
fi
sleep 30s
done
Perhatikan kode script bash di atas:
- Saya menggunakan fungsi grep -P -o
untuk mencari dan mengambil pola teks dari 'Discharging' kemudian disimpan dalam variabel battery_state_status
.
- variabel battery_level
untuk menyimpan persentase baterai, dan dengan cara yang sama menggunakan grep -P -o
akan tetapi di sini ada pola regular expression '[0-9]+(?=%) artinya kita hanya mengambil nilai angka dari persentase baterai tanpa mengambil karakter dari % itu sendiri. Misalnya 50%, jadi yang perlu diambil adalah angka 50.
- Kemudian masuk pada seleksi if pertama. Kita cek apakah status baterainya itu sama dengan Discharging atau sedang tidak dicas, karena di sini saya hanya ingin tampilan notifikasi baterai lownya itu muncul ketika baterai tidak dicas/unplugged.
- Jika seleksi if pertama terpenuhi, maka kita cek lagi apakah persentase baterainya itu di bawah atau sama dengan 20? Dalam bash, operator perbandingan yang dipakai adalah -le
atau bisa juga dengan <=
.
- Kalau seleksi kedua juga terpenuhi, barulah kita tampilkan dialog notifikasinya menggunakan zenity. Fungsi --title
untuk menampilkan judul pada dialog, kemudian --timeout
itu untuk menghilangkan dialognya jika sudah melebihi 8 detik.
- Script bash ini akan terus looping dan dieksekusi setiap jeda 30 detik karena menggunakan fungsi sleep 30s dan notifikasi akan muncul hanya selama status baterai masih dalam Discharging.
Simpan file tersebut tersebut dengan mengklik tombol CTRL + X di keyboard, kemudian ketik y untuk menyimpan file.
Jangan lupa juga untuk mengatur eksekusi permissionnya agar script dapat berjalan.
sudo chmod +x /opt/bash-scripts/notif-battery-low.sh
Menjalankan file di background process
Supaya script bash yang telah kita buat tadi dapat berjalan di background process, saya menggunakan fitur Startup Applications yang sudah tersedia default pada Linux Mint. Di Ubuntu ada juga fiturnya.
Dengan Startup Applications ini, script bash akan dijalankan setelah kita menghidupkan dan booting laptop.
Klik tombol super/window key, kemudian ketik "Startup Applications".
Kemudian klik tombol tambah untuk menambah startup applications, dan pilih Custom command.
Keterangan:
- Untuk Name: Isi dengan nama startup program yang kita inginkan
- Command: Browse/Pilih lokasi file script bash yang telah kita buat
- Comment: Deskripsi/Keterangan yang menjelaskan startup program kita (Opsional)
Jika sudah diisi, klik tombol Add untuk menambahkan startup program.
Jika selesai ditambahkan, maka list startup program akan muncul paling atas. Klik slider untuk mengaktifkan command script bash kita. Jika ingin menjalankan langsung programnya bisa juga dengan klik tombol ikon gerigi di sebelah kanan bawah.
Sampai di sini, kita sudah berhasil membuat script bash berjalan di background process sistem Linux. Sekarang tinggal menunggu apakah notifikasi urgent baterai lownya muncul atau tidak.
Jika berhasil, akan menampilkan notifikasi seperti berikut ini:
Screenshot di atas saya ambil ketika sedang menonton series di Netflix.
Sekian tutorial kali ini, semoga membantu dan terima kasih telah membaca artikel ini.
Referensi dan sumber: