LINUX.ORG.RU

Управление энергопрофилем видеокарты через управление питанием kde4

 ,


1

3

В общем, идея такая: в управлении питанием в кедах есть возможность запускать скрипт при подключении и отключении блока питания (ноутбук, естественно).

Собственно, система у меня стартует с echo middle > /sys/class/drm/card0/device/power_profile. Он же должен активироваться при подключении адаптера. При переходе на батарею должен активироваться low вместо middle. Как выяснилось, это добавляет 20-30 минут, в среднем, к работе от батареи.

Руками тыкать не хочется.

Но с другой стороны, это надо запускать от рута или через sudo. Пароль вводить при каждом чихе тоже не хочется. И ведь не совать echo в судоерс!

В общем, как грамотнее выйти из положения?

★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

написать скрипт обёртку. тыкать в скрипт из юзерспейса.

а ещё стоит зареквестить фичу у разрабов powerdevil

Thero ★★★★★
()
Последнее исправление: Thero (всего исправлений: 1)
Ответ на: комментарий от Thero

написать скрипт обёртку. тыкать в скрипт из юзерспейса.

Каждый раз тыкать пароль не хотеть.

Имеется в виду, что в скрипте что-то вроде sudo -c bash «echo low > ... », и срабатывает автоматом при включении/отключении блока питания. У меня в данном случае пробелы с правами.

Например в арче, чтоб работать с cpufreq от имени пользователя, надо было в visudo добавить cpufreq в sudo без пароля. А тут как поступить? Не добавлять же bash аналогично.

ekzotech ★★★★
() автор топика
Ответ на: комментарий от rimsleur

скрипту

suid-бит

Ещё один пионэр.

anonymous
()

Запили демон, управляемый через системную шину D-Bus, который будет запускаться от рута и управлять питанием видеокарты. Права на вызов методов этого демона можно настроить через polkit.

gentoo_root ★★★★★
()

Отловить событие с помощью acpi_listen, создать соответствующе правило в /etc/acpi/events, в котором будет вызов скрипта из /etc/acpi/actions. Только всё файлы должны принадлежать пользователю root, а исполняемый скрипт должен быть исполняемым.

Кстати, это решение будет универсальным и не завязанным на какое–либо DE.

carasin ★★★★★
()
Последнее исправление: carasin (всего исправлений: 1)
Ответ на: комментарий от Thero

Я правильно понял?

Делается скрипт, именуется, допустим, pm-low, второй pm-mid, со строкой echo low > /sys/class.., а потом этот скрипт добавляется в sudoers без пароля? Насколько безопасен такой метод, если скрипты кидать куда-нибудь в /usr/bin ?

ekzotech ★★★★
() автор топика
Ответ на: комментарий от Novell-ch

Ну можно и руками через консоль переключать. Только лень каждый раз.

Кеды отлавливают момент подключения/отключения БП, есть пунктик про скрипт. Только я хз как это сделать получше.

ekzotech ★★★★
() автор топика
Ответ на: комментарий от Pavval

Всегда пожалуйста. Аналогично можно и функциональные клавиши заводить / переназначать (если в соответствующем platform_driver'е функционал не реализован).

carasin ★★★★★
()
Ответ на: комментарий от ekzotech

можешь написать и один с параметрами.. как удобней.. безопасность обратно пропорциональна тому насколько человек без рут пароля сможет изменить содержимое скрипта.

Тем не менее запросить фичу у разрабов павердевила нужно и правильно энивэй.

Thero ★★★★★
()
Ответ на: комментарий от rimsleur

А что так нельзя? Я просто так не делал, не было необходимости.

rimsleur
()
Ответ на: комментарий от ekzotech

Ой нет, я не специалист. Для меня YaST - аналог «Панели управления» Windows, где можно настроить мышкой, а не клавиатурой, системные компоненты и оборудование.

ZenitharChampion ★★★★★
()

Тэкс.

Я застрял.

Строка в /etc/sudoers:

%wheel  localhost = (root) NOPASSWD:/usr/bin/pm-low ,/usr/bin/pm-mid ,/usr/bin/pm-high

Содержимое pm-low:

#!/bin/bash
echo low > /sys/class/drm/card0/device/power_profile

При попытке запустить от пользователя sudo /usr/bin/pm-low - просит пароль рута. Какова хрена?

Cast gentoo_root, Thero, carasin

ekzotech ★★★★
() автор топика
Ответ на: комментарий от ekzotech

Так, было найдено промежуточное решение. Не совсем изящное, на мой взгляд, но зато эффективно работающее без лишних костылей.

Итак, правим /etc/sudoers (не забываем про visudo или Редактор sudo в случае opensuse).

Должна быть такая строка:

%wheel  localhost = (root) NOPASSWD:/usr/bin/pm-low ,/usr/bin/pm-mid ,/usr/bin/pm-high

Содержимое pm-{low,mid,high} соответственное:

#!/bin/bash
echo {low,middle,high} > /sys/class/drm/card0/device/power_profile

Дальше в Энергосбережении KDE ставим «Запустить сценарий», забиваем sudo /путь/к/pm-..

Всё, теперь при отключении питания ноутбук переходит на экономию энергии и профиль low. При подключении питания - на middle.

ekzotech ★★★★
() автор топика
Ответ на: комментарий от carasin

Ну я это пока не осиливаю.

А так да, наверное ты прав. Но раз уж powerdevil всем заруливает - почему б ему не зарулить и этим процессом?

ekzotech ★★★★
() автор топика
Ответ на: комментарий от ekzotech

Блин... Там, наоборот, делать нечего:

$ acpi_listen
Отсоединяем кабель питания:
ac_adapter ACPI0003:00 00000080 00000000
processor LNXCPU:00 00000081 00000000
processor LNXCPU:01 00000081 00000000
processor LNXCPU:02 00000081 00000000
processor LNXCPU:03 00000081 00000000
Подсоединяем обратно:
ac_adapter ACPI0003:00 00000080 00000001
processor LNXCPU:00 00000081 00000000
processor LNXCPU:01 00000081 00000000
processor LNXCPU:02 00000081 00000000
processor LNXCPU:03 00000081 00000000
Смотрим, что находится в /etc/acpi/events/ :
$ ls /etc/acpi/events/
powerconf  videoconf

$ cat /etc/acpi/events/powerconf 
# ACPID config to power down machine if powerbutton is pressed, but only if
# no gnome-power-manager is running

event=button/power.*
action=/etc/acpi/actions/power.sh
По аналогии делаем свои евенты:
$ cat /etc/acpi/events/supplyoff
event=ac_adapter ACPI0003:00 00000080 00000000
action=/etc/acpi/actions/profilelow.sh

$ cat /etc/acpi/events/supplyon
event=ac_adapter ACPI0003:00 00000080 00000001
action=/etc/acpi/actions/profilemiddle.sh
а также свои скрипты profilelow.sh и profilemiddle.sh (размещать их нужно в /etc/acpi/actions/), содержание которых у Вас уже есть.

Евенты и скрипты, повторюсь, должны принадлежать root'у, а скрипты, помимо этого, должны быть ещё и исполняемыми.

UPD: если не сработают записи вида ac_adapter ACPI0003:00 00000080 {00000000;00000001}, думаю, можно сократить до ac_adapter*00000000 / ac_adapter*00000001.

carasin ★★★★★
()
Последнее исправление: carasin (всего исправлений: 1)
Ответ на: комментарий от ekzotech

Пожалуйста ;D

По результатам отпишитесь.

carasin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.