Я пытаюсь записать сценарий для своей системы Ubuntu для спящего режима, каждый раз, когда сумма оставленной батареи (говорят) 5%. Этот сценарий будет работать на запуске.
Я могу добраться, батарея оставила использование
upower -d |grep perc
Затем я хочу использовать
sudo pm-hibernate
каждый раз, когда батарея достигает <= 5%. Но это требует разрешения суперпользователя. И я не ХОЧУ ВВОДИТЬ ПАРОЛЬ СНОВА И СНОВА ПОСЛЕ КАЖДОГО ВХОДА В СИСТЕМУ.
Один путь состоит в том, чтобы использовать, добавляет следующая строка в/etc/sudoers
yourlogin ALL=(ALL) NOPASSWD: command_here
Но большинство людей рекомендует против этого.
Иначе должен включить пользовательский сценарий запуска /etc/init.d
. Но я не уверен, является ли это безопасным выбором.
Кроме того, есть ли какая-либо другая альтернатива, которая была бы лучшей для моей цели?
Проще, чем добавить сценарий в init.d
, - это написать конфигурацию Upstart. Я бы предпочел это. Создайте файл .conf
в / etc / init
(скажем, /etc/init/sleep-on-suspend.conf
, содержащий:
description "Automatic suspend"
start on runlevel [2345]
stop on runlevel [016]
exec /path/to/script
Это будет автоматически запускаться при перезагрузке.
Вы даже можете интегрировать сценарий в этот файл. Вместо строки exec
используйте:
script
while sleep 1; do
upower -d | awk -F'[ %]*' '/perc/ && ($3 < 5) { exit 1 }' || pm-hibernate
done
end script
Запустите sudo crontab -e -u root
и добавьте строку @reboot / path / to / script
в конец файла, тогда пользователь root автоматически запустит ваш скрипт как root при входе в систему. И дружеское напоминание о том, что никто, кроме вас и root, не может получить доступ к скрипту, иначе люди могут запускать любую команду как root.
Этот сценарий запускается при запуске.
Если вы действительно имеете в виду это, то вы уже говорите о привилегиях root.
Как выглядит остальная часть вашего сценария? Мы не можем судить о безопасности или ее отсутствии по изолированным командам.
Другой альтернативой было бы запускать ее, скажем, каждые 5 минут из root
crontab
. Если вы боитесь последствий для безопасности, вы можете создать специального пользователя с ограниченными привилегиями, за исключением управления питанием.
Добавьте это в новый файл:
*/5 * * * * root /usr/local/sbin/hibernate-on-power-low
(где, возможно, root
можно заменить на выделенный пользователь, если хотите) и установите его в /etc/cron.d/hibernate-maybe
. Очевидно, что сценарий, выполняющий реальную работу, должен быть установлен в / usr / local / sbin / hibernate-on-power-low
и должным образом проверен на безопасность и эффективность (возможно, использование прямого интерфейса ядра будет быть более надежным и эффективным, чем grep
) и, очевидно, если вы уже работаете с соответствующими привилегиями, вам не понадобится sudo
для запуска pm-hibernate
. 11113857]
Другой альтернативой является использование sudo -S
(что тоже небезопасно).
-S
переключатель sudo
] прочитает пароль из STDIN. Итак, вы можете использовать его так:
echo 'password' | sudo -S <command>