Bagaimana saya bisa menjalankan skrip ketika catu daya dicolokkan atau keluar?


8

Untuk beberapa alasan, kecerahan layar laptop saya tidak diperbarui ketika saya plug-in atau plug-out catu daya. Saya telah melihat beberapa solusi untuk masalah itu, tetapi tidak satupun dari mereka yang bekerja dengan baik. Jadi, alih-alih putus asa dan menyerah, saya memutuskan untuk mencoba mengubahnya menjadi pengalaman belajar dan melihat apakah saya tidak bisa menulis naskah yang cocok untuk saya.

Saya mencoba mencari tahu sendiri, dengan bantuan dari internet, tentu saja, tapi saya cukup baru untuk bash scripting dan Ubuntu secara umum, jadi saya tidak melangkah jauh.

Apa yang saya dapat mengetahui adalah bahwa saya dapat menemukan keadaan baterai dengan

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

tergantung pada apakah adaptor AC dicolokkan atau tidak. Saya tidak tahu apakah itu bahkan berguna, tapi itu agak keren, dan saya tidak tahu cara menggunakannya grepsebelumnya, jadi apa, belajar itu menyenangkan.

Ngomong-ngomong, apakah ada cara yang agak bersih untuk melakukan ini? Dengan "cara bersih" yang saya maksud adalah cara yang bisa dipahami oleh orang dengan pengalaman skrip bash terbatas.

Satu pertanyaan serupa yang saya temukan yang memiliki jawaban yang baik adalah yang ini , yang mengatakan sebagai berikut:

Saat Anda mencolokkan / mengeluarkan adaptor AC, skrip di /etc/pm/power.dpanggil dengan> argumen: "true" (jika Anda menggunakan baterai), atau "false" (jika Anda menjalankan dengan adaptor> daya).

Masalahnya adalah saya tidak tahu cara mengakses argumen itu dari dalam skrip. Jadi, saya kira itu semua bermuara pada masalah yang cukup sederhana, tapi saya pikir saya akan memposting pertanyaan itu, kalau-kalau orang memiliki solusi yang lebih baik.

Jawaban:


5

Anda dapat menggunakan on_ac_poweruntuk menjalankan skrip saat catu daya dihidupkan atau dimatikan.

Coba yang berikut ini di terminal.

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

Berdasarkan ini, Anda dapat membuat skrip Anda sebagai,

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

EDIT: [disarankan oleh KasiyA ]

cron job akan menjadi ide yang lebih baik untuk menjalankan skrip pada interval reguler daripada menggunakan loop tak terbatas.

Simpan skrip Anda sebagai myscript.shdan masukkan konten berikut di dalamnya,

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

Jadikan skrip dapat dieksekusi dari terminal chmod +x /path/to/myscript.sh,. Buka pribadi Anda crontabsebagai EDITOR=gedit crontab -edan tambahkan baris berikut di dalamnya untuk menjalankan skrip Anda setiap menit.

* * * * * /path/to/myscript.sh 

Apakah ini praktik yang buruk, membuat skrip berjalan tanpa batas, atau apakah itu sesuatu yang terjadi secara teratur dan terintegrasi ke dalam sistem? Saya kira saya sedang mencari semacam pemicu tetapi jika ini berhasil, maka itu jauh lebih rumit daripada yang saya duga.
Jasper

@TheQZ: Saya pikir 'souravc' telah memberikan ide dasar .. Anda dapat menulis sendiri berdasarkan ini :)
heemayl

@TheQZ Meskipun berjalan selamanya tetapi menjadi aktif hanya sekali per 10 detik (Anda dapat menambah waktu pemeriksaan) Lihatlah pertanyaan bagaimana cara mengulang-perintah-setiap-x-interval-waktu . Kalau tidak, Anda perlu menulis program daemon Anda sendiri yang jauh lebih rumit untuk pemula.
souravc

@TheQZ Anda dapat menggunakan jawaban souravc sebagai tugas cron . lihat bagian kedua dari jawaban saya ini
αғsнιη

2
Cara yang lebih baik adalah dengan menggunakan aturan udev seperti pada askubuntu.com/questions/613741/… .
Anthony Wong
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.