У меня есть простой сценарий bash:
while [[ true ]]
do
status="$(xset q | grep 'Monitor is Off')"
if [[ $status != '' ]] ; then
#shutdown the computer
dbus-send --system --print-reply --dest=org.freedesktop.login1.Manager.Poweroff" boolean:true
fi
done
Поэтому всякий раз, когда мой экран отключается от моего компьютера. Этот скрипт работает хорошо, когда я запускаю его с терминала, но я хочу выполнить его при каждой загрузке. Я поместил символическую ссылку в rc5.d и, похоже, работал. pgrep poweroff показать скрипт PID, но, угадайте! если экран выйдет из ПК, не завершайте работу. Я не понимаю, почему.
Ваш скрипт запускается во время загрузки, поэтому не выполняется процесс входа в систему, поэтому он не имеет переменных окружения или, возможно, очень ограниченного набора. Я верю, что нет ДИСПЛЕЯ, возможно, даже не ПУТЬ. Таким образом, команда xset не работает, состояние остается пустым, dbus-send никогда не достигал. Вы можете проверить мое объяснение, изменив команду xset в вашем скрипте на:
АНАЛИЗ
status = "$ (xset q 2> / tmp / output .err | grep 'Monitor is Off') "
SOLUTIONзатем перезагрузиться и проверить файл /tmp/output.err
У меня нет точное решение для вас. Вам нужно будет выполнить некоторую работу и различные перезагрузки и проверки ошибок. [D6] О, я настоятельно рекомендую вам изменить имя вашего скрипта. Вы назвали его xset , и я тоже забыл, что это системная команда. Итак, угадайте, что случилось, когда я запустил свой скрипт ...
SOLUTION
Хорошо, первое действие. В верхней части вашего скрипта добавьте:
sleep 5export DISPLAY =: 0.0 env> /tmp/output.log
Внутри цикла while
Ваш скрипт запускается во время загрузки, поэтому не выполняется процесс входа в систему, поэтому он не имеет переменных окружения или, возможно, очень ограниченного набора. Я верю, что нет ДИСПЛЕЯ, возможно, даже не ПУТЬ. Таким образом, команда xset не работает, состояние остается пустым, dbus-send никогда не достигал. Вы можете проверить мое объяснение, изменив команду xset в вашем скрипте на:
АНАЛИЗ
status = "$ (xset q 2> / tmp / output .err | grep 'Monitor is Off') "
SOLUTIONзатем перезагрузиться и проверить файл /tmp/output.err
У меня нет точное решение для вас. Вам нужно будет выполнить некоторую работу и различные перезагрузки и проверки ошибок. [D6] О, я настоятельно рекомендую вам изменить имя вашего скрипта. Вы назвали его xset , и я тоже забыл, что это системная команда. Итак, угадайте, что случилось, когда я запустил свой скрипт ...
SOLUTION
Хорошо, первое действие. В верхней части вашего скрипта добавьте:
sleep 5export DISPLAY =: 0.0 env> /tmp/output.log
Внутри цикла while