У меня есть носатая установка, которая отображает мой уровень заряда батареи. Проблема, каждый раз, когда я включаюсь/отключаю свой ноутбук от зарядного устройства, я должен запустить скрипт носатого запуска, чтобы заставить это отображаться правильно. Я нахожу, что это боль (Даже при том, что мне настраивали средство запуска, которое запускает скрипт при нажатии) и хотел бы знать то, что я должен сделать для создания сценария выполненным каждый раз, когда я включаюсь/отключаю свой ноутбук от зарядного устройства.
Вот довольно простой сценарий, который может быть добавлен как Приложение Запуска и будет работать непрерывно. Вставьте команду, которую Вы хотите выполнить после обнаружения изменения в методе питания, как определено в комментариях.
#!/bin/bash
# Author: Serg Kolo
# Date: June 17,2015
# Description: this script detects changes in
# the powering method, and does something user
# specifies in appropriate field
on_ac_power
PREVIOUS=$(echo $?)
while [ 1 ]; do
# check if we're on ac power or not
on_ac_power
CURRENT=$(echo $?)
# check if previous values are current
# are different. If they are
# raise the flag.
if [ $CURRENT -ne $PREVIOUS ]; then
echo things changed
# Insert commands you wanna run here
# in the space below this comment
echo running custom stuff
# when done: make current value previous
# for future comparison
PREVIOUS=$(echo $CURRENT )
else
# if previous values and current are same
# it means we didn't switch from battery to
# ac or vice versa; do nothing
continue
fi
sleep 1
done
Вот универсальный подход:
#!/bin/bash
status="$(grep -Po '^charging\s+state:\s+\K.* -
/proc/acpi/battery/BAT0/state
содержит состояние батареи, замените BAT0
, если название батареи отличается в Вашем случае
-
, строка, запускающаяся с charging state:
из файла, содержит состояние, заряжается ли батарея, разряжаясь или заряжалась
-
, Мы сохраняем строку состояния от той строки в переменной status
-
В зависимости от значения status
, мы можем сделать то, что мы хотим.
/proc/acpi/battery/BAT0/state)"
if [[ $status = 'charging' ]]; then
##Charging, Do something
elif [[ $status = 'discharging' ]]; then
##Discharging, Do something
elif [[ $status = 'charged' ]]; then
##Charged, Do something
else
##Battery not found, Do something
fi
/proc/acpi/battery/BAT0/state
содержит состояние батареи, замените BAT0
, если название батареи отличается в Вашем случае
, строка, запускающаяся с charging state:
из файла, содержит состояние, заряжается ли батарея, разряжаясь или заряжалась
, Мы сохраняем строку состояния от той строки в переменной status
В зависимости от значения status
, мы можем сделать то, что мы хотим.
Когда Вы включаетесь/отключаете силовой кабель, любые сценарии в/etc/pm/power.d выполняются с "истинным" аргументом, когда Вы включаете и "ложный" аргумент, когда Вы отключаете.
Добавление некоторого сценария до конца того файла должно заставить его работать.
, Если у Вас есть много сценария для выполнения, необходимо попытаться добавить строку, которая похожа на это:
if [ -f /path/to/the/script ]; then
. /path/to/the/script
fi
необходимо будет, вероятно, удостовериться, что сценарий в.../power.d/каталоге является исполняемым файлом:
cd /etc/pm/power.d/
chmod +x ./name_of_file
Для получения дополнительной информации выезд этот ответ: , Как я могу выполнить сценарий, когда источник питания включается - в или-?