Làm cách nào tôi có thể nhận được cảnh báo khi pin của tôi sắp chết trong Linux Mint?


31

Điều này xảy ra với tôi nhiều hơn là tôi muốn thừa nhận, nhưng đôi khi tôi không nhận thấy năng lượng bị giảm vì nó chỉ hiển thị trên thanh trạng thái của tôi, sau đó máy tính sẽ thoát. Tôi muốn một cảnh báo lớn cảnh báo tôi trước khi điều này xảy ra. Có cách nào để nó cảnh báo tôi không? Ubuntu có một cửa sổ bật lên đẹp cho bạn biết nó đang ở mức thấp.


Định cấu hình trình quản lý năng lượng từ môi trường máy tính để bàn của bạn để thực hiện "một cái gì đó" - điều này thường có thể từ "không có gì", qua "chạy lệnh", đến "ngủ đông" / "tắt nguồn".
peterph

Môi trường máy tính để bàn nào?
Renan

1
@peterph Tôi chỉ có các tùy chọn "Tắt nguồn" và "Ngủ đông".
Travis Reeder

@Renan chạy quế.
Travis Reeder

@TravisR xin lỗi, tôi muốn nói là định cấu hình hành vi khi đạt đến mức pin quan trọng
peterph

Câu trả lời:


26

viết kịch bản!

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

sau đó cron nó để chạy cứ sau vài phút. Nhưng vâng, nếu bạn có thể làm điều đó thông qua GUI, đó có lẽ là cách tốt hơn nhiều để làm điều đó.


Phương pháp này có ưu điểm là nó sẽ áp dụng cho bất kỳ sự kết hợp môi trường distro / desktop nào với một chút điều chỉnh.
Perkins

Cách tốt nhất mà tôi đã tìm thấy để 'thực hiện thông qua GUI' trong môi trường Cinnamon của mình là thêm một applet vào bảng điều khiển: unix.stackexchange.com/a3533505/37552
Michael Scheper

7

re: câu trả lời của hdgarrood, thiết lập cronđể chạy notify-sendthực sự hóa ra rất khó khăn. (Tôi nghĩ rằng crontab -evẫn tồn tại trên các lần khởi động lại theo mặc định, may mắn thay). Tôi đã làm theo một số hướng dẫn, tôi không chắc chắn chính xác những gì đã sửa nó cuối cùng, nhưng đây là thiết lập đầy đủ của tôi để chạy trình kiểm tra cứ sau 5 phút:

$ 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

Hãy chắc chắn với chmod +xcác tập lệnh bash.


5

Bây giờ tôi chạy như sau:

$ 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

Như bạn có thể thấy đây chỉ là mã orangenarwhals với một số thay đổi:

  • không có mánh khóe lừa đảo, bằng cách nào đó tôi không cần nó
  • đặt một số "hằng" vào các biến ở đầu mã
  • chỉ thực hiện cảnh báo khi pin không được sạc (hãy xem man test, nó giải thích cách thực hiện AND, trong số những thứ khác.)
  • biểu tượng đã thêm (tìm một số ứng cử viên trên hệ thống của bạn với nội dung như $ find /usr/share/icons/ -iname "*batt*low*":)
  • thời gian hết hạn tính bằng mili giây

đừng quên chmod +xtập lệnh của bạn, sau đó bạn có thể chạy chúng trực tiếp từ cron (tab), không cần sh.

(Điều này hoạt động trên Ubuntu bằng Xmonad.)


3

Vì rõ ràng bạn đang chạy Cinnamon, chỉ cần cài đặt Pin Applet với Giám sát và Tắt máy (BAM) .

Nhấp chuột phải vào bảng điều khiển → + Thêm Applet vào Bảng điều khiểnCác applet có sẵn (trực tuyến) , nhập 'BAM' trong tiện ích tìm kiếm và cài đặt và định cấu hình nó.

Nó không phải là nhanh nhất, nhưng cho đến nay nó đã cảnh báo tôi khi tôi vô tình tháo laptop.


2

Vòng xoắn nhỏ - trên Knoppix (được cấp, không phải Mint như được sử dụng bởi OP) không có sẵn (gói libnotify-bin không được cài đặt), vì vậy thay vào đó tôi thấy điều này hữu ích cho cảnh báo:

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

Tôi vừa ném nó vào Lệnh báo động của bảng điều khiển Pin Monitor của LXDE, không cần kịch bản.

Điều đó giả định rằng bạn đã cài đặt LibreOffice, nhưng .wav tạo ra âm thanh công suất thấp. Thực tế không có .ogg's trên Knoppix.


1
người ta cũng có thể đẹp hơn zenitythay vì xmesssageaplaythay vìmplayer
Matija Nalis

1

Tôi đã có cùng một vấn đề và tôi đã tìm ra một cách giải quyết. Tôi đã cài đặt từ kho Linux Mint một ứng dụng có tên GKrellM. Nó giám sát rất nhiều thứ trên máy của bạn và có pin. Thiết lập với báo động, nó hoạt động đối với tôi như một nét duyên dáng.

thêm thông tin tại:

http://www.gkrellm.net/


GKrellM đã không làm việc cho tôi. Nó quá cũ và hệ thống thông báo không hoạt động đúng.
Bemipefe

1

Vấn đề có liên quan ở môi trường KDE. Tôi có cùng vấn đề với MintMAYA KDE_version. Khi tôi làm việc với Mint9_Gnome, một cửa sổ bật lên rất hữu ích xuất hiện khi đạt đến một mức năng lượng thấp nhất định (tự động định cấu hình out_of_the_box trên các bản cài đặt mới). Rất rất khó chịu khi bị từ chối mà không có lời khuyên và không có sự giúp đỡ nào được thành lập thậm chí googling rất nhiều :(


1

Tôi có cùng một vấn đề và nó thực sự bực bội. Tôi đã giải quyết bằng cách sử dụng tập lệnh 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

Tôi đang sử dụng KDE nhưng bạn có thể sử dụng nó với mọi môi trường máy tính để bàn. Bạn không cần phải chạy cái này với tư cách người dùng root hoặc phát điên với cú pháp crontab. Bạn chỉ cần thay đổi âm thanh thông báo nếu bạn muốn cảnh báo âm thanh. Nếu bạn không tự động khởi động tập lệnh khi môi trường máy tính để bàn bắt đầu, hãy đặt tập lệnh vào thư mục $ USER / bin với tập lệnh BatteryAlertLauncher.sh :

#!/bin/bash

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

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

BatteryAlert.sh&

Hãy chắc chắn rằng chúng có thể được thực thi:

chmod u+x $USER/bin/BatteryAlert*

Sau đó, chỉ cần chạy lệnh sau:

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

Bạn cũng có thể chạy tập lệnh cảnh báo theo cách thủ công từ bash bằng cách nhập lệnh này:

BatteryAlertLauncher.sh

0

Vì tôi chưa cài đặt Gnome Shell hoặc Cinnamon, tôi không thể giúp đỡ trực tiếp vì việc truy cập nguồn có thể rất thiết thực vì việc thêm phần mở rộng thô sơ như vậy với JavaScript.

Bạn nên mở:

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

và tìm kiếm phần trăm - sau đó, bạn phải có thể thêm một thông báo hoặc thông báo bật lên.


Thật thú vị, không biết công cụ này có trong javascript. Nhưng không có thư mục / status và không có power.js tôi có thể tìm thấy bất cứ nơi nào trong thư mục / cinnamon / js.
Travis Reeder

Bạn đã thử tìm kiếm nó từ root bằng cách sử dụng:find / -type f -name power.js
nesyphlopanuri

Ran đó, không tìm thấy gì.
Travis Reeder

0

Đây là cách tôi đã thực hiện trên Arch linux của mình với Gnome là 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

Từ ACADtrong STATUS=$(cat /sys/class/power_supply/ACAD/online)sẽ thay đổi tùy thuộc vào máy tính xách tay. Nó được sử dụng để tìm xem đùi của bạn đã được cắm vào AC AD CHƯƠNG hay chưa. Đây là cách crontab của tôi trông như thế nào:

* * * * * bash <path to script>

Đừng quên để tập lệnh thực thi với chmod u+x <path to script>


0

Cái đơn giản này hoạt động độc đáo đối với tôi, chỉ với acpigói đơn giản cần thiết để cài đặt (không có deamons, môi trường máy tính để bàn cụ thể hoặc tương tự).

Trong người dùng của bạn, crontab ( crontab -e) đặt các mục sau (tất cả trong một dòng, nó được chia để dễ đọc ở đây):

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

Những gì nó làm là kiểm tra mức pin ( acpi --battery) và nếu bạn không kết nối với bộ sạc ( /Discharging/) và nếu pin là < 15%, cứ sau 3 phút ( */3) sẽ hiển thị thông báo zenityđể thông báo lỗi cho bạn.

Thay vì tiện lợi, bạn có thể sử dụng xmessage(trên máy spartan thực sự) hoặc thậm chí một cái gì đó như aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavthông báo âm thanh (có lợi thế là nó sẽ không làm gián đoạn việc gõ bàn phím của bạn và sẽ hoạt động ngay cả đối với máy tính xách tay nhiều người dùng với nhiều phiên, trong đó DISPLAY=:0hack Sẽ thất bại)

Nếu bạn cũng cần tạm dừng / máy ngủ đông ở mức quan trọng nhất định, hãy xem câu trả lời này


0

Tải về một applet có tên BAM. Nó sẽ tự động cảnh báo bạn khi pin đạt đến một mức nhất định do bạn quyết định. Đó là giải pháp đơn giản nhất.


0

Với sự giúp đỡ của tất cả các thông tin từ tất cả các câu trả lời ở đây, tôi đã tạo ra một tập lệnh và đưa nó vào một kho lưu trữ trên GitLab.

Nó sẽ hiển thị thông báo khi:

  • Cáp của bạn được rút ra và pin xuống dưới 30%
  • Cáp của bạn đã được cắm và pin vượt quá 80%

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

Đóng góp để làm cho nó hoạt động trên một phạm vi rộng hơn của môi trường rất đáng hoan nghênh.

Kịch bản tại thời điểm viết này:

#!/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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.