Вызов прерывания выключения и запуск сценария для разрешения или предотвращения выключения

Это не вопрос ubuntu, однако я стараюсь вам помочь:

открытие корпуса ПК обычно делает его хуже, однако вы можете использовать большой вентилятор и поместить его в грязные кулеры с открытой стороны, как правило, являются проблемой - удалите всю пыль наилучшей идеей, но вам нужно некоторое время: снимите процессорный кулер, очистите все и перемонтируйте его несколькими (не слишком большим) термальным кремом. Удостоверьтесь, что кулер установлен на CPU (возможно, даже клип выпустил свою оболочку за время.
2
задан 27 February 2018 в 04:08

6 ответов

Использовать ингибиторы systemd

Оригинальное сообщение находится в разделе ниже и подробно описано как перехватить команду /sbin/shutdown.

Из ингибитора systemd:

Название

systemd-inhibit - Выполнить программу с блокировкой блокировки

Синопсис

systemd-inhibit [OPTIONS...] [COMMAND] [ARGUMENTS...]

systemd-inhibit [OPTIONS...] --list

Описание

Оригинальное сообщение может быть используется для выполнения программы с блокировкой блокировки выключения, сна или холостого хода.

Блокировки запрета могут использоваться для блокировки или задержки запросов на спящий режим и отключение пользователя от пользователя, а также автоматической обработки бездействия ОС , Это полезно, чтобы избежать приостановки системы во время записи оптического диска или подобных операций, которые не должны прерываться.

Для получения дополнительной информации см. Ингибитор systemd .

Параметры

Понятно понимать следующие опции:

--what=

Записывает один или несколько операций с блокировкой двоеточия: «shutdown «sleep», «sleep», «idle», «key-power-key», «handle-suspend-key», «handle-hibernate-key», «handle-lid-switch», для запрета перезагрузки / выключения / halt / kexec, приостановка / спящий режим, автоматическое определение режима ожидания или низкоуровневая обработка клавиши питания / сна и переключателя крышки соответственно. Если опустить, по умолчанию используется значение «idle: sleep: shutdown».

--who=

Делает список разделенных двоеточиями одной или нескольких операций для блокировки: «выключение», «спящий», «холостой», «рукоятка» «ключ», «рукоятка-приостановка-ключ», «рукоятка-спящий ключ», «ручка-переключатель-ключ» для запрета перезагрузки / выключения / остановки / kexec, приостановка / спящий режим, автоматическое определение режима ожидания или низкоуровневая обработка клавиши питания / сна и переключателя крышки соответственно. Если это опущено, по умолчанию используется «idle: sleep: shutdown».

--why=

Делает короткую, понятную для человека описательную строку по причине блокировки , По умолчанию используется «Неизвестная причина».

--mode=

Делает короткую, понятную для человека описательную строку по причине блокировки. По умолчанию «Неизвестная причина».

--list

Перечисляет все активные блокировки торможения вместо их получения.

-h, --help

Перечисляет все активные блокировки торможения, а не приобретает их.

--version 38] Распечатайте короткую строку и выйдите из нее.

Статус выхода

Возвращает статус выхода исполняемой программы.

Пример

# systemd-inhibit wodim foobar.iso

Это сжигает ISO-изображение foobar.iso на компакт-диске с использованием ингибиторов wodim (1) systemd и блокирует спящий режим, выключение и простоя при этом.

См. Также [!d47 ]

systemd (1), logind.conf (5)

Оригинальная публикация

В концепции это выглядит довольно легко. Просто найдите команду, переименуйте ее и замените ее собственным скриптом, который вызывает переименованную версию:

$ type -a shutdown
shutdown is /sbin/shutdown
$ sudo mv /sbin/shutdown /sbin/shutdownoriginal

Затем отредактируйте собственный скрипт в /sbin/shutdown, содержащий как минимум:

#!/bin/bash
/sbin/shutdownoriginal

Затем отметьте свой скрипт как исполняемый для всех:

$ sudo chmod a+x /sbin/shutdown

Voila! Все, что вызывает выключение, теперь вызывает ваш скрипт, который затем вызывает исходный комманд.

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

echo "/sbin/shutdown custom script calling /sbin/shutdownoriginal"
shutdowntime=`date`
echo "Last shutdown: $shutdowntime" >> /home/rick/shutdownlog.txt

Первый echo должен появиться в /var/log/syslog, но это не так. Второй echo должен был добавить строку в файл журнала, но этого не произошло. Это говорит мне, что к моменту выполнения команды /sbin/shutdown регистрация системы уже отключена, и система ввода-вывода файлов отключена.

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

Как всегда помните YMMV - ваш пробег может очень.

2
ответ дан 22 May 2018 в 12:52
  • 1
    Я дам вам некоторые отзывы для вашего ответа, которые, я думаю, являются хорошим первым шагом в правильном направлении к правильному решению. Когда я нажимаю на механизм в правом верхнем углу и выбираю shutdown, мое завершение не выполняется. Первоначальное выключение - это просто ссылка на / bin / systemctl, поэтому, вероятно, она никогда не вызывается при использовании gui. Однако, когда я печатаю " shutdown " в терминале выполняется с одной минутой задержки. Это уже рабочее решение. Я посмотрю ваши другие предложения, и я обновлю здесь. Большое спасибо! – Karim Mtl 27 February 2018 в 05:01
  • 2
    @KarimMtl Это было мое удовольствие. Это интересный проект, поэтому, пожалуйста, держите нас всех обновленными. – WinEunuuchs2Unix 27 February 2018 в 05:05

Использовать ингибиторы systemd

Оригинальное сообщение находится в разделе ниже и подробно описано как перехватить команду /sbin/shutdown.

Из ингибитора systemd:

Название

systemd-inhibit - Выполнить программу с блокировкой блокировки

Синопсис

systemd-inhibit [OPTIONS...] [COMMAND] [ARGUMENTS...]

systemd-inhibit [OPTIONS...] --list

Описание

Оригинальное сообщение может быть используется для выполнения программы с блокировкой блокировки выключения, сна или холостого хода.

Блокировки запрета могут использоваться для блокировки или задержки запросов на спящий режим и отключение пользователя от пользователя, а также автоматической обработки бездействия ОС , Это полезно, чтобы избежать приостановки системы во время записи оптического диска или подобных операций, которые не должны прерываться.

Для получения дополнительной информации см. Ингибитор systemd .

Параметры

Понятно понимать следующие опции:

--what=

Записывает один или несколько операций с блокировкой двоеточия: «shutdown «sleep», «sleep», «idle», «key-power-key», «handle-suspend-key», «handle-hibernate-key», «handle-lid-switch», для запрета перезагрузки / выключения / halt / kexec, приостановка / спящий режим, автоматическое определение режима ожидания или низкоуровневая обработка клавиши питания / сна и переключателя крышки соответственно. Если опустить, по умолчанию используется значение «idle: sleep: shutdown».

--who=

Делает список разделенных двоеточиями одной или нескольких операций для блокировки: «выключение», «спящий», «холостой», «рукоятка» «ключ», «рукоятка-приостановка-ключ», «рукоятка-спящий ключ», «ручка-переключатель-ключ» для запрета перезагрузки / выключения / остановки / kexec, приостановка / спящий режим, автоматическое определение режима ожидания или низкоуровневая обработка клавиши питания / сна и переключателя крышки соответственно. Если это опущено, по умолчанию используется «idle: sleep: shutdown».

--why=

Делает короткую, понятную для человека описательную строку по причине блокировки , По умолчанию используется «Неизвестная причина».

--mode=

Делает короткую, понятную для человека описательную строку по причине блокировки. По умолчанию «Неизвестная причина».

--list

Перечисляет все активные блокировки торможения вместо их получения.

-h, --help

Перечисляет все активные блокировки торможения, а не приобретает их.

--version

Распечатайте короткую строку и выйдите из нее.

Статус выхода

Возвращает статус выхода исполняемой программы.

Пример

# systemd-inhibit wodim foobar.iso

Это сжигает ISO-изображение foobar.iso на компакт-диске с использованием ингибиторов wodim (1) systemd и блокирует спящий режим, выключение и простоя при этом.

См. Также

systemd (1), logind.conf (5)

Оригинальная публикация

В концепции это выглядит довольно легко. Просто найдите команду, переименуйте ее и замените ее собственным скриптом, который вызывает переименованную версию:

$ type -a shutdown shutdown is /sbin/shutdown $ sudo mv /sbin/shutdown /sbin/shutdownoriginal

Затем отредактируйте собственный скрипт в /sbin/shutdown, содержащий как минимум:

#!/bin/bash /sbin/shutdownoriginal

Затем отметьте свой скрипт как исполняемый для всех:

$ sudo chmod a+x /sbin/shutdown

Voila! Все, что вызывает выключение, теперь вызывает ваш скрипт, который затем вызывает исходный комманд.

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

echo "/sbin/shutdown custom script calling /sbin/shutdownoriginal" shutdowntime=`date` echo "Last shutdown: $shutdowntime" >> /home/rick/shutdownlog.txt

Первый echo должен появиться в /var/log/syslog, но это не так. Второй echo должен был добавить строку в файл журнала, но этого не произошло. Это говорит мне, что к моменту выполнения команды /sbin/shutdown регистрация системы уже отключена, и система ввода-вывода файлов отключена.

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

Как всегда помните YMMV - ваш пробег может очень.

2
ответ дан 17 July 2018 в 19:55

Использовать ингибиторы systemd

Оригинальное сообщение находится в разделе ниже и подробно описано как перехватить команду /sbin/shutdown.

Из ингибитора systemd:

Название

systemd-inhibit - Выполнить программу с блокировкой блокировки

Синопсис

systemd-inhibit [OPTIONS...] [COMMAND] [ARGUMENTS...]

systemd-inhibit [OPTIONS...] --list

Описание

Оригинальное сообщение может быть используется для выполнения программы с блокировкой блокировки выключения, сна или холостого хода.

Блокировки запрета могут использоваться для блокировки или задержки запросов на спящий режим и отключение пользователя от пользователя, а также автоматической обработки бездействия ОС , Это полезно, чтобы избежать приостановки системы во время записи оптического диска или подобных операций, которые не должны прерываться.

Для получения дополнительной информации см. Ингибитор systemd .

Параметры

Понятно понимать следующие опции:

--what=

Записывает один или несколько операций с блокировкой двоеточия: «shutdown «sleep», «sleep», «idle», «key-power-key», «handle-suspend-key», «handle-hibernate-key», «handle-lid-switch», для запрета перезагрузки / выключения / halt / kexec, приостановка / спящий режим, автоматическое определение режима ожидания или низкоуровневая обработка клавиши питания / сна и переключателя крышки соответственно. Если опустить, по умолчанию используется значение «idle: sleep: shutdown».

--who=

Делает список разделенных двоеточиями одной или нескольких операций для блокировки: «выключение», «спящий», «холостой», «рукоятка» «ключ», «рукоятка-приостановка-ключ», «рукоятка-спящий ключ», «ручка-переключатель-ключ» для запрета перезагрузки / выключения / остановки / kexec, приостановка / спящий режим, автоматическое определение режима ожидания или низкоуровневая обработка клавиши питания / сна и переключателя крышки соответственно. Если это опущено, по умолчанию используется «idle: sleep: shutdown».

--why=

Делает короткую, понятную для человека описательную строку по причине блокировки , По умолчанию используется «Неизвестная причина».

--mode=

Делает короткую, понятную для человека описательную строку по причине блокировки. По умолчанию «Неизвестная причина».

--list

Перечисляет все активные блокировки торможения вместо их получения.

-h, --help

Перечисляет все активные блокировки торможения, а не приобретает их.

--version

Распечатайте короткую строку и выйдите из нее.

Статус выхода

Возвращает статус выхода исполняемой программы.

Пример

# systemd-inhibit wodim foobar.iso

Это сжигает ISO-изображение foobar.iso на компакт-диске с использованием ингибиторов wodim (1) systemd и блокирует спящий режим, выключение и простоя при этом.

См. Также

systemd (1), logind.conf (5)

Оригинальная публикация

В концепции это выглядит довольно легко. Просто найдите команду, переименуйте ее и замените ее собственным скриптом, который вызывает переименованную версию:

$ type -a shutdown shutdown is /sbin/shutdown $ sudo mv /sbin/shutdown /sbin/shutdownoriginal

Затем отредактируйте собственный скрипт в /sbin/shutdown, содержащий как минимум:

#!/bin/bash /sbin/shutdownoriginal

Затем отметьте свой скрипт как исполняемый для всех:

$ sudo chmod a+x /sbin/shutdown

Voila! Все, что вызывает выключение, теперь вызывает ваш скрипт, который затем вызывает исходный комманд.

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

echo "/sbin/shutdown custom script calling /sbin/shutdownoriginal" shutdowntime=`date` echo "Last shutdown: $shutdowntime" >> /home/rick/shutdownlog.txt

Первый echo должен появиться в /var/log/syslog, но это не так. Второй echo должен был добавить строку в файл журнала, но этого не произошло. Это говорит мне, что к моменту выполнения команды /sbin/shutdown регистрация системы уже отключена, и система ввода-вывода файлов отключена.

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

Как всегда помните YMMV - ваш пробег может очень.

2
ответ дан 23 July 2018 в 20:40

Я посмотрел на systemd-inhibit

. Я понял, что когда вы используете его перед командой, он ждет, пока ваша команда / сценарий не закончится до того, как система выключится, есть некоторые опции, чтобы заблокировать выключение но мне это не показалось очевидным. На данный момент ваше первое предложение работает для меня (я не против печатать «shutdown» вместо графического интерфейса). Вот пример сценария:

#!/bin/bash

if [ ! -d /media/myusername/myusbname ]; then
  zenity --question --text "Are you sure you want to shutdown without saving? If not choose \"No\" and insert the usb key" 2> /dev/null
  answer=$?
else
  #save data
  answer=0
fi
if [ $answer -eq 0 ]; then
  /sbin/shutdownoriginal
else
  zenity --info --text="Shutdown canceled" 2> /dev/null
fi

Спасибо

0
ответ дан 22 May 2018 в 12:52

Я посмотрел на systemd-inhibit

. Я понял, что когда вы используете его перед командой, он ждет, пока ваша команда / сценарий не закончится до того, как система выключится, есть некоторые опции, чтобы заблокировать выключение но мне это не показалось очевидным. На данный момент ваше первое предложение работает для меня (я не против печатать «shutdown» вместо графического интерфейса). Вот пример сценария:

#!/bin/bash if [ ! -d /media/myusername/myusbname ]; then zenity --question --text "Are you sure you want to shutdown without saving? If not choose \"No\" and insert the usb key" 2> /dev/null answer=$? else #save data answer=0 fi if [ $answer -eq 0 ]; then /sbin/shutdownoriginal else zenity --info --text="Shutdown canceled" 2> /dev/null fi

Спасибо

0
ответ дан 17 July 2018 в 19:55

Я посмотрел на systemd-inhibit

. Я понял, что когда вы используете его перед командой, он ждет, пока ваша команда / сценарий не закончится до того, как система выключится, есть некоторые опции, чтобы заблокировать выключение но мне это не показалось очевидным. На данный момент ваше первое предложение работает для меня (я не против печатать «shutdown» вместо графического интерфейса). Вот пример сценария:

#!/bin/bash if [ ! -d /media/myusername/myusbname ]; then zenity --question --text "Are you sure you want to shutdown without saving? If not choose \"No\" and insert the usb key" 2> /dev/null answer=$? else #save data answer=0 fi if [ $answer -eq 0 ]; then /sbin/shutdownoriginal else zenity --info --text="Shutdown canceled" 2> /dev/null fi

Спасибо

0
ответ дан 23 July 2018 в 20:40

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

Похожие вопросы: