Форум русскоязычного сообщества Ubuntu


Автор Тема: Asus X200MA Настройка автоматической яркости экрана при работе от батареи  (Прочитано 1377 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн AlexDem

  • Автор темы
  • Активист
  • *
  • Сообщений: 467
    • Просмотр профиля
Имеется ноут. Работает на нем 20.04. Все работает на нем штатно, никаких глюков нет, клавиатура работает отлично, подстройка яркости кнопками Fn + F5/F6 работает как надо.
Есть задача немного автоматизировать процесс подстройки яркости, как на Windows 10, чтобы при отключении внешнего питания от сети яркость экрана автоматом снижалась на заданную величину (30% или 50%). В целях эконимии батарейки. Есть ли подобные программы для Linux? Поиск выдает только нечто, связанное с автоматической яркостью, управляемой от датчика освещения, но у меня его нет, и это не то, что надо. Надо, чтобы яркость менялась именно в зависимости от источника питания.
Заранее спасибо за советы.

Оффлайн Morisson

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 4742
    • Просмотр профиля
sudo nano /etc/udev/rules.d/50-powersave.rulesТуда вставляете
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/powersave true"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/powersave false"
Создаете скрипт
sudo nano /usr/bin/powersave
в котором
#!/bin/sh

on_ac() {
    tee /sys/class/backlight/amdgpu_bl1/brightness <<< 255

}
on_battery() {
    tee /sys/class/backlight/amdgpu_bl1/brightness <<< 55
}

guess() {
    if cat /sys/class/power_supply/ACAD/online | grep 0 > /dev/null 2>&1
    then
        on_battery
    else
        on_ac
    fi
}

case "$1" in
    true)
        on_battery
        ;;
    false)
        on_ac
        ;;
    *)
        guess
        ;;
esac
exit 0
где /sys/class/backlight/amdgpu_bl1/brightness - путь до Вашего интерфейса, а цифра- уровень яркости;
/sys/class/power_supply/ACAD/online - путь до Вашей батарейки. Вместо ACAD это может быть BAT0 или BAT1.
Все эти пути можно посмотреть просто в файловом менеджере.

Делаете скрипт исполняемым. И теперь после перезагрузки udev-правило будет менять яркость в зависимости от подключенной зарядки.
Туда можно также добавлять разные фичи для энергосбережения.

Вот пример моего скрипта
#!/bin/sh

on_ac() {
    echo 500 > /proc/sys/vm/dirty_writeback_centisecs;
    echo 0 > /proc/sys/vm/laptop_mode;
    echo 0 > /sys/module/snd_hda_intel/parameters/power_save;
    find /sys/devices/pci* -path "*power/control" -exec bash -c "echo on > '{}'" \;
    find /sys/bus/i2c/devices/i2c-*/device/power/control -exec bash -c "echo on > '{}'" \;
    find /sys/bus/usb/devices/usb*/power/control -exec bash -c "echo on > '{}'" \;
    tee /sys/class/scsi_host/host*/link_power_management_policy <<< max_performance;
    tee /sys/module/ahci/parameters/mobile_lpm_policy <<< 1;
    tee /sys/module/pcie_aspm/parameters/policy <<< performance;
#    tee /sys/devices/system/cpu/smt/control <<< on;
#    tee /sys/devices/system/cpu/cpufreq/policy*/scaling_governor <<< schedutil;
    tee /sys/devices/system/cpu/cpufreq/boost <<< 1;
    /usr/bin/python3.8 /usr/bin/zenstates.py -p 0 --enable -f 64 -d A -v 35;
    /usr/bin/python3.8 /usr/bin/zenstates.py -p 1 --enable -f 66 -d C -v 60;
    /usr/bin/python3.8 /usr/bin/zenstates.py -p 2 --enable -f 68 -d E -v 66;
    ryzenadj --psi0-current=0x3C --vrmmax-current=60000 --min-gfxclk=500 --max-gfxclk=1300 --min-fclk-frequency=900 --max-fclk-frequency=1900 --tctl-temp=99 --stapm-limit=35000 --stapm-time=850 --fast-limit=45000 --slow-limit=35000;
    tee /sys/class/drm/card*/device/power_dpm_force_performance_level <<< auto;
    tee /sys/kernel/debug/vgaswitcheroo/switch <<< IGD;
    tee /sys/kernel/debug/vgaswitcheroo/switch <<< OFF;
    tee /sys/class/backlight/amdgpu_bl1/brightness <<< 255;
    ifconfig enp2s0f1 up;
    iw dev wlp3s0 set power_save off;
    rfkill block bluetooth
}

on_battery() {
    echo 1500 > /proc/sys/vm/dirty_writeback_centisecs;
    echo 5 > /proc/sys/vm/laptop_mode;
    echo 1 > /sys/module/snd_hda_intel/parameters/power_save;
    find /sys/devices/pci* -path "*power/control" -exec bash -c "echo auto > '{}'" \;
    find /sys/bus/i2c/devices/i2c-*/device/power/control -exec bash -c "echo auto > '{}'" \;
    find /sys/bus/usb/devices/usb*/power/control -exec bash -c "echo auto > '{}'" \;
    tee /sys/class/scsi_host/host*/link_power_management_policy <<< med_power_with_dipm;
    tee /sys/module/ahci/parameters/mobile_lpm_policy <<< 3;
    tee /sys/module/pcie_aspm/parameters/policy <<< powersupersave;
#    tee /sys/devices/system/cpu/smt/control <<< off;
#    tee /sys/devices/system/cpu/cpufreq/policy*/scaling_governor <<< schedutil;
    tee /sys/devices/system/cpu/cpufreq/boost <<< 0;
    /usr/bin/python3.8 /usr/bin/zenstates.py -p 0 --enable -f 1E -d 4 -v 93;
    /usr/bin/python3.8 /usr/bin/zenstates.py -p 2 --enable -f 13 -d 4 -v A0;
    /usr/bin/python3.8 /usr/bin/zenstates.py -p 1 --enable -f 14 -d 4 -v 96;
    ryzenadj --psi0-current=0x11 --vrmmax-current=13000 --min-gfxclk=400 --max-gfxclk=600 --min-fclk-frequency=800 --max-fclk-frequency=800 --tctl-temp=85 --stapm-limit=10000 --stapm-time=60 --fast-limit=10000 --slow-limit=10000;
    tee /sys/class/drm/card*/device/power_dpm_force_performance_level <<< low;
    tee /sys/kernel/debug/vgaswitcheroo/switch <<< IGD;
    tee /sys/kernel/debug/vgaswitcheroo/switch <<< OFF;
    tee /sys/class/backlight/amdgpu_bl1/brightness <<< 55;
    ifconfig enp2s0f1 down;
    iw dev wlp3s0 set power_save on;
    rfkill block bluetooth
}

guess() {
    if cat /sys/class/power_supply/ACAD/online | grep 0 > /dev/null 2>&1
    then
        on_battery
    else
        on_ac
    fi
}

case "$1" in
    true)
        on_battery
        ;;
    false)
        on_ac
        ;;
    *)
        guess
        ;;
esac
exit 0

Оффлайн AlexDem

  • Автор темы
  • Активист
  • *
  • Сообщений: 467
    • Просмотр профиля
Создаете скрипт
Спасибо, попробую. У меня была мысль про скрипты, но я думал, что может есть что-то готовое, уже с рюшечками или даже под GUI.
Но как вариант вполне годно.

Пользователь добавил сообщение 14 Ноябрь 2020, 22:52:02:
Создаете скрипт
Еще раз спасибо за отличную идею. Правда этот скрипт отчего то не заработал, но заработала эта связка:

sudo nano /etc/udev/rules.d/50-powersave.rulesSUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/usr/bin/powersave false"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/usr/bin/powersave true"
sudo nano /usr/bin/powersave#!/bin/sh

FILE="/sys/class/backlight/intel_backlight/brightness";

if [ "$1"  = "true" ]; then
    echo "7500" > $FILE;
fi

if [ "$1" = "false" ]; then
    echo "3500" > $FILE;
fi




« Последнее редактирование: 14 Ноябрь 2020, 22:52:38 от AlexDem »

 

Страница сгенерирована за 0.077 секунд. Запросов: 26.