Как выполнить выключение с помощью команды таймера и заставки в скрипте

Я сделал этот сценарий, когда он будет выполнен, выключит мою систему (через некоторое время) и должен включить заставку.

#!/bin/bash
sudo shutdown -h +30
gnome-screensaver-command -a

В этом сценарии в основном две проблемы.

  1. Он запрашивает пароль (который я не хочу)
  2. После выполнения sudo shutdown -h +30 его не работает gnome-screensaver-command -a

то есть он активирует выключение, но не заставку

Как решить эти проблемы?

2 ответа

Решение

Решение проблемы 1 и 2:

  1. Вам нужно отредактировать свой /etc/sudoers (sudo visudo) файл для добавления соответствующей записи для предоставления пароля sudo разрешение для пользователя, чтобы запустить этот скрипт (не shutdown команда):

    foo spamegg = (root) NOPASSWD: /path/to/script.sh
    

    Вот foo это имя пользователя, spamegg это имя хоста, замените /path/to/script.sh соответственно. Теперь запустите команду как (сделайте скрипт исполняемым):

    sudo /path/to/script.sh
    

    Обратите внимание, что gnome-screensaver-command -a Команда также будет работать как root, если вы не хотите, что вам нужно дать разрешение на пароль sudo shutdown команда для пользователя:

    foo spamegg = (root) NOPASSWD: /sbin/shutdown
    
  2. Вторая проблема связана с тем, что в вашем текущем скрипте gnome-screensaver-command -a будет работать только после завершения shutdown команда. Как shutdown Команда будет фактически выполнена через 30 минут, следовательно, она находится в состоянии блокировки. Чтобы решить это, вы можете положить shutdown команда в фоновом режиме:

    shutdown -h +30 &
    gnome-screensaver-command -a
    

В двух словах, вы можете сделать скрипт следующим образом:

#!/bin/bash
shutdown -h +30 &
gnome-screensaver-command -a

Запустите его как:

sudo /path/to/script.sh

Перед использованием sudo Храните сценарий в надежном месте, он должен быть доступен только вам, и вы должны быть уверены в его содержании.

Когда у вас есть две команды в двух отдельных строках сценария оболочки, вторая будет запускаться только после завершения первой. Чтобы этого избежать, нужно добавить & до конца первой команды, которая запускается в фоновом режиме:

#!/bin/bash
sudo shutdown -h +30 &
gnome-screensaver-command -a

Что касается того, чтобы не спрашивать пароль, вам нужно будет сказать sudo что ваш пользователь имеет право запускать /sbin/shutdown без пароля Бежать sudo visudo и добавьте эту строку в /etc/sudoers:

eka  ALL=NOPASSWD:/usr/sbin/shutdown

+ Изменить eka к какому бы ни было ваше имя пользователя. Сохраните файл, и теперь вы сможете запустить sudo shutdown без запроса пароля.

Другие вопросы по тегам