[Решено] ACPI: свой скрипт

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Ответить
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

[Решено] ACPI: свой скрипт

Сообщение UnixNoob »

Приветсвую. Написал вот такой скрипт:

Код: Выделить всё

#!/bin/sh

echo 3 > /sys/class/backlight/acpi_video0/brightness
rfkill block bluetooth

if on_ac_power; then
	echo 0 > /proc/sys/vm/laptop_mode
	echo max_performance > /sys/class/scsi_host/host0/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host1/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host2/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host3/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host4/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host5/link_power_management_policy
	echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
	echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
	echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
	echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
	echo 10 > /sys/module/snd_hda_intel/parameters/power_save
	echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller
	echo powersave > /sys/module/pcie_aspm/parameters/policy
else
	echo 4 > /proc/sys/vm/laptop_mode
	echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
	echo min_power > /sys/class/scsi_host/host1/link_power_management_policy
	echo min_power > /sys/class/scsi_host/host2/link_power_management_policy
	echo min_power > /sys/class/scsi_host/host3/link_power_management_policy
	echo min_power > /sys/class/scsi_host/host4/link_power_management_policy
	echo min_power > /sys/class/scsi_host/host5/link_power_management_policy
	echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
	echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
	echo ondemand > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
	echo ondemand > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
	echo 5 > /sys/module/snd_hda_intel/parameters/power_save
	echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller
	echo default > /sys/module/pcie_aspm/parameters/policy
fi

встречал что его можно положить в каталог /etc/acpi, выдав права на исполнение, но не работает.
Как это правильно сделать?
Последний раз редактировалось UnixNoob 25.09.2021 17:13, всего редактировалось 1 раз.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: ACPI: свой скрипт

Сообщение bormant »

UnixNoob писал:
09.09.2021 19:43
встречал что его можно положить в каталог /etc/acpi, выдав права на исполнение, но не работает.
Как это правильно сделать?
Там чуть больше, чем просто положить. См. man acpid
Еще можно тут почитать: https://wiki.archlinux.org/title/acpid#Configuration
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

bormant писал(а):
10.09.2021 09:27
Там чуть больше, чем просто положить.
По ощущениям там не совсем чуть. Я знаю что при отключении/включении адаптера генерируются событие:

Код: Выделить всё

ac_adapter ACPI0003:00 00000080 00000000
ac_adapter ACPI0003:00 00000080 00000001
Вариант что я просто создаю в /ect/acpi/events файл switch_to_battery с содержимым:

Код: Выделить всё

event=ac_adapter ACPI0003:00 00000080 00000000
action=/etc/acpi/switch_to_battery.sh
а файл switch_to_battery.sh привожу к виду без вариантов выбора:

Код: Выделить всё

#!/bin/sh
echo 3 > /sys/class/backlight/acpi_video0/brightness
rfkill block bluetooth
echo 4 > /proc/sys/vm/laptop_mode
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
echo min_power > /sys/class/scsi_host/host1/link_power_management_policy
echo min_power > /sys/class/scsi_host/host2/link_power_management_policy
echo min_power > /sys/class/scsi_host/host3/link_power_management_policy
echo min_power > /sys/class/scsi_host/host4/link_power_management_policy
echo min_power > /sys/class/scsi_host/host5/link_power_management_policy
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo 5 > /sys/module/snd_hda_intel/parameters/power_save
echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller
echo powersave > /sys/module/pcie_aspm/parameters/policy

не срабатывает.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

UnixNoob писал:
10.09.2021 13:30
создаю в /ect/acpi/events файл switch_to_battery с содержимым
acpid после этого перезапускали?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

Bizdelnick писал:
10.09.2021 13:42
UnixNoob писал:
10.09.2021 13:30
создаю в /ect/acpi/events файл switch_to_battery с содержимым
acpid после этого перезапускали?
Да, и права на исполнение выдавал.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
german
Сообщения: 79
ОС: Linux

Re: ACPI: свой скрипт

Сообщение german »

Скорее всего не срабатывает то событие которое прописано после event=...

Запустите acpi_listen (от рута) и выполните действие, которое вызывает событие.
acpi_listen вам выдаст как событие на самом деле называется.

А так прописана слишком длинная строка. Если хоть один символ не будет соответствовать, то acpid будет считать, что это не то событие и не обработает его.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

А что в логе?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

german писал(а):
10.09.2021 22:15
Запустите acpi_listen (от рута) и выполните действие, которое вызывает событие.
Эти события и были получены при запуске acpi_listen.
Bizdelnick писал:
10.09.2021 23:35
А что в логе?
Похоже скрипт отработал при включении-отключении от питания.

Код: Выделить всё

Sep 10 23:45:31 darkstar acpid: received netlink event "ac_adapter ACPI0003:00 00000080 00000001"
Sep 10 23:45:31 darkstar acpid: executing action "/etc/acpi/acpi_handler.sh ac_adapter ACPI0003:00 00000080 00000001"
Sep 10 23:45:31 darkstar root: ACPI group ac_adapter / action ACPI0003:00 is not defined
Sep 10 23:45:31 darkstar acpid: completed netlink event "ac_adapter ACPI0003:00 00000080 00000001"
Sep 10 23:45:32 darkstar kernel: ata2.00: ACPI cmd ef/10:03:00:00:00:a0 (SET FEATURES) filtered out
Sep 10 23:45:34 darkstar root: ACPI group processor / action LNXCPU:00 is not defined
Sep 10 23:45:34 darkstar root: ACPI group processor / action LNXCPU:01 is not defined
Sep 10 23:45:34 darkstar root: ACPI group processor / action LNXCPU:02 is not defined
Sep 10 23:45:34 darkstar root: ACPI group processor / action LNXCPU:03 is not defined
Sep 10 23:45:35 darkstar acpid: received netlink event "ac_adapter ACPI0003:00 00000080 00000000"
Sep 10 23:45:35 darkstar acpid: executing action "/etc/acpi/acpi_handler.sh ac_adapter ACPI0003:00 00000080 00000000"
Sep 10 23:45:35 darkstar root: ACPI group ac_adapter / action ACPI0003:00 is not defined
Sep 10 23:45:35 darkstar acpid: completed netlink event "ac_adapter ACPI0003:00 00000080 00000000"
Sep 10 23:45:35 darkstar acpid: received netlink event "ac_adapter ACPI0003:00 00000080 00000000"
Sep 10 23:45:35 darkstar acpid: rule from /etc/acpi/events/switch_to_battery matched
Sep 10 23:45:35 darkstar acpid: executing action "/etc/acpi/switch_to_battery.sh"
Sep 10 23:45:35 darkstar rfkill: block set for type bluetooth
Sep 10 23:45:35 darkstar last message buffered 2 times
Sep 10 23:45:35 darkstar acpid: action exited with status 0
Sep 10 23:45:35 darkstar acpid: rule from /etc/acpi/events/default matched
Sep 10 23:45:35 darkstar acpid: executing action "/etc/acpi/acpi_handler.sh ac_adapter ACPI0003:00 00000080 00000000"
Sep 10 23:45:35 darkstar root: ACPI group ac_adapter / action ACPI0003:00 is not defined
Sep 10 23:45:35 darkstar last message buffered 2 times
Sep 10 23:45:35 darkstar acpid: action exited with status 0
Sep 10 23:45:35 darkstar acpid: rule from /etc/acpi/events/lm_ac_adapter matched
Sep 10 23:45:35 darkstar acpid: executing action "/etc/acpi/actions/lm_ac_adapter.sh"

Видимо мне нужно отслеживать что-то другое, отвечающее за включение и отражающее текущее положение устройства, т.е от чего оно работает. Из логов похожее на это:

Код: Выделить всё

Sep 10 23:40:36 darkstar kernel: ACPI: AC: AC Adapter [ADP1] (off-line)
и писать что-то более сложное, чем я думал.
В /etc/acpi/events есть три файла, lm_ac_adapter, lm_battery и lm_lid (это на открытие/закрытие крышки).
Для примера в lm_ac_adapter такое содержимое:

Код: Выделить всё

event=ac_adapter.*
action=/etc/acpi/actions/lm_ac_adapter.sh
А в lm_ac_adapter.sh такое:

Код: Выделить всё

! /bin/sh

test -f /lib/udev/lmt-udev || exit 0

# ac on/offline event handler
/lib/udev/lmt-udev
Могу ли я внести желаемое сюда или это плохо?
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

UnixNoob писал:
11.09.2021 00:36
Видимо мне нужно отслеживать что-то другое, отвечающее за включение и отражающее текущее положение устройства, т.е от чего оно работает.
Не понял, зачем?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

Bizdelnick писал:
11.09.2021 01:01
Не понял, зачем?
Я хочу чтобы при включении выбиралось одно из двух правил и так же, в процессе работы, при подключении/отключении адаптера.
Сейчас срабатывает только второе, думаю правило нужно другое для этой ситуации.
Вообще это конечно проще делать с утилитой TLP, там по сути в конфиге прописываешь адаптер/батарея, но в slackware собрать x86_energy_perf_policy под ядро 5.14.2 мне не удалось. Но эта штука завязана на исходники ядра, поэтому для меня сложновато.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

UnixNoob писал:
11.09.2021 01:15
Я хочу чтобы при включении выбиралось одно из двух правил и так же, в процессе работы, при подключении/отключении адаптера.
Сейчас срабатывает только второе, думаю правило нужно другое для этой ситуации.
А что в конфиге сейчас прописано? Вы показывали только один скрипт и одно событие в конфиге.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

Bizdelnick писал:
11.09.2021 01:19
Вы показывали только один скрипт и одно событие в конфиге.
Я не совсем понимаю о каком конфиге речь.
Я ничего не трогал в конфигах, которые находились в /etc/acpi/*. Я создал power.sh и положил его в /etc/acpi/, выдав права на исполнение, оказалось этого мало.
Я ради эксперимента разбил power.sh из первого сообщения, на два:
1) Для работы от батареи - switch_to_battery.sh.
2) Для работы от адаптера - switch_to_adapter.sh
Узнал какие событие генерируются при включении-отключении адаптера и создал файл события (switch_to_battery) только для батареи и добавил его в в каталог /etc/acpi/events/.
Для адаптера питания все будет выглядеть так же. Но как оказалось это не отрабатывает при изначальном включении.

В Arch Wiki в примере с яркостью в /etc/acpi/handler.sh предлагают вписать такое:

Код: Выделить всё

ac_adapter)
    case "$2" in
        AC*|AD*)
            case "$4" in
                00000000)
                    echo -n 50 > /sys/class/backlight/acpi_video0/brightness
                    ;;
                00000001)
                    echo -n 100 > /sys/class/backlight/acpi_video0/brightness
                    ;;
            esac
Возможно мне надо что-то похожее.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2603
ОС: Gentoo

Re: ACPI: свой скрипт

Сообщение ormorph »

Можно сами просмотреть события:

Shell

# echo /var/log/testacpi.log

Shell

# cat /etc/acpi/events/default
event=.*
action=/etc/acpi/handler.sh %e

Shell

# cat /etc/acpi/handler.sh
#!/bin/bash
set $*
echo $* >>/var/log/testacpi.log
Далее запускаем демон acpid и смотрим лог:

Shell

# tail -f /var/log/testacpi.log
Можете попробовать отключить питание ноутбука и включить и посмотреть какие параметры передаются для обработки, и их уже обрабатывать в скрипте /etc/acpi/handler.sh, например нажатие на клавиши управлением яркостью.
Ну и конечно acpid обрабатывает события и при первом включении, события включения и выключения адаптера нет, по этому скорее всего нужно будет установить начальные параметры, для этого можно написать начальный init скрипт который обрабатывает вывод команды acpi:

Shell

# acpi -a
Adapter 0: on-line
И в зависимости от вывода устанавливать начальные параметры.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

UnixNoob писал:
11.09.2021 02:06
Я не совсем понимаю о каком конфиге речь.
UnixNoob писал:
11.09.2021 02:06
файл события (switch_to_battery) только для батареи и добавил его в в каталог /etc/acpi/events/
Вот в этом конфиге. Точнее, для двух событий их должно быть два (ну или один с регуляркой, соответствующей обоим событиям; тогда в скрипте надо разбирать, по какому из событий его запустился).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

ormorph писал(а):
11.09.2021 09:54
Можете попробовать отключить питание ноутбука и включить и посмотреть какие параметры передаются для обработки, и их уже обрабатывать в скрипте /etc/acpi/handler.sh, например нажатие на клавиши управлением яркостью.
Файла handler.sh нет, изначально в /etc/acpi/events/default указан acpi_handler.sh:

Код: Выделить всё

# cat /etc/acpi/acpi_handler.sh
IFS=${IFS}/
set $@

case "$1" in
  button)
    case "$2" in
      power) /sbin/init 0
         ;;
      *) logger "ACPI action $2 is not defined"
         ;;
    esac
    ;;
  *)
    logger "ACPI group $1 / action $2 is not defined"
    ;;
esac
После добавления строчек:

Код: Выделить всё

set $*
echo $* >>/var/log/testacpi.log
логи в файл добавляются только после команды

Код: Выделить всё

acpid -l
При включении соответственно он туда ничего не пишет.
ormorph писал(а):
11.09.2021 09:54
для этого можно написать начальный init скрипт который об
рабатывает вывод команды acpi
Не понял что мне надо написать.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

UnixNoob, так Вы конфиги свои покажете наконец? Что мы тут обсуждаем-то?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2603
ОС: Gentoo

Re: ACPI: свой скрипт

Сообщение ormorph »

UnixNoob писал:
12.09.2021 17:27
Не понял что мне надо написать.
Тут вам уже думать, у вас же слака, что то типа этого:
Spoiler

Код: Выделить всё

#!/bin/bash

start() {
	if /usr/bin/acpi -a|grep -q on-line ; then
		echo -n 100 > /sys/class/backlight/acpi_video0/brightness
	elif /usr/bin/acpi -a|grep -q off-line ; then
		echo -n 50 > /sys/class/backlight/acpi_video0/brightness
	fi
}

case "$1" in
	start)
		start
		;;
	*)
		echo $"Usage: $0 {start}"
		exit 1
esac

exit $?
Дальше уже что нужно дописать думайте сами.
UnixNoob писал:
12.09.2021 17:27
логи в файл добавляются только после команды
Быть того не может, этот скрипт должен выполняться при выполнении любого из событий, следовательно команда:

Shell

echo $* >>/var/log/testacpi.log
должна при выполнении любого из событий, постоянно записывать параметры переданные скрипту в лог файл.
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

Bizdelnick писал:
12.09.2021 17:40
так Вы конфиги свои покажете наконец?

Код: Выделить всё

# cat /etc/acpi/events/switch_to_battery
event=ac_adapter ACPI0003:00 00000080 00000000
action=/etc/acpi/switch_to_battery.sh

Код: Выделить всё

# cat /etc/acpi/switch_to_battery.sh
#!/bin/sh
echo 3 > /sys/class/backlight/acpi_video0/brightness
rfkill block bluetooth
echo 4 > /proc/sys/vm/laptop_mode
echo min_power > /sys/class/scsi_host/host0/link_power_management_policy
echo min_power > /sys/class/scsi_host/host1/link_power_management_policy
echo min_power > /sys/class/scsi_host/host2/link_power_management_policy
echo min_power > /sys/class/scsi_host/host3/link_power_management_policy
echo min_power > /sys/class/scsi_host/host4/link_power_management_policy
echo min_power > /sys/class/scsi_host/host5/link_power_management_policy
echo powersave > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo powersave > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
echo 5 > /sys/module/snd_hda_intel/parameters/power_save
echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller
echo powersave > /sys/module/pcie_aspm/parameters/policy

Код: Выделить всё

# cat /etc/acpi/events/switch_to_adapter
event=ac_adapter ACPI0003:00 00000080 00000001
action=/etc/acpi/switch_to_adapter.sh

Код: Выделить всё

# cat /etc/acpi/switch_to_adapter.sh
echo 0 > /proc/sys/vm/laptop_mode
	echo max_performance > /sys/class/scsi_host/host0/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host1/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host2/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host3/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host4/link_power_management_policy
	echo max_performance > /sys/class/scsi_host/host5/link_power_management_policy
	echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
	echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
	echo ondemand > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
	echo ondemand > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
	echo 10 > /sys/module/snd_hda_intel/parameters/power_save
	echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller
	echo default > /sys/module/pcie_aspm/parameters/policy

Но с отключением - подключением питания теперь более-менее я понял, вопрос как сделать чтобы при включении ноутбука тоже срабатывал один из этих.
ormorph писал(а):
12.09.2021 19:37
Тут вам уже думать, у вас же слака, что то типа этого:
Я подумал вы о скрипте, который нужен чтобы логи начали писаться и при старте.
ormorph писал(а):
12.09.2021 19:37
Быть того не может, этот скрипт должен выполняться при выполнении любого из событий
У меня нету команды acpi, только acpid, запуск которого прописан в /etc/rc.d/:

Код: Выделить всё

# Start acpid:
acpid_start() {
  if [ -x /usr/sbin/acpid -a -d  /proc/acpi ]; then
    echo "Starting ACPI daemon:  /usr/sbin/acpid"
    /usr/sbin/acpid
  fi
}

Пробовал ключ -l добавлять, не помогло.Может конфликтует с каким-то из ключей, если такое возможно.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2603
ОС: Gentoo

Re: ACPI: свой скрипт

Сообщение ormorph »

UnixNoob писал:
12.09.2021 20:07
У меня нету команды acpi
Ну так установите, это должен быть пакет с одноименным названием, вот, по гуглу сразу нашел, но скорее всего она должна быть у вас на установочном диске.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: ACPI: свой скрипт

Сообщение Bizdelnick »

UnixNoob писал:
12.09.2021 20:07
Но с отключением - подключением питания теперь более-менее я понял, вопрос как сделать чтобы при включении ноутбука тоже срабатывал один из этих.
А, понятно. Я думал, у Вас только на одно из двух событий реакция есть.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

ormorph писал(а):
12.09.2021 20:22
скорее всего она должна быть у вас на установочном диске.
Нет, там её не оказалось, поэтому я решил что были какие-то изменения и данная утилита не нужна. Она есть только в стороннем SBo.
Поставил, теперь выводит то же что и у вас. Логи по-прежнему не пишутся при включении.

Код: Выделить всё

# cat /etc/acpi/events/default 
event=.*
action=/etc/acpi/acpi_handler.sh %e

Код: Выделить всё

cat /etc/acpi/acpi_handler.sh
#!/bin/sh
# Default acpi script that takes an entry for all actions
set $*
echo $* >> /var/log/testacpi.log
Смотреть в итоге в сторону обработки вывода acpi -a?
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2603
ОС: Gentoo

Re: ACPI: свой скрипт

Сообщение ormorph »

UnixNoob писал:
17.09.2021 15:22
Логи по-прежнему не пишутся при включении.
UnixNoob писал:
17.09.2021 15:22
Смотреть в итоге в сторону обработки вывода acpi -a?
При включении ноута логи и не будут писаться, так как событие включения отключения адаптера отсутствует, по этому я и сказал, что надо обрабатывать как вариант ещё вывод acpi -a, чтобы определить подключен ли блок питания к ноуту или нет, и в зависимости от вывода уже устанавливать яркость и т. п.
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

ormorph писал(а):
17.09.2021 15:36
При включении ноута логи и не будут писаться, так как событие включения отключения адаптера отсутствует, по этому я и сказал, что надо обрабатывать как вариант ещё вывод acpi -a, чтобы определить подключен ли блок питания к ноуту или нет
Значит я вас не так понял. Я решил что мы пишем логи, чтобы выяснить каким образом, при включении, проверяется от чего питается ноутбук.
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2603
ОС: Gentoo

Re: ACPI: свой скрипт

Сообщение ormorph »

UnixNoob писал:
17.09.2021 16:27
Я решил что мы пишем логи, чтобы выяснить каким образом, при включении, проверяется от чего питается ноутбук.
Не, лог нужен просто для наглядности, посмотреть как реагирует acpid на события.
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1367
ОС: Slackware

Re: ACPI: свой скрипт

Сообщение UnixNoob »

Сделал в итоге следующее:
Создал в /etc/acpi/events switch_to_battery и switch_to_ac со следующим содержанием:

Код: Выделить всё

# cat /etc/acpi/events/switch_to_battery 
event=ac_adapter ACPI0003:00 00000080 00000000
action=/etc/acpi/switch_to_battery.sh

Код: Выделить всё

cat /etc/acpi/events/switch_to_ac
event=ac_adapter ACPI0003:00 00000080 00000001
action=/etc/acpi/switch_to_ac.sh
Ну и соответствующие им действия поместил в /etc/acpi/:

Код: Выделить всё

# cat /etc/acpi/switch_to_battery.sh
#!/bin/sh

# Start battery powered settings ---------------------------------------#

# Enable Laptop-Mode disk writing
echo 5 > /proc/sys/vm/laptop_mode

# Set SATA channel to power saving
for foo in /sys/class/scsi_host/host*/link_power_management_policy;
do echo min_power > $foo;
done

# Select Powersave CPU Governor
for foo in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor;
do echo powersave > $foo;
done

# Activate audio card power saving
# (sounds shorter than 5 seconds will not be played)
echo 5 > /sys/module/snd_hda_intel/parameters/power_save
echo 1 > /sys/module/snd_hda_intel/parameters/power_save_controller

# Activate USB autosuspend
for foo in /sys/bus/usb/devices/*/power/level;
do echo auto > $foo;
done

# Activate PCI autosuspend
for foo in /sys/bus/pci/devices/*/power/control;
do echo auto > $foo;
done

# Activate PCI Express power saving
echo powersave > /sys/module/pcie_aspm/parameters/policy

# End battery powered settings -----------------------------------------#

Код: Выделить всё

# cat /etc/acpi/switch_to_ac.sh
#!/bin/bash

# Start AC powered settings --------------------------------------------#

# Disable laptop mode
echo 0 > /proc/sys/vm/laptop_mode

# Set SATA channel: max performance
for foo in /sys/class/scsi_host/host*/link_power_management_policy;
do echo max_performance > $foo;
done

# CPU Governor: Ondemand
for foo in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor;
do echo ondemand > $foo;
done 

# Disable USB autosuspend
for foo in /sys/bus/usb/devices/*/power/level;
do echo on > $foo;
done

# Disable PCI autosuspend
for foo in /sys/bus/pci/devices/*/power/control;
do echo on > $foo;
done

# Disabile audio_card power saving
echo 0 > /sys/module/snd_hda_intel/parameters/power_save_controller
echo 0 > /sys/module/snd_hda_intel/parameters/power_save

# Disable PCE Express power saving
echo default > /sys/module/pcie_aspm/parameters/policy

# End AC powered settings ----------------------------------------------#
Для того чтобы оно отрабатывало при старте доустановил acpi-клиент из SBo и создал стартовый скрипт, как мне и говорили, в /etc/rc.d:

Код: Выделить всё

# cat /etc/rc.d/rc.powersave
#!/bin/bash

start() {
	if /usr/bin/acpi -a|grep -q on-line ; then
        	echo "Starting AC mode: /etc/acpi/switch_to_ac.sh"
        	/etc/acpi/switch_to_ac.sh
	elif /usr/bin/acpi -a|grep -q off-line ; then
        	echo "Starting Battery mode: /etc/acpi/switch_to_ac.sh"
		/etc/acpi/switch_to_battery.sh
	fi
}

case "$1" in
	start)
		start
		;;
	*)
		echo $"Usage: $0 {start}"
		exit 1
esac


Выдал всем скриптам права на исполнение и добавил запуск в файл rc.local (туда же внес отключение bluetooth при старте и смену яркости экрана, чтобы не дублировать их в два скрипта):

Код: Выделить всё

# cat /etc/rc.d/rc.local
#!/bin/bash

if [ -x /etc/rc.d/rc.powersave ]; then
        /etc/rc.d/rc.powersave start
fi

echo 3 > /sys/class/backlight/acpi_video0/brightness
rfkill block bluetooth

Спасибо всем ответившим и особенно ormorph :yes3:
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Ответить