web-dev-qa-db-ja.com

バッテリー残量が少ないときにカスタムサウンドを再生するにはどうすればよいですか?

バッテリー残量が少ないとき(10%など)、コンピューターにカスタムサウンドファイルを再生させたい。これどうやってするの?ありがとう

13
vyb

自分のcrontab -eジョブを設定するためにこのページのアドバイスを使用したので、返信したかっただけです。

私はLubuntu(trusty)を実行していますが、上記はうまくいきませんでしたが、少し調整してみました。私の(経験)レベルは、基本的なスクリプトとコマンドを読むことは比較的可能ですが、Linux distoでは最初からそれらを書くことができないことです。動作中のバッテリーアラームを一緒にまとめることができれば、これを読んでいるほとんどの人も同様にできるはずだからです!

SO ....スクリプトと基本的な説明....

上記のGlutanimateとScott Goodgameの投稿によると(みんなありがとう!)、私は基本的に次のことをしました。

mpg123を取得してオーディオを再生できるようにするために

Sudo apt-get install acpi mpg123

コマンドを書き込むために開くファイル:

crontab -e

ファイルの最後に入力するコマンド:

*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi

上記の説明

開始時のアスタリスク

5つのアスタリスクは、コマンドを実行する頻度を表します。

  • 最初の星=分:0-59
  • 2番目の星=時間:0-23
  • 3番目の星=月の日:0-31
  • 4番目の星=月:0-12
  • 5番目の星=曜日:0-6(0は日曜日を意味します)

*/1 * * * *

「これを毎分実行」を意味します。

IF/THEN/FI:

IF [ stuff inside these brackets ] ; THEN do something ; FI

あなたのほとんどは、IF/THENステートメントに精通していると思います。最後のFIは、IFステートメントを終了します

オーディオの再生:

mpg123 /home/andy/Alarm.mp3

これは単純にmpg123を使用して、ホームディレクトリAlarm.mp3にある/home/andy/というファイルを再生します。

バッテリー情報を出力:

acpi -b

これは単にバッテリーの状態を出力します。私のラップトップでは、次のような結果が得られます。

Battery 0: Discharging, 74%, 02:35:18 remaining

awkコマンドへのパイプ

 | awk ' { print ( $(NF-2)-0)}'`  -lt "15"

さて、上記のバッテリーステータスの出力をパイピングし、print秒から2番目の値を(NF-2)上記の例では「74%」です。ただし、「パーセンテージ」-を削除する必要があります。現在の値と値15 -lt "15"を比較します。わかりやすい英語でまとめると、

バッテリーの値が15%未満の場合は、オーディオファイルを再生します

私はそれをいくらか馬鹿にしたことを感謝し、おそらく私の説明を改善できるかもしれませんが、他の誰かがバッテリーにアラームを追加し、ラップトップが突然突然電源を切るのを避ける方法を理解するのに役立つことを願っています!

幸運を!


編集

わかりました...それで、私のラップトップが充電しているとき、

acpi -b

は:

Battery 0: Charging, 35%, 01:04:08 until charged

一方、バッテリーでは

Battery 0: Discharging, 36%, 01:22:36 remaining

したがって、最初に述べたパラメータを使用して

print ( $(NF-2)-0)

nF-valueビットは、出力の最後から表示するアイテムの数を指定するため、バッテリーの出力ではの

Battery 0: Discharging, 36%, 01:22:36 remaining

$(NF-2)は「36%」を出力しますが、ラップトップを充電すると、

Battery 0: Charging, 35%, 01:04:08 until charged

$(NF-2)は「00:50:12」、つまり充電されるまでの残り時間を出力します。

$(NF-2)の後の-0は値からゼロを引いているため、値がパーセントの場合、-0は'36% 'から' 36 'のように変更します。上記の'01:04:08 'の時間出力のように、出力値が非数値として認識される場合、-0が返す値は' 0 'です。だから、私の問題を見ることができます-私のラップトップが充電されているとき、出力値は常に「0」です。出力値が15未満のときにアラームを再生したいので、充電時に1分ごとにオフになるバッテリーアラームに変換されます!

awkコマンドの出力をもう少し読んでみると、最後から2番目の値を読み取る必要はなく、出力の最初から始めて前にスキップすることができました。これは、バッテリーの状態がパラメーターの数の点で充電中またはバッテリー上で同じであるため、はるかに優れています。つまり、最初から4番目のパラメーターは常にパーセント単位の充電値です。

SO ... 4番目の値を読み取るには、コマンドが

awk ' { print ($(NF-2)-0)}'

awk ' { print ($4)-0}'

またはその栄光の中で:

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi

繰り返しますが、それが誰かの助けになることを願っています!読んでくれてありがとう!


ボーナス編集

さて、少し追加して、アラームを再生する前に音量を100%に設定してミュートを解除する方法も考えました-それに直面してみましょう、あなたが聞こえないので聞こえない場合のバッテリーアラームのポイントは何ですか?音量を低く設定するかミュートしましたか?!

とにかく、必要なコマンドは次のとおりです。

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi

ご覧のとおり、私が行ったことはコマンド文字列を挿入することだけです

pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&

&&は複数のコマンドを結合するだけです)

繰り返しますが、幸運を祈ります!

最終編集

さて、最後の1つ(できれば!)の編集...明らかに、パーセント記号は、cronタスクを実行するときの特別な記号です。したがって、各\の前にバックスラッシュ(%)を置くことで、パーセント記号を「エスケープ」する必要があります。これにより、シェルによって(誤)解釈されません。

だから基本的に交換

100%

100\%

したがって、本当に必要なコマンドは次のとおりです。

*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'`  -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi

phewそれが私のためにあなたのためにそれをソートすることを願っています!! (最終的に!)

6
Andy Pyne

5/10分ごとにバッテリーの状態をチェックし、バッテリーの割合に応じてサウンドを再生するcronジョブを設定できます。

使用できるサウンドを再生するには

mpg123filename.mp

インストールする

Sudo apt-get install mpg123

コマンドラインからバッテリーステータスを取得するには、このコマンドを使用できます

upower -i /org/freedesktop/UPower/devices/battery_BAT0

grepを使用すると、次のように正確な情報を抽出できます。

upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"

これで、これらすべてをシェルスクリプト(およびバッテリーステータスが10%未満かどうかを確認するif条件)に入れて、このシェルスクリプトのパスをcronジョブに渡すことができます。

5分ごとに(この間隔を変更できます)バッテリーの状態がチェックされ、バッテリーが10%未満の場合、提供されたサウンドファイルが再生されます!

お役に立てれば!

5
Null pointer

これを行う簡単な方法の1つは、crontabに簡単なチェックを追加することです(cronは、バックグラウンドで定期的にユーザー定義に基づいて物事を実行するシステムです)。

まず、バッテリーの状態を読み取ることができるように、コマンドラインmp3プレーヤーとacpiをインストールする必要があります。

ターミナルから次を実行してパッケージをインストールします。

Sudo apt-get install acpi mpg123

次に、ターミナルにいる間にcrontab -eと入力し、ファイルの最後に次を入力します。ユーザーをユーザー名に変更し、.mp3をホームディレクトリのファイル名に変更するだけです。

*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'`  -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3   ;fi

Control-O(文字)とEnterを押して保存します。 Control-xを押して終了します

あなたが読みたいかもしれない余分なもの...

buntu CronHowto

buntuガイド

3
Scott Goodgame

実際には Andy Pyne の答えを使用しましたが、うまくいきませんでした。 cronはコードを実行しましたが、サウンドは再生しませんでした。最後に、私は解決策を見つけて、ここで共有しました:

ステップ1:mpg3をインストールする

Sudo apt-get install acpi mpg123

ステップ2:~/bin/battery_alertに次のコマンドを保存します

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ `acpi -b | awk ' { print ($3)}'`  == "Discharging," ] ; then
    # Discharging
    # Monitor for low battery
    if [ `acpi -b | awk ' { print ($4)-0}'`  -le "15" ] ; then
        pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_low.mp3 ;
    fi
else
    # Charging
    if [ `acpi -b | awk ' { print ($4)-0}'`  -eq "100" ] ; then
        # Fully charged
        pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_full.mp3 ;
    fi
fi

このスクリプトは、ラップトップが放電中で充電が15%以下の場合にbattery_low.mp3を再生します。 (AC電源が接続されている場合、警告は表示されません)。このコードは、料金が100%の場合も警告します。完全に充電された状態のアラートが必要ない場合は、このコードからelse部分を削除してください。

ステップ3:次のコマンドを使用して、ファイルを実行可能にします。

chmod +x ~/bin/battery_alert

ステップ4:crontrab -eコマンドで開いたファイルの最後に次のコマンドを追加して、cronを使用してこのファイルを実行します。

*/5 * * * * /home/user/bin/battery_alert

(このコマンドの後に空の行があることを忘れないでください)

2
Gobinath