Запустить скрипт при пробуждении?
Есть ли способ запустить скрипт, когда компьютер "просыпается" (из спящего режима)? Я знаю, что это можно сделать при запуске, но проблема в этом случае заключается в том, что подсветка моего ноутбука сбрасывается каждый раз, когда он просыпается, и в идеале мне бы хотелось, чтобы скрипт позаботился о его включении. до разумного уровня, вместо того, чтобы вводить его каждый раз вручную.
4 ответа
pm-utils предоставляет кучу сценариев, которые запускаются в режиме сна / возобновления, вы можете добавить свой сценарий туда, но вам нужно быть осторожным, так как сбой, скорее всего, сломает резюме. Смотреть в /usr/lib/pm-utils/sleep.d
вот где сценарии, вы можете посмотреть на сценарий под названием 95led
поскольку это довольно просто и будет хорошей моделью для начала.
95led предоставляет случаи гибернации / приостановки и оттаивания / возобновления. Если вам нужно только резюме, вы должны написать свой сценарий так:
#!/bin/sh
case "$1" in
resume)
echo "hey I just got resumed!"
run_some_command
esac
Ваш скрипт, вероятно, должен запускаться последним, поэтому убедитесь, что он отображается последним в каталоге, возможно, назовите его 99ZZZ_myscript или что-то в этом роде. Опять же, если вы не уверены, что делаете здесь, я бы не стал с этим связываться. Вы можете в конечном итоге нарушить приостановить / возобновить. Если это произойдет, вы можете удалить сценарий или исправить его, но вам придется выполнить жесткий цикл питания, чтобы восстановить работоспособность вашей системы.
Там также может быть более простой способ, но я знаю, что этот метод будет работать.
В 15.04, Vivid, вам нужно разместить свои скрипты в:
/lib/systemd/system-sleep/
Пример сценария, основанного на одном из вики Arch ( 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
Больше подробностей.
Там нет необходимости sudo
так как ваш скрипт будет запускаться от имени root.
примечание: вики-ссылка Arch на тему ( системные зацепки) указывает (неверно для 15.04), что вы должны поместить свои скрипты в /usr/lib/systemd/system-sleep/
, но это не будет работать в Ubuntu 15.04. Поместите ваши сценарии в /lib/systemd/system-sleep/
если вы работаете 15.04.
Поскольку у меня недостаточно репутации, чтобы писать комментарии, я перепишу решение от mfisch, добавив ответ для Lindh-E:
РЕШЕНИЕ:
pm-utils предоставляет несколько сценариев, которые запускаются в режиме сна / резюме.
Что вам нужно, это:
- Создайте скрипт с именем 99MyScript.sh (99 позволяет запускать его после других скриптов)
- Добавьте ваш скрипт в /usr/lib/pm-utils/sleep.d
- Назначить право выполнения: sudo chmod + x /usr/lib/pm-utils/sleep.d/99MyScript.sh
- Попробуй это:)
ВНИМАНИЕ:
вам нужно быть осторожным, так как сбой, скорее всего, сломает резюме. Если система дает сбой или зависает, вы можете удалить сценарий или исправить его, но вам придется выполнить полный цикл питания, чтобы восстановить работоспособность вашей системы.
ПРИМЕР:
Посмотрите существующие скрипты в /usr/lib/pm-utils/sleep.d. Скрипт под названием 95led довольно прост и будет хорошей моделью для начала. 95led предоставляет случаи гибернации / приостановки и оттаивания / возобновления. Если вам нужно только резюме, вы должны написать свой сценарий так:
#!/bin/sh
case "$1" in
resume)
echo "hey I just got resumed!"
run_some_command
esac
Это не отдельный отдельный ответ, но поскольку я не могу комментировать (из-за ограничения репутации), я просто хотел бы добавить важное дополнение к ответу mfisch, которое также сработало для меня.
Обратите внимание, что HOME
а также PATH
(и, возможно, другие переменные среды), вероятно, не будут такими же, как ваша обычная оболочка. У меня были проблемы с решением mfisch, которое, по-видимому, не работало для сценариев, которые мне нужно было выполнить при возобновлении, но оказалось, что это были мои сценарии по вине, так как они ожидали HOME
быть установленным в мой каталог пользователя (я один пользователь в моей системе) и для PATH
включать /usr/local/bin
и в момент возобновления ничего из этого не гарантируется (и в случае HOME
возможно нецелесообразно). Поэтому вам, возможно, придется адаптировать свои скрипты / программы, чтобы они не зависели от этих env-vars...