これは私が認める以上に起こりますが、ステータスバーにしか表示されないために電力が低下していることに気付かない場合があり、その後コンピュータが終了します。これが発生する前に警告する大きなアラートが必要です。警告する方法はありますか? Ubuntuには、低くなっていることを示すNiceポップアップがあります。
スクリプトを書いてください!
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を使用して実行できる場合は、おそらくそれがはるかに優れた方法です。
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
bashスクリプト。
私は今以下を実行します:
$ 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コードです。
man test
を参照してください。特に、ANDを行う方法を説明しています)。$ find /usr/share/icons/ -iname "*batt*low*"
)スクリプトをchmod +x
することを忘れないでください。それから、それらをcron(tab)から直接実行できます。sh
は必要ありません。
(これはXmonadを使用してUbuntuで動作します。)
どうやらCinnamonを実行しているので、インストール 監視とシャットダウン(BAMS)を備えたバッテリーアプレット をインストールするだけです。
パネルを右クリック→+アプレットをパネルに追加→利用可能なアプレット(オンライン)、検索ウィジェットに「BAMS」と入力し、インストールして設定します。
これは最も派手なものではありませんが、今のところ、ノートパソコンを無意識のうちに外しておくと、警告が表示されます。
マイナーツイスト-Knoppix(OPで使用されるMintではなく、許可)のnotify-sendが利用できなかった(libnotify-binパッケージがインストールされていない)ため、代わりにアラートにこれが便利であることがわかりました。
xmessage Battery low & mplayer /usr/lib/libreoffice/share/gallery/sounds/beam.wav
LXDEのバッテリーモニターパネルのアラームコマンドにそれを投げ込みました。スクリプトは必要ありません。
これは、LibreOfficeがインストールされていることを前提としていますが、.wavを使用すると、ニースの低電力サウンドが得られます。 Knoppixには実質的に.oggはありません。
同じ問題があり、回避策を見つけました。 Linux MintリポジトリからGKrellMというアプリをインストールしました。それはあなたのマシン上の多くのものを監視し、バッテリーがあります。アラーム付きのセットアップ、それは魅力のように私のために働きます。
詳細:
私は同じ問題を抱えており、それは本当にイライラさせられます。 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構文に夢中になる必要はありません。サウンドアラートが必要な場合は、通知音を変更するだけで済みます。デスクトップ環境の起動時にスクリプトを自動的に開始しない場合は、スクリプトを$ 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/
次のコマンドを入力して、bashから手動でアラートスクリプトを実行することもできます。
BatteryAlertLauncher.sh
この問題はKDE環境に関連しています。 MintMAYA KDE_versionにも同じ問題があります。 Mint9_Gnomeで作業していると、一定レベルの低電力に達したときに非常に便利なポップアップが表示されました(新規インストールで自動構成されたout_of_the_box)。アドバイスなしでシャットダウンされて非常に迷惑であり、多くのググリングさえも助けなしで設立されました:(
私はGnome ShellやCinnamonをインストールしていないので、JavaScriptを使用してそのような基本的な拡張機能を追加するのはかなり簡単なので、ソースにアクセスすることは非常に実用的である可能性があるため、直接の助けにはなりません。
開く必要があります:
/usr/share/cinnamon/js/ui/status/power.js
そしてpercentageText-を検索します。その後、ポップアップメッセージまたは警告を追加できるはずです。
ここですべての回答からのすべての情報を利用して、スクリプトを作成し、それをGitLabのリポジトリーに配置しました。
次の場合に通知が表示されます。
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
これは、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
_
STATUS=$(cat /sys/class/power_supply/ACAD/online)
内のACAD
は、ラップトップのメーカーによって異なります。ラップがACアダプターに接続されているかどうかを確認するために使用されます。ここに私のcrontabがどのように見えるかです:
_* * * * * bash <path to script>
_
_chmod u+x <path to script>
_でスクリプトを実行可能にすることを忘れないでください
BAMSというアプレットをダウンロードします。バッテリーがあなたによって決定された特定のレベルに達すると、自動的に警告します。これが最も簡単なソリューションです。
この単純なものは私にとってはうまく機能し、単純な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
_ハックが失敗する、複数セッションのマルチユーザーラップトップの場合)
特定の重要なレベルでマシンをサスペンド/ハイバネートする必要がある場合は、 この答え を参照してください