Sejak memasang "dark" theme, saya cenderung menjadi malas menulis. Untuk sementara, dark theme saya disable dulu yaa. Terima kasih (^_^) (bandithijo, 2024/09/15) ●
Pendahuluan
Sejak sekitar Maret 2019, saya menggunakan ThinkPad X61. Laptop yang dirilis tahun 2007 silam ini, masih dapat saya pergunakan untuk menunjang pekerjaan saya sehari-hari, sebagai Junior Backend Rails Developer.
Sebelum ini, saya menggunakan ThinkPad X260. Saya memiliki dua buah ThinkPad seri X, X61 (2007) dan X260 (2016). Namun, karena istri saya memerlukan laptop untuk menunjang pekerjaannya, maka saya pun memilih untuk menggunakan ThinkPad X61.
Cukup banyak beberapa kendala yang menuntut saya untuk harus pintar-pintar dalam mengadaptasikan workflow saya dalam menggunakan sistem komputer. Tentunya tidak seleluasa menggunakan X260.
Karena X61 ini adalah laptop yang berumur, maka hal yang paling saya perhatikan sekali adalah temperatur dari CPU.
Saya sangat menjaga dan memperhatikan sekali proses-proses yang berjalan di atas sistem agar tidak memberatkan CPU terlalu lama.
Kalaupun perlu proses yang berat, saya ingin dapat memonitor temperatur dari CPU yang sedang aktif bekerja.
Karena seperti yang teman-teman ketahui, Intel processor memiliki sistem yang dapat mematikan mesin apabila suhu CPU sudah mencapai ambang batas (100°C).
Beberapa hari ini, sudah kira-kira 2 kali dalam sehari saya mengalami mati mendadak. Saya curiga karena temperatur CPu yang tidak saya jaga pada konidisi yang aman.
Hal ini juga disebabkan karena minimalnya sistem notifikasi dari sistem yang saya gunakan.
Atas dasar ini, saya berinisiatif untuk menambahkan fitur notifikasi suara apabila CPU sudah mencapai suhu tertentu.
Langsung saja saya tuliskan script sederhana cupu, yang saya tulis menggunakan bahasa Ruby.
Script
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
#!/usr/bin/env ruby
# Copyright (C) 2019 Rizqi Nur Assyaufi <bandithijo@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
Process.setproctitle('notify-hightemp')
require 'open3'
CPU_TEMP_THRESHOLD = 90 # <- Normaly 90-100
NOTIF_DURATION = 3 # <- Duration in milisecond
NOTIF_VOLUME = 5 # <- Range between 0-10
def notif_volume_converter(value)
value * 6553.6
end
begin
while true
capture_temp = 'cat /sys/class/thermal/thermal_zone0/temp'
temp = Open3.capture2(capture_temp)
temp_cpu = (temp[0].to_i / 1000)
temp_threshold = CPU_TEMP_THRESHOLD
notif_duration = (NOTIF_DURATION * 1000).to_i
notif_volume = notif_volume_converter(NOTIF_VOLUME)
if temp_cpu >= temp_threshold
system("dunstify ' CPU TEMPERATURE OVERLOAD!' --urgency=critical --timeout=#{notif_duration} -r 1")
system("paplay $HOME/snd/Ringtones/Alert/aircraftalarm.wav --volume=#{notif_volume}")
system('thinkalert 5') if system('which thinkalert > /dev/null 2>&1')
end
sleep(5)
end
rescue Interrupt
puts "\nExiting..."
end
Saya beri nama file notify-hightemp
.
Saya tidak menggunakan ekstensi .rb
karena saya sudah mendefinisikan SheBang #!/usr/bin/env ruby dari file ini, agar sistem dapat mengenali bahwa saya ingin mengeksekusi file ini dengan Ruby intepreter. Selain itu agar lebih mudah dipanggil di Terminal, hehe.
Saya menggunakan perintah cat /sys/class/thermal/thermal_zone0/temp
agar lebih fleksibel digunakan pada mesin yang lain. Karena selain /sys
kita juga dapat menggunakan /proc
Selain itu saya hanya menangkap nilai untuk thermal_zone0
yang saya asumsikan sebagai temperatur untuk core0.
Teman-teman bisa mengolahnya sendiri untuk menangkap nilai dari core yang lain.
Selanjutnya, berikan permission untuk execute.
$ chmod +x notify-hightemp
Copykan ke direktori /usr/bin/
untuk dieksekusi semua user atau ~/.local/bin/
untuk user kita saja.
Selanjutnya tinggal meletakkan pada autorun.
Autorun
Bagian ini akan tergantung dari DE atau WM yang teman-teman pergunakan.
Karena saya menggunakan BSPWM, kira-kira seperti ini cara saya menambahkan script yang baru saja kita buat ini kedalam sistem autorun.
$ vim ~/.config/bspwm/autostart
1
2
3
4
5
6
#!/usr/bin/env sh
# ...
# ...
kill -9 $(pidof notify-hightemp); notify-hightemp &
Penambahakan kill -9 $(pidof notify-hightemp)
bertujuan agar ketika saya merestart WM, script ini tidak dipanggil lagi. Namun, akan dikill terlebih dahulu, kemudian baru dijalankan kembali.
Nama dari processs title berupa notify_hightemp
ini saya set pada Ruby script di bagian
Process.setproctitle("notify-hightemp")
Sebenarnya bisa juga menggunakan,
$0="notify-hightemp"
Namun, terlihat seperti kurang Ruby banget, hehe.
Tambahan
ThinkAlert
Untuk pengguna ThinkPad jadul seperti saya (ThinkPad X61), saya menambahkan thinkalert
bagi pengguna ThinkPad yang masih memiliki ThinkLight sebagai indikator tambahan.
Untuk pengguna distro selain Arch, mungkin tidak ada thinkalert
di repository. Tinggal pasang saja dari GitHub repo dari thinkalert.
$ git clone https://github.com/floriandejonckheere/thinkalert.git
$ cd thinkalert
Isinya cuma dua file.
$ ls
README.md thinkalert thinkalert.c
Nah, thinkalert.c
ini yang akan kita compile menjadi file binary.
$ gcc -c thinkalert thinkalert.c
Kalau ada warning (peringatan) mengenai penggunaan setgroups
, bisa ganti menjadi getgroups
1
2
3
4
5
6
7
8
9
10
11
// ...
// ...
// Programming Cookbook for C and C++.
void dropPrivs() {
// ...
// ...
// Drop ancillary group memberships.
if (!olduid) getgroups(1, &newgid);
Kemudian compile ulang.
Selanjutnya, install ke /usr/bin/
.
$ sudo install -Dm4755 thinkalert /usr/bin/thinkalert
$ exec $SHELL
Nah, coba jalankan thinkalert.
$ thinkalert
thinkalert <on|off|toggle>
thinkalert <times> [interval (microseconds)]
thinkalert <times> <on period (microseconds)> <off period (microseconds)>
Kalau keluar output seperti di atas, artinya thinkalert telah berhasil dipasang.
Coba test dengan menjalankan thinkalert kedip 5 kali.
$ thinkalert 5
Kalau berhasil, thinklight akan berkedip 5 kali. Keren!
Akhir Kata
Kira-kira seperti ini saja Ruby script yang sederhana cupu ini.
Mungkin dilain waktu, berdasarkan kebutuhan-kebutuhan tertentu, akan mulai ditambahkan fitur-fitur dan kemampuan dari script ini agar lebih mudah dan interaktif untuk digunakan.
Mudah-mudahan bermanfaat.
Terima kasih (^_^)v
Oh ya, kalo mau audio aircraftalarm.wav
, dapat diunduh di sini yaa.
Tapi tidak saya rekomendasikan karena mungkin dapat menyebabkan serangan panik, hehe.
Referensi
-
github.com/floriandejonckheere/thinkalert
Diakses tanggal: 2020/05/06 -
aur.archlinux.org/packages/thinkalert
Diakses tanggal: 2020/05/06
Lisensi
Atribusi-NonKomersial-BerbagiSerupa 4.0 Internasional (CC BY-NC-SA 4.0)
Penulis
My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.
- Rizqi Nur Assyaufi