Bagaimana saya bisa mendapatkan peringatan ketika baterai saya hampir mati di Linux Mint?

31

Ini terjadi pada saya lebih dari yang ingin saya akui, tetapi kadang-kadang saya tidak melihat daya semakin rendah karena hanya muncul di status bar saya, maka komputer hanya berhenti. Saya ingin peringatan besar yang memperingatkan saya sebelum ini terjadi. Apakah ada cara untuk mengingatkan saya? Ubuntu memiliki munculan yang bagus yang memberi tahu Anda bahwa ia semakin sedikit.

Travis Reeder
sumber
Konfigurasikan manajer daya dari lingkungan desktop Anda untuk melakukan "sesuatu" - ini biasanya dapat berkisar dari "tidak ada", lebih dari "jalankan perintah", hingga "hibernasi" / "matikan".
peterph
Lingkungan desktop yang mana?
Renan
1
@peterph Saya hanya memiliki opsi "Matikan" dan "Hibernasi".
Travis Reeder
@Renan menjalankan Cinnamon.
Travis Reeder
@ TravisR maaf, saya bermaksud mengatakan mengkonfigurasi perilaku ketika tingkat baterai kritis tercapai
peterph

Jawaban:

26

tulis skrip!

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -le 10 ]
then
    notify-send "Battery low" "Battery level is ${battery_level}%!"
fi

kemudian cron menjalankannya setiap beberapa menit. Tapi ya, jika Anda bisa melakukannya melalui GUI, itu mungkin cara yang lebih baik untuk melakukannya.

hdgarrood
sumber
Metode ini memiliki kelebihan yang akan diterapkan pada hampir semua kombinasi lingkungan distro / desktop dengan sedikit penyesuaian.
Perkins
Cara terbaik yang saya temukan untuk 'melakukannya melalui GUI' di lingkungan Cinnamon saya adalah dengan menambahkan applet ke panel: unix.stackexchange.com/a/353505/37552
Michael Scheper
7

re: jawaban hdgarrood, pengaturan cronuntuk menjalankan notify-sendternyata sangat rewel. (Saya pikir crontab -etidak bertahan di reboot secara default, untungnya). Saya mengikuti beberapa panduan, saya tidak yakin apa yang benar-benar memperbaikinya pada akhirnya, tetapi di sini adalah pengaturan lengkap saya untuk menjalankan pemeriksa setiap 5 menit:

$ crontab -e

*/5 * * * * sh /home/nrw/.notify-send_setup
*/5 * * * * sh /home/nrw/.battnotif

$ cat .notify-send_setup

#!/bin/bash
touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus

exit 0

$ cat .battnotif

#!/bin/bash
export DISPLAY=:0
XAUTHORITY=/home/nrw/.Xauthority

if [ -r "$HOME/.dbus/Xdbus" ]; then
    . "$HOME/.dbus/Xdbus"
fi

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`

# I tried to only notify when not charging, but could not get it to work
# STATUS=$(cat /sys/class/power_supply/ADP1/online)
# if [ $battery_level -le 15 ] && [ $STATUS == "0" ]

if [ $battery_level -le 15 ]
then
    /usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
    echo 'batt low' >> /home/nrw/cron.log
fi

echo 'ran batt' >> /home/nrw/cron.log

Pastikan untuk chmod +xskrip bash.

orangenarwhals
sumber
5

Saya sekarang menjalankan yang berikut ini:

$ crontab -e
*/5 * * * * /home/<my username>/bin/checkLowBattery
$ cat /home/<my username>/bin/checkLowBattery
#!/bin/bash

POWERSUPPLY="/sys/class/power_supply/ACAD/online" # could be different on your system!
TOO_LOW=20 # how low is too low?
NOT_CHARGING="0"
ICON="/usr/share/icons/ubuntu-mono-dark/status/24/battery-low.svg" # eye candy

export DISPLAY=:0

BATTERY_LEVEL=$(acpi -b | grep -P -o '[0-9]+(?=%)')
STATUS=$(cat $POWERSUPPLY)

if [ $BATTERY_LEVEL -le $TOO_LOW -a $STATUS = $NOT_CHARGING ]
then
    /usr/bin/notify-send -u critical -i "$ICON" -t 3000 "Battery low" "Battery level is ${BATTERY_LEVEL}%!"
fi

exit 0

Seperti yang Anda lihat ini hanya kode orangenarwhals dengan beberapa perubahan:

  • tidak ada tipu muslihat dbus, entah bagaimana aku tidak membutuhkannya
  • menaruh beberapa "konstanta" ke dalam variabel di awal kode
  • peringatan yang diterapkan hanya ketika baterai tidak sedang diisi (lihat man test, itu menjelaskan cara melakukan AND, antara lain.)
  • ikon ditambahkan (menemukan beberapa kandidat pada sistem Anda dengan sesuatu seperti: $ find /usr/share/icons/ -iname "*batt*low*")
  • waktu kedaluwarsa dalam milidetik

jangan lupa ke chmod +xskrip Anda, Anda kemudian dapat menjalankannya langsung dari cron (tab), tidak perlu sh.

(Ini berfungsi di Ubuntu menggunakan Xmonad.)

Higemaru
sumber
3

Karena Anda menjalankan Cinnamon, instal Battery Applet with Monitoring and Shutdown (BAMS) .

Klik kanan pada panel → + Tambah Applet ke PanelApplet yang tersedia (online) , ketik 'BAMS' di widget pencarian, dan instal dan konfigurasikan.

Ini bukan flashiest, tapi sejauh ini sudah mengingatkan saya ketika saya tanpa sadar mencabut laptop saya.

Michael Scheper
sumber
2

Sentuhan kecil - di Knoppix (diberikan, bukan Mint seperti yang digunakan oleh OP) beri tahu-kirim tidak tersedia (paket libnotify-bin tidak diinstal), jadi alih-alih, saya menemukan ini berguna untuk peringatan:

xmessage Battery low & mplayer /usr/lib/libreoffice/share/gallery/sounds/beam.wav

Saya baru saja melemparkannya ke Perintah Alarm panel Monitor Baterai LXDE, tidak perlu skrip.

Itu mengasumsikan Anda telah menginstal LibreOffice, tetapi .wav membuat suara berdaya rendah yang bagus. Praktis tidak ada .ogg di Knoppix.

Randall
sumber
1
orang mungkin juga akan lebih baik zenitydaripada xmesssagedan aplaybukannyamplayer
Matija Nalis
1

Saya memiliki masalah yang sama dan saya menemukan solusinya. Saya menginstal dari repositori Linux Mint sebuah aplikasi bernama GKrellM. Ini memonitor banyak hal di mesin Anda dan ada baterai. Pengaturan dengan alarm, ini berfungsi untuk saya seperti pesona.

info lebih lanjut di:

http://www.gkrellm.net/

Marcello
sumber
GKrellM tidak bekerja untuk saya. Itu terlalu tua dan sistem notifikasi tidak berfungsi dengan baik.
Bemipefe
1

Masalahnya terkait di lingkungan KDE. Saya memiliki masalah yang sama dengan MintMAYA KDE_version. Ketika saya bekerja dengan Mint9_Gnome pop-up yang sangat berguna muncul ketika tingkat daya rendah tertentu tercapai (dikonfigurasi secara otomatis out_of_the_box pada instalasi baru). Sangat sangat menjengkelkan dihentikan tanpa saran dan tidak ada bantuan yang ditemukan bahkan googling banyak :(

Symb932
sumber
1

Saya memiliki masalah yang sama dan itu sangat membuat frustrasi. Saya dipecahkan dengan menggunakan skrip BatteryAlert.sh :

#!/bin/bash

BATTERY=$(upower -e | grep 'BAT')

while :
do
    BATTERY_PERCENTAGE=$(upower -i $BATTERY|grep percentage|awk '{ print $2 }'|sed s/'%'/''/g)
    CABLE=$(upower -d | grep -n2 line-power | grep online | awk '{ print $3 }')

    if [[ "$BATTERY_PERCENTAGE" -lt "10" && $CABLE = "no" ]]; then

        notify-send --urgency=critical "WARNING: Battery is about to die"  "Plug in the power cable"
        play /usr/share/sounds/KDE-Sys-Warning.ogg &> /dev/null 
    fi

sleep 10

done

Saya menggunakan KDE tetapi Anda dapat menggunakannya di setiap lingkungan desktop. Anda tidak harus menjalankan ini sebagai pengguna root atau menjadi gila dengan sintaks crontab. Anda hanya perlu mengubah suara notifikasi jika Anda menginginkan tanda suara. Jika Anda tidak ingin memulai skrip secara otomatis ketika lingkungan desktop mulai memasukkan skrip ke dalam folder $ USER / bin dengan skrip BatteryAlertLauncher.sh :

#!/bin/bash

function getRunningProcesses 
{
    ps -aux | grep -v grep | grep BatteryAlert.sh
}

if [[ -n "$(getRunningProcesses)" ]] ; then
    exit
fi

BatteryAlert.sh&

Pastikan bahwa mereka dapat dieksekusi:

chmod u+x $USER/bin/BatteryAlert*

Kemudian jalankan saja perintah berikut:

ln -s /home/$(USER)/bin/BatteryAlertLauncher.sh .config/autostart/

Anda juga dapat menjalankan skrip lansiran secara manual dari bash dengan memasukkan perintah ini:

BatteryAlertLauncher.sh
Bemipefe
sumber
0

Karena saya tidak menginstal Gnome Shell atau Cinnamon, saya tidak bisa membantu langsung karena mengakses sumbernya bisa lebih praktis karena agak mudah menambahkan ekstensi yang belum sempurna dengan JavaScript.

Anda harus membuka:

/usr/share/cinnamon/js/ui/status/power.js

dan cari persentaseText - selanjutnya, Anda harus dapat menambahkan pesan pop-up atau peringatan.

nesyphlopanuri
sumber
Menarik, tidak tahu hal ini ada di javascript. Tapi tidak ada direktori / status dan tidak ada power.js saya dapat menemukan di mana saja di direktori / cinnamon / js.
Travis Reeder
Sudahkah Anda mencoba mencarinya dari root menggunakan:find / -type f -name power.js
nesyphlopanuri
Berlari itu, tidak ada yang ditemukan.
Travis Reeder
0

Ini adalah bagaimana saya melakukannya di Arch linux saya dengan Gnome sebagai DE:

#!/bin/bash

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`

STATUS=$(cat /sys/class/power_supply/ACAD/online)
if [ $battery_level -le 15 ] && [ $STATUS == "0" ]
then
    /usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
fi

Kata ACADdalam STATUS=$(cat /sys/class/power_supply/ACAD/online)akan berubah tergantung pada laptop yang dibuat. Ini digunakan untuk mengetahui apakah pangkuan Anda terhubung ke AC ADapter atau tidak. Beginilah rupa crontab saya:

* * * * * bash <path to script>

Jangan lupa untuk membuat skrip dapat dieksekusi chmod u+x <path to script>

daltonfury42
sumber
0

Yang sederhana ini bekerja dengan baik untuk saya, dengan hanya acpipaket sederhana yang perlu diinstal (tidak ada diaken, lingkungan desktop tertentu atau sejenisnya).

Di crontab pengguna Anda ( crontab -e) letakkan yang berikut (semuanya dalam satu baris, terbagi untuk dibaca di sini):

*/3 * * * * acpi --battery | 
    awk -F, '/Discharging/ { if (int($2) < 15) print }' | xargs -ri 
    env DISPLAY=:0 zenity --warning --text "battery low\n{}"

Apa yang dilakukannya adalah memeriksa level baterai ( acpi --battery) dan jika Anda tidak terhubung ke pengisi daya ( /Discharging/) dan jika baterai < 15%, itu akan setiap 3 menit ( */3) menampilkan pesan melalui zenitybug Anda.

Alih-alih zenity, Anda dapat menggunakan xmessage(pada mesin yang benar-benar sederhana) atau bahkan sesuatu seperti aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavuntuk pemberitahuan audio (yang memiliki keuntungan bahwa itu tidak akan mengganggu pengetikan keyboard Anda, dan akan bekerja bahkan untuk laptop multi-pengguna dengan banyak sesi, di mana DISPLAY=:0hack akan gagal)

Jika Anda juga perlu menangguhkan / hibernasi mesin pada tingkat kritis tertentu, lihat jawaban ini

Matija Nalis
sumber
0

Unduh applet bernama BAMS. Ini akan mengingatkan Anda secara otomatis ketika baterai mencapai tingkat tertentu yang Anda tentukan. Ini adalah solusi paling sederhana.

Pranay Saraiwala
sumber
0

Dengan bantuan semua informasi dari semua jawaban di sini, saya membuat skrip dan memasukkannya ke dalam repositori di GitLab.

Ini akan menampilkan notifikasi ketika:

  • Kabel Anda dicabut dan baterai berada di bawah 30%
  • Kabel Anda terhubung dan baterai berada di atas 80%

https://gitlab.com/gitaarik/battery-health-notifications

Kontribusi untuk membuatnya bekerja pada lingkungan yang lebih luas sangat disambut baik.

Script pada saat penulisan ini:

#!/bin/bash

# Run this script as a cronjob every 5 minutes or so, to get notifications when
# battery percentage goes below 30% or above 80%.
# Cronjob line example:
# */5 * * * * /bin/bash /path/to/battery_health_notifications.sh

# This line is to make notify-send always work, also when run in a crontab.
# https://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab/346580#346580
export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '\0' '\n')

BATTERY_PATH=$(upower -e | grep battery)
LINE_POWER_PATH=$(upower -e | grep line_power)
BATTERY_PERCENTAGE=$(upower -i $BATTERY_PATH | grep 'percentage:' | awk '{ print $2 }' | sed 's/%//')
CABLE_PLUGGED=$(upower -i $LINE_POWER_PATH | grep -A2 'line-power' | grep online | awk '{ print $2 }')

if [[ $CABLE_PLUGGED == 'yes' ]]; then

    if [[ $BATTERY_PERCENTAGE -gt 80 ]]; then
        notify-send --urgency=critical "Battery optimization" "Battery reached 80%, unplug the power cable to optimize battery life."
    fi

else

    if [[ $BATTERY_PERCENTAGE -lt 30 ]]; then
        notify-send --urgency=critical "Battery optimization" "Battery is below 30%, plug in the power cable to optimize battery life."
    fi

fi
gitaarik
sumber