Linux Mintでバッテリーが切れそうになっているときにアラートを受け取るにはどうすればよいですか?


31

これは私が認めたい以上に起こりますが、電力がステータスバーにしか表示されず、コンピューターが終了するため、電力が低下していることに気付かないことがあります。これが起こる前に私に警告する大きなアラートが欲しいです。アラートを出す方法はありますか?Ubuntuには、表示数が少なくなっていることを知らせるポップアップがあります。


デスクトップ環境からパワーマネージャを設定して「何か」を実行します。これは通常、「何もしない」から「コマンドを実行する」、「休止状態」/「電源を切る」までの範囲です。
ペテルフ

どのデスクトップ環境ですか?
レナン

1
@peterph「Power off」および「Hibernate」オプションのみがあります。
トラビスリーダー

@Renanがシナモンを実行しています。
トラビスリーダー

@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を使用してそれを行うことができれば、それはおそらくはるかに優れた方法です。


この方法には、わずかな調整で、ほぼすべてのディストリビューション/デスクトップ環境の組み合わせに適用できるという利点があります。
パーキンス

私のCinnamon環境で「GUIで実行」するために見つけた最良の方法は、アプレットをパネルに追加することです: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 +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

ご覧のとおり、これはいくつかの変更を加えたオレンジ色のコードです。

  • dbusトリックはありません、どういうわけか私はそれを必要としませんでした
  • コードの先頭で変数にいくつかの「定数」を入れます
  • バッテリが充電されていない場合にのみ警告を実装しました(man test特に、ANDの実行方法などを説明しています)。
  • 追加アイコン(のようなものを使用して、システム上のいくつかの候補を見つけます:$ find /usr/share/icons/ -iname "*batt*low*"
  • ミリ秒単位の有効期限

chmod +xスクリプトを忘れずに、cronを使用せずにcron(tab)から直接実行できますsh

(これは、Xmonadを使用するUbuntuで機能します。)


3

明らかにCinnamonを実行しているので、Monitoring and Shutdown(BAMS)付きのバッテリーアプレットをインストールするだけです。

パネルを右クリック→ +アプレットをパネルに追加利用可能なアプレット(オンライン)、検索ウィジェットに「BAMS」と入力し、インストールして構成します。

それは最も派手なものではありませんが、これまでのところ、ラップトップを知らずに抜いてしまったときにすでに警告を受けています。


2

マイナーツイスト-Knoppixで(OPで使用されるMintではなく、許可されています)notify-sendが利用できなかった(libnotify-binパッケージがインストールされていない)ため、代わりにこれがアラートに役立つことがわかりました:

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

LXDEのバッテリーモニターパネルのアラームコマンドにそれを投げました。スクリプトは不要です。

LibreOfficeがインストールされていることを前提としていますが、その.wavは素晴らしい低電力サウンドを実現します。Knoppixには.oggはほとんどありません。


1
1はまた、よりよいかもしれないzenityのではなく、xmesssageそしてaplay代わりにmplayer
マティヤNalis

1

同じ問題が発生したため、回避策を見つけました。Linux MintリポジトリからGKrellMというアプリをインストールしました。マシン上の多くのものを監視し、バッテリーがあります。アラーム付きのセットアップ、それは私にとって魅力のように機能します。

詳細情報:

http://www.gkrellm.net/


GKrellMは私には役に立たなかった。古すぎて、通知システムが正しく機能しません。
ベミペフェ

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を使用していますが、すべてのデスクトップ環境で使用できます。これをrootユーザーとして実行したり、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 -その後、あなたはポップアップメッセージまたは警告を追加できるようにするべきです。


興味深いことに、このようなものがjavascriptに含まれていることを知りませんでした。しかし、/ statusディレクトリもpower.jsもありません。/cinnamon/jsディレクトリのどこにでもあります。
トラビスリーダー

あなたが使用してルートからそれを検索してみましたがあります: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)に以下を入力します(ここでは読みやすくするためにすべてを1行に分けています)。

*/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.