電源がプラグインまたはアウトされているときにスクリプトを実行するにはどうすればよいですか?


8

何らかの理由で、電源をプラグインまたはプラグアウトすると、ラップトップの画面の輝度が更新されません。私はその問題のかなりの数の解決策を見てきましたが、どれもうまく機能していないようです。それで、私は絶望してあきらめるのではなく、これを学習体験に変えて、私のためにそれを行うスクリプトを記述できないかどうかを確認することにしました。

もちろん、インターネットの助けを借りて、自分で考え出そうとしましたが、bashスクリプトとUbuntuは一般的にかなり新しいので、遠くまでは行けませんでした。

私は何を把握することができたことは、私ができるということでした、バッテリーの状態を見つけるとを

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

ACアダプターが接続されているかどうかによって異なります。それが便利かどうかはわかりませんgrepが、すごくクールで、以前は使い方がわからなかったので、何を学ぶのが楽しいのでしょうか。

とにかく、これを行うにはいくぶんきれいな方法がありますか?「クリーンな方法」とは、bashスクリプトの経験が限られている方でも理解できる方法を意味します。

私が見つけた同様の質問の1つは、良い答えが得られたというもので、これは次のように述べています。

ACアダプターをプラグイン/アウトする/etc/pm/power.dと、引数が「true」(バッテリーで実行する場合)、または「false」(電源アダプターで実行する場合)でスクリプトが呼び出されます。

問題は、スクリプト内からその引数にアクセスする方法がわからないことです。結局のところ、かなり単純な問題に要約されると思いますが、人々がより良い解決策を持っている場合に備えて、私はとにかく質問を投稿すると思いました。

回答:


5

on_ac_power電源をオンまたはオフにしたときにスクリプトを実行するために使用できます。

ターミナルで以下を試してください。

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

これに基づいて、スクリプトを次のように作成できます。

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

編集: [ KasiyAが推奨 ]

cron job 無限ループを使用する代わりに、スクリプトを定期的に実行することをお勧めします。

スクリプトを名前をmyscript.sh付けて保存し、次のコンテンツをその中に入れます。

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

端末からスクリプトを実行可能にしchmod +x /path/to/myscript.shます。パーソナルcrontabを開きEDITOR=gedit crontab -e、次の行を追加して、毎分スクリプトを実行します。

* * * * * /path/to/myscript.sh 

スクリプトを無限に実行するのは悪い習慣ですか、それとも定期的に発生してシステムに組み込まれていることですか?ある種のトリガーを探していたと思いますが、これが機能する場合、想定していたよりもはるかに複雑ではありません。
Jasper

@TheQZ: 'souravc'が基本的なアイデアを与えてくれたと思います。これに基づいて独自に書くことができます:)
heemayl

@TheQZけれども、それはどのようにするために、質問を見(あなたがチェック時間を増やすことができます)一度だけ、10秒ごとに永遠に実行されますがアクティブになり--コマンドごと-X-インターバルのタイム繰り返し。それ以外の場合は、初心者にとって非常に複雑な独自のデーモンプログラムを作成する必要があります。
souravc 2015

あなたは使用することができます@TheQZ souravcとしての答えをするcronジョブの。第二の部分を参照鉱山のこの回答
αғsнιη

2
より良い方法は、askubuntu.com / questions / 613741 /…のようにudevルールを使用することです
Anthony Wong
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.