Автоматический запуск пользовательских действий при выходе Ubuntu из спящего режима
В этом руководстве показано, как автоматически запускать пользовательские команды, сценарии или другие действия после вывода ПК/ноутбука с Linux из режима ожидания или гибернации.
Как вы, возможно, знаете, существует немало способов автоматически запустить что-либо при запуске Ubuntu. Вы можете использовать утилиту «Запуск приложений» для запуска приложений или пользовательских команд при входе в систему, использовать crontab для планирования заданий запуска, правила udev для автоматической настройки устройств при обнаружении и службу systemd-tmpfiles для автоматического создания. удалить и записать файлы конфигурации.
Но что, если ваш компьютер не работает должным образом или некоторые личные настройки не сохраняются после выхода из сна?
Не дожидаясь исправлений исходной версии, вы можете обойти проблему, создав собственные службы systemd, чтобы автоматически перезапустить функцию или перенастроить параметры и автоматически запускать ее при выходе из спящего режима.
ПРИМЕЧАНИЕ: не только для Ubuntu, это руководство должно работать для большинства Linux, использующих systemd, включая Debian, Linux Mint, Fedora, Arch и системы на их основе.
Создание действий пробуждения для корня/системы
1. Создайте служебный файл systemd, выполнив приведенную ниже команду в окне терминала (для Ubuntu нажмите Ctrl+Alt+T).
sudo gnome-text-editor /etc/systemd/system/fan-resume.service
Здесь я использую gnome-text-editor
для создания (и редактирования) файла fan-resume.service
в каталоге /etc/systemd/system
. .
Вы можете заменить текстовый редактор в соответствии со средой вашего рабочего стола, например, использовать mousepad
для XFCE, pluma
для MATE, текстовый редактор командной строки nano
. это работает на большинстве настольных компьютеров и серверов.
В зависимости от того, что вы хотите сделать, вы можете заменить имя файла fan-resume
на любое, какое захотите. Когда файл откроется в текстовом редакторе, добавьте следующие строки и отредактируйте их соответствующим образом:
[Unit]
Description=Resume fan speed after waking up
After=suspend.target
[Service]
Type=simple
ExecStart=/usr/bin/bash -c "echo level 1 | tee /proc/acpi/ibm/fan"
[Install]
WantedBy=suspend.target
Строки выше указывают на запуск службы после выхода из режима ожидания. Вы можете заменить 2 suspend.target на:
hibernate.target
,hybrid-sleep.target
,suspend-then-hibernate.target
,- или используйте
sleep.target
, который работает для выхода из всех состояний сна, указанных выше.
Когда он срабатывает, он запускает echo level 1 | tee /proc/acpi/ibm/fan
в моем случае в оболочке bash с правами root, чтобы установить скорость вентилятора моего Thinkpad на уровень 1.
Вам необходимо заменить значение «ExecStart» пользовательской командой, сценарием или другими действиями, например перезапустить службу с помощью:
ExecStart=/usr/bin/systemctl restart xxx.service
2. Включите службу. После сохранения файла выше (для nano нажмите Ctrl+S, чтобы сохранить, затем Ctrl+X, чтобы выйти), выполните команду ниже, чтобы включить службу:
sudo system enable --now fan-resume.service
Здесь замените имя службы fan-resume
в соответствии с тем, что вы создали.
Опция --now
в приведенной выше команде попытается запустить действие службы сразу. Это полезно для целей отладки, хотя вы можете пропустить это.
И запустите команду ниже, чтобы проверить состояние службы.
sudo system status fan-resume.service
Если служба загружена и включена (хотя и неактивна) без каких-либо ошибок, вы можете приостановить работу компьютера, а затем возобновить работу, чтобы проверить, работает ли он.
Для действий только пользователя:
Некоторые действия необходимо выполнять от имени пользователя, а не root. Например, перезапустите службу с флагом --user
или автоматически подключитесь к сети VPN.
1. В этом случае запустите команду в терминале (Ctrl+Alt+T), чтобы создать служебный файл:
sudo gnome-text-editor /etc/systemd/system/[email
Здесь также замените gnome-text-editor
соответственно. И в конце имени файла требуется «@».
Когда файл откроется, добавьте аналогичные строки ниже и отредактируйте их соответствующим образом.
[Unit]
Description=Run my script after 10s delay
After=sleep.target
[Service]
User=%I
Type=simple
ExecStartPre=/usr/bin/sleep 10
ExecStart=/usr/local/bin/myscript.sh
[Install]
WantedBy=sleep.target
В отличие от общесистемного действия, здесь оно включает @ в имени файла и User=%I в содержимом раздела Service. Таким образом, службу можно запустить от имени конкретного пользователя, запустив user-resume@USER_NAME.service
.
2. Чтобы запустить действие только для пользователя ji (замените на своего пользователя), выполните команду, чтобы включить службу:
systemctl enable --now user-resume@ji.service
Затем запустите systemctl status [email
, чтобы проверить, включен ли он без ошибок.
Кроме того, в зависимости от того, какое действие вам нужно выполнить, вам могут потребоваться дополнительные параметры для специальной службы. Подробности смотрите в официальной документации.
Отменить :
Чтобы отменить действия, которые вы сделали выше, сначала откройте терминал (Ctrl+Alt+T) и выполните команду, чтобы отключить службу:
sudo systemctl disable --now xxx.service
В зависимости от того, какую службу вы добавили и включили, замените xxx
в команде на имя службы или имя-службы@имя-пользователя.
После отключения службы удалите соответствующий файл, выполнив команду:
sudo rm /etc/systemd/system/xxx.service
Также замените xxx именем созданной вами службы.