web-dev-qa-db-ja.com

ウェイクアップでスクリプトを実行しますか?

コンピューターが(スリープ状態から)「起動」するときにスクリプトを実行する方法はありますか?もちろん、起動時に実行できることはわかっていますが、この場合の問題は、ラップトップのスリープからスリープが解除されるたびにバックライトがリセットされるように見えることです。毎回手動で入力する代わりに、妥当なレベルまで下げます。

41
Eva

pm-utilsは、スリープ/レジュームで実行する一連のスクリプトを提供します。そこにスクリプトを追加できますが、ねじ込むと再開が中断される可能性があるため注意が必要です。 /usr/lib/pm-utils/sleep.dを見てください。これがスクリプトの場所です。95ledというスクリプトは非常にシンプルで、最初から始めるのに適したモデルです。

95ledはhibernate/suspendおよびthaw/resumeのケースを提供します。再開のみが​​必要な場合は、次のようにスクリプトを記述します。

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

スクリプトはおそらく最後に実行されるはずなので、ディレクトリの最後に表示されることを確認してください。99ZZZ_myscriptなどの名前を付けてください。繰り返しますが、ここで何をしているのかわからない場合、私はそれを台無しにしません。中断/再開が中断される場合があります。その場合は、スクリプトを削除するか修正することができますが、ハードパワーサイクルを実行してシステムを復旧する必要があります。

より簡単な方法もあるかもしれませんが、この方法が機能することは知っています。

34
mfisch

15.04 Vividでは、スクリプトを次の場所に配置する必要があります。

/lib/systemd/system-sleep/

Arch wikiのスクリプトに基づくサンプルスクリプト( systemd sleep Hooks ):

#!/bin/sh
case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend action required
    ;;
  post/*)
    echo "Waking up from $2..."
    # Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
    ;;
esac

スクリプトを実行可能にすることを忘れないでください!

Sudo chmod a+x /lib/systemd/system-sleep/your-script

詳細については、man systemd-sleepを参照してください。

スクリプトはrootとして実行されるため、Sudoは必要ありません。

注:件名のArch wikiリンク( systemd sleep hooks )は、スクリプトを/usr/lib/systemd/system-sleep/に配置するように(15.04に対して誤って)記載していますが、これはUbuntu 15.04では機能しません。 15.04を実行している場合は、/lib/systemd/system-sleep/にスクリプトを配置します。

38
SpmP

私はコメントを書くのに十分な評判を持っていないので、Lindh-Eの答えを追加する際にmfischのソリューションを書き直します。

解決策:

pm-utilsは、スリープ/レジュームで実行される一連のスクリプトを提供します。

必要なのは:

  1. 99MyScript.shという名前のスクリプトを作成します(99は他のスクリプトの後に実行できます)
  2. スクリプトを/ usr/lib/pm-utils/sleep.dに追加します
  3. 実行権の割り当て:Sudo chmod + x /usr/lib/pm-utils/sleep.d/99MyScript.sh
  4. 試して :)

警告:

ねじ込むと履歴書が壊れる可能性があるため、注意が必要です。システムがクラッシュまたはフリーズした場合、スクリプトを削除したり修正したりできますが、ハードパワーサイクルを実行してシステムを復旧する必要があります。

例:

/usr/lib/pm-utils/sleep.dにある既存のscriptiを確認します。 95ledと呼ばれるスクリプトは非常にシンプルであり、最初から良いモデルになるでしょう。 95ledはhibernate/suspendおよびthaw/resumeのケースを提供します。再開のみが​​必要な場合は、次のようにスクリプトを記述します。

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac
7
sangorys

これは実際には独立した独立した答えではありませんが、(評判の制限のために)コメントできないため、mfischの答えに重要な補足を追加したいと思います。

HOMEおよびPATH(およびおそらく他の環境変数)は、通常のシェル環境とはおそらく異なることに注意してください。私はmfischのソリューションに問題があり、再開時に実行する必要のあるスクリプトでは機能していないように見えましたが、HOMEがユーザーディレクトリに設定されることを期待していたため、それは私のスクリプトに誤りがあることが判明しました(私は私のシステム上の単一のユーザー)およびPATH/usr/local/binを含むようにし、再開の時点では、どちらも保証されません(HOMEの場合、おそらくお勧めできません)。そのため、これらのenv-varに依存しないようにスクリプト/プログラムを調整する必要があるかもしれません...

6
jamadagni