Автор Тема: Неронятное поведение acpid  (Прочитано 1687 раз)

Оффлайн pi1985

  • Участник
  • *
  • Сообщений: 140
Неронятное поведение acpid
« : 29.04.2012 11:34:23 »
Доброго времени суток.
Хочу настроить acpid, чтобы он автоматически менял яркость экрана ноутбука и заодно изменял частоту процессора.
В папке /etc/acpi/events завёл три события: ac, bat и event.
[root@VanyaBook events]# cat ac
event=AC*
action=/etc/acpi/scripts/OnPower %e
[root@VanyaBook events]# cat bat
event=bat*
action=/etc/acpi/scripts/OnBatt %e
[root@VanyaBook events]# cat event
event=button*
action=echo `date`: %e >> ~/acpi
[root@VanyaBook events]#
Создал соответствующие скрипты в /etc/acpi/scripts: OnBatt, OnPower, activate:
[root@VanyaBook scripts]# cat OnBatt
/etc/acpi/scripts/activate powersave $1
[root@VanyaBook scripts]# cat OnPower
/etc/acpi/scripts/activate performance $1[root@VanyaBook scripts]# cat activate
#!/bin/bash
profile=$1
log=~/acpi

if [ -f /etc/acpi/profiles/$profile ]
then

  #Выбор текущего профиля для дальнейшей работы
  echo $profile > /etc/acpi/active_profile
  echo `date`: activating profile $profile. >> $log
  echo `date`: parameter from acpid: $2. >> $log

  #Установка режима работы процессора, если настройка есть в файле профиля
  #Здесь есть ограничение на 10 ЦП в заголовке цикла for
  #(если есть больше, то режим устанавливается только для первых 10-и).
  cat /etc/acpi/profiles/$1 | grep -v ^# | grep cpu  > /dev/null
  if [ $? -eq 0 ]
  then
    set `cat /etc/acpi/profiles/$1 | grep -v ^# | grep cpu`
    for i in /sys/devices/system/cpu/cpu?
    do
      echo $3 > ${i}/cpufreq/scaling_governor
      echo `date`: set $3 in ${i}/cpufreq/scaling_governor. >> $log
    done
  fi

  #Установка яркости экрана, если настройка есть в файле профиля
  cat /etc/acpi/profiles/$profile | grep -v ^# | grep backlight  > /dev/null
  if [ $? -eq 0 ]
  then
    set `cat /etc/acpi/profiles/$profile | grep -v ^# | grep backlight`
    xrandr --output LVDS1 --set BACKLIGHT $3
    echo `date`: set backlight for LVDS1: $3. >> $log
  fi
fi

echo ---------------------------------------------- >> $log
[root@VanyaBook scripts]#
Создал профили с настройками: /etc/acpi/profiles: powersave, performance.
[root@VanyaBook profiles]# cat performance
cpu = powersave
backlight = 10
[root@VanyaBook profiles]# cat powersave
cpu = powersave
backlight = 0
[root@VanyaBook profiles]#
Теперь у меня при выполнении этих скриптов яркость экрана попеременно то гаснет в 0, то зажигается в 10. В логе получается вот что:
...
----------------------------------------------
Sun Apr 29 10:29:11 EEST 2012: activating profile performance.
Sun Apr 29 10:29:11 EEST 2012: parameter from acpid: battery.
Sun Apr 29 10:29:11 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 10:29:11 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 10:29:11 EEST 2012: set backlight for LVDS1: 10.
----------------------------------------------
Sun Apr 29 10:29:11 EEST 2012: activating profile powersave.
Sun Apr 29 10:29:11 EEST 2012: parameter from acpid: battery.
Sun Apr 29 10:29:11 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 10:29:11 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 10:29:12 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
Sun Apr 29 10:29:30 EEST 2012: activating profile performance.
Sun Apr 29 10:29:30 EEST 2012: parameter from acpid: battery.
Sun Apr 29 10:29:30 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 10:29:30 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 10:29:30 EEST 2012: set backlight for LVDS1: 10.
----------------------------------------------
Sun Apr 29 10:29:32 EEST 2012: activating profile powersave.
Sun Apr 29 10:29:32 EEST 2012: parameter from acpid: battery.
Sun Apr 29 10:29:32 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 10:29:32 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 10:29:33 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
Я что-то напутал в событиях, или это глюк acpid?
Ноут HP550, LXDE Starterkit P9 x86-64
Настольный, Alt Образование 10.2 x86-64

Оффлайн pi1985

  • Участник
  • *
  • Сообщений: 140
Re: Неронятное поведение acpid
« Ответ #1 : 29.04.2012 12:05:57 »
В событиях взял %e в кавычки:
[root@VanyaBook events]# cat ac
event=ac_adapter*
action=/etc/acpi/scripts/OnPower "%e"
[root@VanyaBook events]# cat bat
event=battery*
action=/etc/acpi/scripts/OnBatt "%e"
[root@VanyaBook events]#
И в скриптах $1 тоже:
[root@VanyaBook scripts]# cat OnBatt
/etc/acpi/scripts/activate powersave "$1"
[root@VanyaBook scripts]# cat OnPower
/etc/acpi/scripts/activate performance "$1"
[root@VanyaBook scripts]#
Посмотрим.
Ноут HP550, LXDE Starterkit P9 x86-64
Настольный, Alt Образование 10.2 x86-64

Оффлайн pi1985

  • Участник
  • *
  • Сообщений: 140
Re: Неронятное поведение acpid
« Ответ #2 : 29.04.2012 12:42:43 »
Малость переписал скрипты. activate теперь раздвоился на powersave и performance:
[root@VanyaBook scripts]# cat powersave
#!/bin/bash
profile=powersave
log=~/acpi
acpid_param="$1"

echo $profile
if [ -f /etc/acpi/profiles/$profile ]
then

  #Выбор текущего профиля для дальнейшей работы
  echo $profile > /etc/acpi/active_profile
  echo `date`: activating profile $profile. >> $log
  echo `date`: parameter from acpid: $acpid_param. >> $log

  #Установка режима работы процессора, если настройка есть в файле профиля
  #Здесь есть ограничение на 10 ЦП в заголовке цикла for
  #(если есть больше, то режим устанавливается только для первых 10-и).
  cat /etc/acpi/profiles/$profile | grep -v ^# | grep cpu  > /dev/null
  if [ $? -eq 0 ]
  then
    set `cat /etc/acpi/profiles/$profile | grep -v ^# | grep cpu`
    for i in /sys/devices/system/cpu/cpu?
    do
      echo $3 > ${i}/cpufreq/scaling_governor
      echo `date`: set $3 in ${i}/cpufreq/scaling_governor. >> $log
    done
  fi

  #Установка яркости экрана, если настройка есть в файле профиля
  cat /etc/acpi/profiles/$profile | grep -v ^# | grep backlight  > /dev/null
  if [ $? -eq 0 ]
  then
    set `cat /etc/acpi/profiles/$profile | grep -v ^# | grep backlight`
    xrandr --output LVDS1 --set BACKLIGHT $3
    echo `date`: set backlight for LVDS1: $3. >> $log
  fi
fi

echo ---------------------------------------------- >> $log
[root@VanyaBook scripts]# cat performance
#!/bin/bash
profile=performance
log=~/acpi
acpid_param="$1"

set `echo $1`
echo $4
if [ $4 -eq 00000000 ]
then
  exit
fi

if [ -f /etc/acpi/profiles/$profile ]
then

  #Выбор текущего профиля для дальнейшей работы
  echo $profile > /etc/acpi/active_profile
  echo `date`: activating profile $profile. >> $log
  echo `date`: parameter from acpid: $acpid_param. >> $log

  #Установка режима работы процессора, если настройка есть в файле профиля
  #Здесь есть ограничение на 10 ЦП в заголовке цикла for
  #(если есть больше, то режим устанавливается только для первых 10-и).
  cat /etc/acpi/profiles/$profile | grep -v ^# | grep cpu  > /dev/null
  if [ $? -eq 0 ]
  then
    set `cat /etc/acpi/profiles/$profile | grep -v ^# | grep cpu`
    for i in /sys/devices/system/cpu/cpu?
    do
      echo $3 > ${i}/cpufreq/scaling_governor
      echo `date`: set $3 in ${i}/cpufreq/scaling_governor. >> $log
    done
  fi

  #Установка яркости экрана, если настройка есть в файле профиля
  cat /etc/acpi/profiles/$profile | grep -v ^# | grep backlight  > /dev/null
  if [ $? -eq 0 ]
  then
    set `cat /etc/acpi/profiles/$profile | grep -v ^# | grep backlight`
    xrandr --output LVDS1 --set BACKLIGHT $3
    echo `date`: set backlight for LVDS1: $3. >> $log
  fi
fi

echo ---------------------------------------------- >> $log
[root@VanyaBook scripts]#
В лог теперь пишет вот что. При отключении питания:
[root@VanyaBook ~]# cat acpi
Sun Apr 29 11:34:43 EEST 2012: activating profile powersave.
Sun Apr 29 11:34:43 EEST 2012: parameter from acpid: battery PNP0C0A:00 00000080 00000001.
Sun Apr 29 11:34:43 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 11:34:43 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 11:34:44 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
Sun Apr 29 11:34:44 EEST 2012: activating profile powersave.
Sun Apr 29 11:34:44 EEST 2012: parameter from acpid: battery PNP0C0A:00 00000080 00000001.
Sun Apr 29 11:34:44 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 11:34:44 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 11:34:45 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
Sun Apr 29 11:34:47 EEST 2012: activating profile powersave.
Sun Apr 29 11:34:47 EEST 2012: parameter from acpid: battery PNP0C0A:00 00000080 00000001.
Sun Apr 29 11:34:47 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 11:34:47 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 11:34:47 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
[code][root@VanyaBook ~]#
При подключении питания:
[root@VanyaBook ~]# cat acpi
Sun Apr 29 11:35:17 EEST 2012: activating profile powersave.
Sun Apr 29 11:35:17 EEST 2012: parameter from acpid: battery PNP0C0A:00 00000080 00000001.
Sun Apr 29 11:35:17 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 11:35:17 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 11:35:18 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
Sun Apr 29 11:35:19 EEST 2012: activating profile performance.
Sun Apr 29 11:35:19 EEST 2012: parameter from acpid: ac_adapter ACPI0003:00 00000080 00000001.
Sun Apr 29 11:35:19 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 11:35:19 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 11:35:20 EEST 2012: set backlight for LVDS1: 10.
----------------------------------------------
Sun Apr 29 11:35:21 EEST 2012: activating profile powersave.
Sun Apr 29 11:35:21 EEST 2012: parameter from acpid: battery PNP0C0A:00 00000080 00000001.
Sun Apr 29 11:35:21 EEST 2012: set powersave in /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor.
Sun Apr 29 11:35:21 EEST 2012: set powersave in /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor.
Sun Apr 29 11:35:22 EEST 2012: set backlight for LVDS1: 0.
----------------------------------------------
[root@VanyaBook ~]#
События для батарейки абсолютно одинаковые в любом случае. Как же отличить, подключено питание или нет?
Ноут HP550, LXDE Starterkit P9 x86-64
Настольный, Alt Образование 10.2 x86-64