Linux Mint에서 배터리가 곧 방전 될 때 경고를 받으려면 어떻게해야합니까?


31

이것은 내가 인정하고 싶은 것보다 더 많이 발생하지만 때로는 상태 표시 줄에만 표시되기 때문에 전원이 부족하다는 것을 알지 못하는 경우 컴퓨터가 종료됩니다. 이 일이 발생하기 전에 경고하는 큰 경고를 원합니다. 나에게 경고 할 수있는 방법이 있습니까? 우분투에는 팝업이 낮아지고 있다는 것을 알려주는 멋진 팝업이 있습니다.


"무언가"를 수행하도록 데스크탑 환경에서 전원 관리자를 구성하십시오. 일반적으로 "없음", "명령 실행", "최대 절전"/ "전원 끄기"까지 다양합니다.
peterph

어떤 데스크탑 환경?
Renan

1
@peterph "전원 끄기"및 "최대 절전 모드"옵션 만 있습니다.
트래비스 Reeder 보낸

@Renan은 시나몬을 실행합니다.
트래비스 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를 통해 할 수 있다면 아마도 훨씬 더 나은 방법 일 것입니다.


이 방법은 약간의 조정만으로 거의 모든 배포판 / 데스크톱 환경 조합에 적용 할 수 있다는 이점이 있습니다.
Perkins

Cinnamon 환경에서 'GUI를 통해 수행'하는 가장 좋은 방법은 패널에 애플릿을 추가하는 것입니다. unix.stackexchange.com/a/353505/37552
Michael Scheper

7

다시 : 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 +xbash 스크립트 를 확인하십시오 .


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했습니다.
  • 아이콘 추가 (시스템에서 다음과 같은 후보를 찾습니다. $ find /usr/share/icons/ -iname "*batt*low*")
  • 밀리 초 단위의 만료 시간

chmod +x스크립트를 잊지 말고 cron (tab)에서 직접 실행할 수 있습니다 sh.

(이것은 Xmonad를 사용하여 우분투에서 작동합니다.)


3

Cinnamon을 실행하고 있으므로 BAMS (Monitoring and Shutdown)를 사용 하여 Battery Applet을 설치하십시오 .

패널을 마우스 오른쪽 단추로 클릭하고 → + 애플릿을 패널에 추가사용 가능한 애플릿 (온라인) 을 클릭하고 검색 위젯에 'BAMS'를 입력 한 후 설치 및 구성하십시오.

가장 화려하지는 않지만 지금까지 노트북을 실수로 뽑았을 때 이미 경고했습니다.


2

Knoppix (OP에서 사용하는 것처럼 Mint가 아닌 부여됨) 알림 전송을 사용할 수 없었으므로 (libnotify-bin 패키지가 설치되어 있지 않음) 대신 경고에 유용한 것으로 나타났습니다.

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

방금 스크립트가 필요없는 LXDE의 배터리 모니터 패널의 알람 명령에 던졌습니다.

LibreOffice가 설치되어 있다고 가정하지만 .wav는 저전력 사운드를 멋지게 만듭니다. Knoppix에는 실제로 .ogg가 없습니다.


1
하나는 더 좋은있을 수 있습니다 zenity대신 xmesssage하고 aplay대신mplayer
마티 Nalis

1

나는 같은 문제가 있었고 해결 방법을 찾았습니다. Linux Mint 저장소에서 GKrellM이라는 앱을 설치했습니다. 컴퓨터의 많은 것들을 모니터링하고 배터리가 있습니다. 알람으로 설정하면 매력처럼 작동합니다.

더 많은 정보 :

http://www.gkrellm.net/


GKrellM은 나를 위해 일하지 않았다. 너무 오래되어 알림 시스템이 제대로 작동하지 않습니다.
Bemipefe

1

이 문제는 KDE 환경과 관련이 있습니다. MintMAYA KDE_version과 동일한 문제가 있습니다. Mint9_Gnome으로 작업 할 때 특정 수준의 저전력에 도달했을 때 매우 유용한 팝업이 나타났습니다 (새로 설치하면 out_of_the_box 자동 구성). 매우 성가신 것은 조언없이 종료되고 많은 인터넷 검색을 설립하는 데 도움이되지 않았습니다.


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를 사용하고 있지만 모든 데스크탑 환경에서 사용할 수 있습니다. 루트 사용자로 이것을 실행하거나 crontab 구문에 열중하지 않아도됩니다. 경고음을 원할 경우 알림 소리 만 변경하면됩니다. 데스크탑 환경이 시작될 때 스크립트를 자동으로 시작하지 않으 려면 BatteryAlertLauncher.sh 스크립트를 사용하여 스크립트를 $ USER / bin 폴더에 넣으십시오 .

#!/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/

다음 명령을 입력하여 bash에서 경고 스크립트를 수동으로 실행할 수도 있습니다.

BatteryAlertLauncher.sh

0

Gnome Shell 또는 Cinnamon이 설치되어 있지 않으므로 JavaScript를 사용하여 기본적인 확장 기능을 쉽게 추가 할 수 있기 때문에 소스에 액세스하는 것이 훨씬 실용적이기 때문에 직접적인 도움이 될 수 없습니다.

당신은 열어야합니다 :

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

및 검색 percentageText - 그 후, 당신은 팝업 메시지 또는 경고를 추가 할 수 있도록해야한다.


흥미롭고,이 물건이 자바 스크립트인지 몰랐습니다. 그러나 / status 디렉토리와 power.js는 없습니다. / cinnamon / js 디렉토리의 어느 곳에서나 찾을 수 있습니다.
Travis Reeder

다음을 사용하여 루트에서 검색하려고 했습니까?find / -type f -name power.js
nesyphlopanuri

아무것도 찾지 못했습니다.
트래비스 리드

0

이것이 Gnome을 DE로 사용하여 Arch Linux에서 수행 한 방법입니다.

#!/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 어댑터에 연결되어 있는지 여부를 찾는 데 사용됩니다. 내 crontab의 모양은 다음과 같습니다.

* * * * * bash <path to script>

스크립트를 실행 파일로 실행하는 것을 잊지 마십시오 chmod u+x <path to script>


0

이 간단한 acpi것은 설치해야 할 간단한 패키지 (담당자, 특정 데스크탑 환경 등)가 없어도 나에게 잘 작동합니다 .

사용자 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.