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

7

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

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

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

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

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

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

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

When you plug in/out the AC adapter, the scripts in /etc/pm/power.d get called with >an argument: "true" (if you run on battery), or "false" (if you run with the power >adapter).

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

задан Jasper 27.02.2015 в 17:05
источник

1 ответ

4

Вы можете использовать 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

EDIT: [предложенный 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 
    
ответ дан souravc 27.02.2015 в 17:34
источник