По какой-то причине яркость экрана моего ноутбука не обновляется, когда я подключаю или отключаю источник питания. Я рассмотрел довольно много решений этой проблемы, но ни одно из них, похоже, не сработало. Поэтому вместо того, чтобы отчаиваться и сдаваться, я решил попытаться превратить это в учебный процесс и посмотреть, не смогу ли я написать сценарий, который сделает это за меня.
Я пытался выяснить это самостоятельно, с некоторой помощью из Интернета, конечно, но я довольно плохо знаком с bash-скриптингом и Ubuntu в целом, поэтому я не продвинулся далеко.
Что я смог выяснить, так это то, что я могу найти состояние батареи с помощью
$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state: charging/discharging
в зависимости от того, подключен ли адаптер переменного тока. Не знаю, полезно ли это, но это круто, и я не знал, как использовать grep
раньше, так что, черт возьми, обучение доставляет удовольствие.
В любом случае, есть ли какой-нибудь чистый способ сделать это? Под «чистым способом» я подразумеваю способ, которым может быть понят тот, кто имеет ограниченный опыт работы с bash-скриптами.
Один похожий вопрос, на который я нашел хороший ответ, это этот , который говорит следующее:
Когда вы подключаете / отключаете адаптер переменного тока, Сценарии в
blockquote>/etc/pm/power.d
вызываются с> аргументом: «true» (если вы работаете от батареи) или «false» (если вы работаете с адаптером питания>).Проблема в том, что я не знаю, как получить доступ к этому аргументу из скрипта. Итак, я полагаю, что все сводится к довольно простой проблеме, но я решил в любом случае опубликовать вопрос, если у людей найдутся лучшие решения.
Вы можете использовать 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 ] sup>
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