Як я можу запустити скрипт, коли джерело живлення підключено або не працює?


8

Чомусь яскравість екрана мого ноутбука не змінюється, коли я підключаю або відключаю блок живлення. Я розглянув досить багато рішень цієї проблеми, але жодне з них, здається, не працює добре. Тож, замість того, щоб зневірятися і відмовлятися, я вирішила спробувати перетворити це на досвід навчання і побачити, чи не можу я написати сценарій, який робить це для мене.

Я спробував розібратися в цьому самостійно, за допомогою Інтернету, звичайно, але я досить новачок у скриптах та Ubuntu взагалі, так що далеко не дійшов.

Те , що я був в змозі зрозуміти, що я можу знайти стан батареї з

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

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

У будь-якому випадку, чи є дещо чистий спосіб зробити це? Під "чистим способом" я маю на увазі спосіб, який може осягнути той, хто має обмежений досвід баш сценарію.

Одне подібне запитання, на яке я знайшов хорошу відповідь, це таке , що говорить наступне:

Коли ви підключаєте / вимикаєте адаптер змінного струму, сценарії /etc/pm/power.dвикликаються з> аргументом: "true" (якщо ви працюєте на батареї) або "false" (якщо ви працюєте з живленням> адаптером).

Проблема полягає в тому, що я не знаю, як отримати доступ до цього аргументу із сценарію. Отже, я думаю, все це зводиться до досить простої проблеми, але я подумав, що все-таки поставити це питання, у випадку, якщо у людей будуть кращі рішення.

Відповіді:


5

Ви можете використовувати 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 

Це погана практика, щоб сценарії працювали нескінченно, чи це те, що відбувається регулярно і вбудовано в систему? Я думаю, я шукав якийсь тригер, але якщо це працює, то це набагато менш складно, ніж я припускав.
Джаспер

@TheQZ: Я думаю, що "souravc" дав основну ідею. Ви можете написати своє власне базування на цьому :)
heemayl

@TheQZ Хоча він працює вічно, але стає активним лише один раз на 10 секунд (ви можете збільшити час перевірки) Подивіться на питання, як повторити команду-кожний-x-інтервал часу . Інакше вам потрібно написати власну програму демонів, яка для початківців дуже складна.
souravc

@TheQZ Ви можете використовувати souravc відповідь «s як хрон роботу. дивіться другу частину моєї відповіді
αғsnιη

2
Кращий спосіб полягає у використанні Udev правила , як і в askubuntu.com/questions/613741 / ... .
Ентоні Вонг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.