Показать статистику
0 голосов
от (220 баллов)
Всем добрый вечер.

Значит объясню немного в чём проблема. Есть некий скрипт, который нужно настроить так, чтобы он правильно работал. Если нажать выключить компьютер, то скрипт запускается нормально, Всё отрабатывает, как нужно и далее идёт уже сам стандартный процесс выключения служб и всё, как должно быть.
Скрипт не от Рут нужно запускать.
Чтобы не было необходимости постоянно создавать службу в /etc/init.d/. Тем более она там от Рут запускается, что не совсем безопасно.
294 просмотров 2 ответов

2 Ответы

0 голосов
от (440 баллов)

Здравствуйте. Если совсем всё сделать примитивно, то тогда попробуйте создать свой отдельный скрипт выключения, после чего необходимо сделать саму кнопку запуска или hotkey. Выключаете, как хотите.

shutdown -h now

Это находится в отдельном скрипте и прописано в sudo visudo. Это на случай, если вдруг вы подзабыли что это - обновите заодно воспоминания. Не помешает.
Сама кнопка запуска может выглядеть следующим образом:

[Desktop Entry]
Type=Application
Name=ShutAllCKpunT.desktop
Icon=/home/HOME/Shut1511Nov131817.png
Exec=gksu /home/HOME/ShutAll.CKpunT
Terminal=false
Name[en]=ShutAllCKpunT.desktop

Я думаю, что в вашем случае скорее всего из-за скрипта, что должен всё выключить, необходимо будет запустить скрипт, что, собственно, выключает ПК в силу опасений с /etc/init.d/ … 

Как-то так.

0 голосов
от (4.5тыс. баллов)

Вам не обязательно использовать /etc/init.d/ для выполнения пользовательского скрипта при выключении. Вместо этого вы можете использовать systemd для создания юнита пользователя с типом "oneshot".

  1. Создайте файл .service для вашего скрипта в домашней папке пользователя, например, ~/.config/systemd/user/my-script.service
    [Unit]
    Description=My custom shutdown script
    After=default.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStop=/path/to/your/script.sh
    
    [Install]
    WantedBy=default.target
    

    Замените /path/to/your/script.sh на полный путь к вашему скрипту.

  2. Запустите следующие команды, чтобы включить и запустить ваш юнит: 
    systemctl --user daemon-reload
    systemctl --user enable my-script.service
    systemctl --user start my-script.service
    

     

Теперь ваш скрипт будет выполняться при выключении системы. Если ваш пользователь не является рутом, скрипт будет запущен от имени этого пользователя, что обеспечит большую безопасность.

Примечание: Вам может потребоваться внести изменения в политику systemd для разрешения выполнения юнитов пользователя при выключении.

...