Как запустить скрипт, когда блок питания подключен или отключен?

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

Я пытался выяснить это самостоятельно, с некоторой помощью из Интернета, конечно, но я довольно плохо знаком с bash-скриптингом и Ubuntu в целом, поэтому я не продвинулся далеко.

Что я смог выяснить, так это то, что я могу найти состояние батареи с помощью

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

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

В любом случае, есть ли какой-нибудь чистый способ сделать это? Под «чистым способом» я подразумеваю способ, которым может быть понят тот, кто имеет ограниченный опыт работы с bash-скриптами.

Один похожий вопрос, на который я нашел хороший ответ, это этот , который говорит следующее:

Когда вы подключаете / отключаете адаптер переменного тока, Сценарии в /etc/pm/power.d вызываются с> аргументом: «true» (если вы работаете от батареи) или «false» (если вы работаете с адаптером питания>).

Проблема в том, что я не знаю, как получить доступ к этому аргументу из скрипта. Итак, я полагаю, что все сводится к довольно простой проблеме, но я решил в любом случае опубликовать вопрос, если у людей найдутся лучшие решения.

8
задан 13 April 2017 в 15:24

1 ответ

Вы можете использовать on_ac_power для запуска сценария при включении или выключении источника питания.

Попробуйте следующее в терминале.

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

На основании этого вы можете сделать свой скрипт как,

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

РЕДАКТИРОВАТЬ: [предложено KasiyA ]

cron job было бы лучшей идеей для запуска сценария через регулярный интервал вместо использования бесконечного цикла.

Сохраните ваш скрипт как myscript.sh и поместите в него следующее содержимое:

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

Сделайте скрипт исполняемым из терминала, chmod +x /path/to/myscript.sh. Откройте свой личный crontab как EDITOR=gedit crontab -e и добавьте в него следующую строку, чтобы запускать ваш скрипт каждую минуту.

* * * * * /path/to/myscript.sh 
0
ответ дан 13 April 2017 в 15:24

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

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