ฉันจะได้รับการแจ้งเตือนเมื่อแบตเตอรี่ใกล้จะตายใน Linux Mint ได้อย่างไร


31

สิ่งนี้เกิดขึ้นกับฉันมากกว่าที่ฉันต้องการยอมรับ แต่บางครั้งฉันไม่ได้สังเกตว่ากำลังไฟเหลือน้อยเพราะมันจะปรากฏในแถบสถานะของฉันเท่านั้นจากนั้นคอมพิวเตอร์ก็หยุดทำงาน ฉันต้องการการแจ้งเตือนครั้งใหญ่ที่เตือนฉันก่อนสิ่งนี้จะเกิดขึ้น มีวิธีใดบ้างที่จะเตือนฉัน อูบุนตูมีป๊อปอัพที่ดีที่บอกคุณว่ากำลังเหลือน้อย


กำหนดค่าตัวจัดการพลังงานจากสภาพแวดล้อมเดสก์ท็อปของคุณเพื่อทำ "บางอย่าง" ซึ่งปกติจะอยู่ในช่วงตั้งแต่ "ไม่มีอะไร" มากกว่า "เรียกใช้คำสั่ง" ไปยัง "จำศีล" / "ปิดไฟ"
เตอร์

สภาพแวดล้อมเดสก์ทอปใด
Renan

1
@ peterph ฉันมีตัวเลือก "ปิดเครื่อง" และ "ไฮเบอร์เนต" เท่านั้น
Travis Reeder

@ Renan กำลังเรียกใช้ Cinnamon
Travis Reeder

@TravisR ขอโทษฉันหมายถึงว่าการกำหนดค่าการทำงานเมื่อระดับแบตเตอรี่ที่สำคัญถึง
peterph

คำตอบ:


26

เขียนสคริปต์!

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

จากนั้น cron ให้ทำงานทุกสองสามนาทีหรือมากกว่านั้น แต่ใช่ถ้าคุณทำได้ผ่าน GUI นั่นอาจเป็นวิธีที่ดีกว่ามากในการทำ


วิธีนี้มีข้อได้เปรียบที่จะนำไปใช้กับการรวมกันของสภาพแวดล้อม distro / desktop ใด ๆ กับ tweaking เล็กน้อย
Perkins

วิธีที่ดีที่สุดที่ฉันพบ 'ทำผ่าน GUI' ในสภาพแวดล้อมของ Cinnamon ของฉันคือการเพิ่มแอปเพล็ตลงในพาเนล: unix.stackexchange.com/a/353505/37552
Michael Scheper

7

Re: คำตอบของ hdgarrood การตั้งค่าcronให้ทำงานnotify-sendจริงกลายเป็นจู้จี้จุกจิกเจ็บปวด (ฉันคิดว่าcrontab -eจะยังคงมีการรีบูตตามค่าเริ่มต้นโชคดี) ฉันทำตามคำแนะนำหลายอย่างฉันไม่แน่ใจว่าจะแก้ไขอะไรในท้ายที่สุด แต่นี่คือการตั้งค่าแบบเต็มสำหรับการเรียกใช้ตัวตรวจสอบทุก 5 นาที:

$ 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

ตรวจสอบให้แน่ใจว่าchmod +xสคริปต์ทุบตี


5

ตอนนี้ฉันเรียกใช้ต่อไปนี้:

$ 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

ในขณะที่คุณสามารถเห็นนี้เป็นเพียงรหัส orangenarwhals กับการเปลี่ยนแปลงบางอย่าง:

  • ไม่มีกลอุบาย dbus อย่างใดฉันไม่ต้องการมัน
  • ใส่ "ค่าคงที่" บางส่วนลงในตัวแปรที่จุดเริ่มต้นของรหัส
  • คำเตือนที่มีการใช้งานเฉพาะเมื่อไม่ได้ชาร์จแบตเตอรี่ (ดูที่man testมันจะอธิบายวิธีการทำ ANDs และอื่น ๆ )
  • เพิ่มไอคอน (หาผู้สมัครบางส่วนในระบบของคุณกับสิ่งที่ชอบ: $ find /usr/share/icons/ -iname "*batt*low*")
  • เวลาหมดอายุเป็นมิลลิวินาที

อย่าลืมที่จะchmod +xสคริปต์ของคุณแล้วคุณสามารถเรียกพวกเขาโดยตรงจาก cron (แท็บ) shจำเป็นที่จะต้องไม่มี

(ใช้ได้กับ Ubuntu โดยใช้ Xmonad)


3

เนื่องจากคุณเห็นได้ชัดว่าการทำงานอบเชยเพียงแค่ติดตั้งแบตเตอรี่ Applet กับการตรวจสอบและปิด (BAMS)

คลิกขวาที่พาเนล→ + เพิ่ม Applets ไปที่พาเนลแอปเพล็ตที่มีอยู่ (ออนไลน์)พิมพ์ 'BAMS' ในวิดเจ็ตการค้นหาและติดตั้งและกำหนดค่า

มันไม่ใช่แฟลช แต่จนถึงตอนนี้มันแจ้งเตือนฉันเมื่อฉันถอดปลั๊กแล็ปท็อปโดยไม่เจตนา


2

บิดเล็กน้อย - บน Knoppix (รับไม่ใช่มิ้นที่ใช้โดย OP) การแจ้งเตือนการส่งไม่พร้อมใช้งาน (ไม่ได้ติดตั้งแพ็คเกจ libnotify-bin) ดังนั้นฉันจึงพบว่ามีประโยชน์สำหรับการแจ้งเตือน:

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

ฉันเพิ่งโยนมันเข้าไปใน Alarm Command ของ Battery Monitor ของ LXDE ไม่จำเป็นต้องใช้สคริปต์

นั่นถือว่าคุณติดตั้ง LibreOffice แล้ว แต่. wav ทำเสียงดีต่ำ ไม่มีจริง .ogg's ที่ Knoppix


1
หนึ่งอาจมี nicer zenityแทนxmesssageและaplayแทนmplayer
Matija Nalis

1

ฉันมีปัญหาเดียวกันนั้นและฉันก็หาวิธีแก้ปัญหา ฉันติดตั้งจากที่เก็บ Linux Mint เป็นแอปที่เรียกว่า GKrellM ตรวจสอบสิ่งต่าง ๆ มากมายบนเครื่องของคุณและมีแบตเตอรี่ ตั้งค่าด้วยการเตือนภัยมันใช้งานได้สำหรับฉันเหมือนมีเสน่ห์

ข้อมูลเพิ่มเติมได้ที่:

http://www.gkrellm.net/


GKrellM ไม่ทำงานสำหรับฉัน มันเก่าเกินไปและระบบการแจ้งเตือนทำงานไม่ถูกต้อง
Bemipefe

1

ปัญหาเกี่ยวข้องกับสภาพแวดล้อมของ KDE ฉันมีปัญหาเดียวกันกับ MintMAYA KDE_version เมื่อฉันทำงานกับ Mint9_Gnome ป๊อปอัพที่มีประโยชน์มากจะปรากฏขึ้นเมื่อถึงระดับพลังงานต่ำ (การกำหนดค่าอัตโนมัติ out_of_the_box ในการติดตั้งใหม่) น่ารำคาญมากถูกปิดตัวลงโดยไม่มีคำแนะนำและไม่มีความช่วยเหลือในการก่อตั้งแม้ googling มาก :(


1

ฉันมีปัญหาเดียวกันและมันน่าผิดหวังจริงๆ ฉันแก้ไขโดยใช้สคริปต์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

ฉันใช้ KDE แต่คุณสามารถใช้ได้กับทุกสภาพแวดล้อมเดสก์ทอป คุณไม่จำเป็นต้องเรียกใช้ในฐานะผู้ใช้รูทหรือบ้าไปกับซินแทกซ์ของไวยากรณ์ คุณต้องเปลี่ยนเสียงแจ้งเตือนเฉพาะเมื่อคุณต้องการเสียงเตือน หากคุณไม่ต้องการเริ่มต้นสคริปต์โดยอัตโนมัติเมื่อสภาพแวดล้อมเดสก์ท็อปเริ่มต้นให้สคริปต์ในโฟลเดอร์ $ USER / bin ด้วยสคริปต์BatteryAlertLauncher.sh :

#!/bin/bash

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

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

BatteryAlert.sh&

ตรวจสอบให้แน่ใจว่าสามารถใช้งานได้:

chmod u+x $USER/bin/BatteryAlert*

จากนั้นให้เรียกใช้คำสั่งต่อไปนี้:

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

นอกจากนี้คุณยังสามารถเรียกใช้สคริปต์การแจ้งเตือนด้วยตนเองจากการทุบตีโดยป้อนคำสั่งนี้:

BatteryAlertLauncher.sh

0

เนื่องจากฉันไม่ได้ติดตั้ง Gnome Shell หรือ Cinnamon ฉันจึงไม่สามารถช่วยเหลือได้โดยตรงเนื่องจากการเข้าถึงแหล่งข้อมูลอาจใช้งานได้จริงเพราะมันค่อนข้างง่ายในการเพิ่มส่วนขยายพื้นฐานด้วย JavaScript

คุณควรเปิด:

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

และค้นหาเปอร์เซนต์ข้อความ - ต่อมาคุณควรจะสามารถเพิ่มข้อความป๊อปอัพหรือการแจ้งเตือน


น่าสนใจไม่รู้ว่าสิ่งนี้อยู่ในจาวาสคริปต์ แต่ไม่มีไดเร็กทอรี / status และไม่มี power.js ฉันสามารถค้นหาได้ทุกที่ในไดเร็กทอรี / cinnamon / js
Travis Reeder

มีคุณพยายามที่จะค้นหามันจากรากใช้:find / -type f -name power.js
nesyphlopanuri

วิ่งที่ไม่มีอะไรพบ
Travis Reeder

0

นี่คือวิธีที่ฉันทำกับ Arch linux ของฉันกับ Gnome ในฐานะ 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

คำACADในSTATUS=$(cat /sys/class/power_supply/ACAD/online)จะเปลี่ยนแปลงขึ้นอยู่กับแล็ปท็อปทำ มันถูกใช้เพื่อค้นหาว่าตักของคุณเสียบเข้ากับ AC ADapter หรือไม่ นี่คือลักษณะ crontab ของฉัน:

* * * * * bash <path to script>

อย่าลืมทำให้สคริปต์ใช้งานได้ chmod u+x <path to script>


0

อันนี้ใช้ง่ายเหมาะสำหรับฉันด้วยacpiแพ็คเกจง่ายๆที่ต้องติดตั้ง (ไม่มี deamons, สภาพแวดล้อมบนเดสก์ท็อปที่เฉพาะเจาะจง

ใน crontab ผู้ใช้ของคุณ ( crontab -e) ใส่ต่อไปนี้ (ทั้งหมดในหนึ่งบรรทัดมันถูกแบ่งเพื่อความสะดวกในการอ่านที่นี่):

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

สิ่งที่ต้องทำคือตรวจสอบระดับแบตเตอรี่ ( acpi --battery) และหากคุณไม่ได้เชื่อมต่อกับเครื่องชาร์จ ( /Discharging/) และหากแบตเตอรี่เป็น< 15%% จะมีการแสดงทุก 3 นาที ( */3) แสดงข้อความผ่านzenityเพื่อบั๊กคุณ

แทนที่จะ zenity คุณแทนสามารถใช้xmessage(บนเครื่องสปาร์ตันจริงๆ) หรือแม้กระทั่งสิ่งที่ต้องการaplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavสำหรับการแจ้งเตือนเสียง (ซึ่งมีข้อได้เปรียบที่จะจะไม่ขัดจังหวะการพิมพ์แป้นพิมพ์ของคุณและจะทำงานแม้สำหรับแล็ปท็อปผู้ใช้หลายคนที่มีหลายครั้งที่DISPLAY=:0สับ จะล้มเหลว)

หากคุณต้องระงับ / จำศีลเครื่องในระดับที่สำคัญบางอย่างให้ดูคำตอบนี้


0

ดาวน์โหลดแอปเพล็ตที่ชื่อว่า BAMS มันจะแจ้งเตือนคุณโดยอัตโนมัติเมื่อแบตเตอรี่ถึงระดับที่คุณตัดสินใจ มันเป็นทางออกที่ง่ายที่สุด


0

ด้วยความช่วยเหลือของข้อมูลทั้งหมดจากคำตอบทั้งหมดที่นี่ฉันสร้างสคริปต์และวางไว้ในที่เก็บบน GitLab

มันจะแสดงการแจ้งเตือนเมื่อ:

  • ถอดสายเคเบิลของคุณแล้วแบตเตอรี่เหลือต่ำกว่า 30%
  • สายเคเบิลของคุณเสียบอยู่และแบตเตอรี่ทำงานเกิน 80%

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

การมีส่วนร่วมที่จะทำให้มันทำงานในสภาพแวดล้อมที่กว้างขึ้นนั้นยินดีต้อนรับ

สคริปต์ในขณะที่เขียนนี้:

#!/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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.