Почему мой скрипт не работает при загрузке?

У меня есть простой сценарий 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, но, угадайте! если экран выйдет из ПК, не завершайте работу. Я не понимаю, почему.

1
задан 22 April 2017 в 19:05

2 ответа

АНАЛИЗ

Ваш скрипт запускается во время загрузки, поэтому не выполняется процесс входа в систему, поэтому он не имеет переменных окружения или, возможно, очень ограниченного набора. Я верю, что нет ДИСПЛЕЯ, возможно, даже не ПУТЬ. Таким образом, команда xset не работает, состояние остается пустым, dbus-send никогда не достигал. Вы можете проверить мое объяснение, изменив команду xset в вашем скрипте на:

АНАЛИЗ

status = "$ (xset q 2> / tmp / output .err | grep 'Monitor is Off') "

SOLUTION

затем перезагрузиться и проверить файл /tmp/output.err

У меня нет точное решение для вас. Вам нужно будет выполнить некоторую работу и различные перезагрузки и проверки ошибок. [D6] О, я настоятельно рекомендую вам изменить имя вашего скрипта. Вы назвали его xset , и я тоже забыл, что это системная команда. Итак, угадайте, что случилось, когда я запустил свой скрипт ...

SOLUTION

Хорошо, первое действие. В верхней части вашего скрипта добавьте:

sleep 5

export DISPLAY =: 0.0 env> /tmp/output.log

Внутри цикла while

1
ответ дан 18 July 2018 в 14:28
АНАЛИЗ

Ваш скрипт запускается во время загрузки, поэтому не выполняется процесс входа в систему, поэтому он не имеет переменных окружения или, возможно, очень ограниченного набора. Я верю, что нет ДИСПЛЕЯ, возможно, даже не ПУТЬ. Таким образом, команда xset не работает, состояние остается пустым, dbus-send никогда не достигал. Вы можете проверить мое объяснение, изменив команду xset в вашем скрипте на:

АНАЛИЗ

status = "$ (xset q 2> / tmp / output .err | grep 'Monitor is Off') "

SOLUTION

затем перезагрузиться и проверить файл /tmp/output.err

У меня нет точное решение для вас. Вам нужно будет выполнить некоторую работу и различные перезагрузки и проверки ошибок. [D6] О, я настоятельно рекомендую вам изменить имя вашего скрипта. Вы назвали его xset , и я тоже забыл, что это системная команда. Итак, угадайте, что случилось, когда я запустил свой скрипт ...

SOLUTION

Хорошо, первое действие. В верхней части вашего скрипта добавьте:

sleep 5

export DISPLAY =: 0.0 env> /tmp/output.log

Внутри цикла while

1
ответ дан 24 July 2018 в 20:24

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

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