Простой скрипт энергосбережения.

Форум поддержки для русскоязычных пользователей
Forum rules
Topics in this forum are automatically closed 6 months after creation.
Locked
AxaRu
Level 1
Level 1
Posts: 15
Joined: Tue Jan 16, 2018 1:47 pm

Простой скрипт энергосбережения.

Post by AxaRu »

Вопросом энергосбережения я заморочился еще лет 10 назад.
В целом процедура настройки не сложная, но муторная. Нужно залесть в 2 десятка параметров и выставить оптимальные значения.
Несколько лет назад я пришел к выводу, что проще всего для установки оптимальных значений использовать powertop.
В нем есть ключ --autotune, который инициирует необходимые установки.
Единственное, чтобы клавиатура и мышь не подвисали, нужно для соответсвующих портов usb снять режим энергоэффективности.
Я написал простой скрипт, который при старте устанавливает минимальное энергопотребление.

Code: Select all

#/bin/bash
# 
# powertop-tune  - autotune power consumption
#
VERSION="0.91"
DEBUG=1

(($DEBUG)) && . ~/bin/loging.sh

if [ -f /usr/sbin/powertop ] ; then
  sudo /usr/sbin/powertop --auto-tune
  if [ $? -eq 0 ] ; then
    USB_RECIEVER=""
    #LOGITECH_ID="046d"
    LOGITECH=$(grep 046d /sys/bus/usb/devices/*/idVendor); ERR=$?
    if [ $ERR -eq 0 ] ; then
      LOGITECH_POWER_CONTROL=$(echo "$LOGITECH" | sed -e 's|idVendor:046d|power/control|g')
      echo 'on'  | sudo tee "$LOGITECH_POWER_CONTROL"
      USB_RECIEVER="Logitech USB Reciever found."
      (($DEBUG)) && echo $USB_RECIEVER
    fi
    #RAPOO_ID="24ae"
    RAPOO=$(grep 24ae /sys/bus/usb/devices/*/idVendor); ERR=$?
    if [ $ERR -eq 0 ] ; then
      RAPOO_POWER_CONTROL=$(echo "$RAPOO" | sed -e 's|idVendor:24ae|power/control|g')
      echo 'on'  | sudo tee "$RAPOO_POWER_CONTROL"
      USB_RECIEVER="Rapoo USB Reciever found."
      (($DEBUG)) && echo $USB_RECIEVER
    fi
    /usr/bin/notify-send "Powertop" "${USB_RECIEVER} Autotune done" -i "/usr/share/icons/Humanity/devices/48/battery.svg"
  fi
fi
Сохранить скрипт в директории ~/bin под именем powertop-tune

В начале скрипта вызывается скрипт логирования ~/bin/loging.sh. Скрипт очень простой и его можно закоментировать. Если есть желание его оставить, то вот он:

Code: Select all

#/bin/bash
#
# logging script
#

USER=$(whoami)
LOGFILE=~/autostart.log

# redirect stdout and stderr to logfile
exec >>/home/$USER/autostart.log 2>&1

# announce started
echo "----------------------------------------------------"
echo "$(date +'%b %d %X'), $(whoami), $(basename $0): starting"
Powertop вызывается с правами root. Чтобы не запрашивался пароль, нужно внести powertop, powertop-tune и tee в sudoerrs.
Для этого из под рута можно выполнить следующие команды:
$ echo "$USER ALL = (ALL) NOPASSWD: /usr/sbin/powertop" > /etc/sudoers.d/powertop
$ echo "$USER ALL = (ALL) NOPASSWD: /home/$USER/bin/powertop-tune" >> /etc/sudoers.d/powertop
$ echo "$USER ALL = (ALL) NOPASSWD: /usr/bin/tee" >> /etc/sudoers.d/powertop
Вместо USER подставьте ваше имя.
Last edited by LockBot on Wed Dec 28, 2022 7:16 am, edited 2 times in total.
Reason: Topic automatically closed 6 months after creation. New replies are no longer allowed.
User avatar
root
Level 3
Level 3
Posts: 133
Joined: Wed Mar 13, 2019 11:57 am

Re: Простой скрипт энергосбережения.

Post by root »

Переписать основной скрипт, добавив взаимодействие по циклу, который будет извлекать данные из массивов. Каких массивов? Тех, которые будут ответом от скрипта-обертки (как их извлекать: из статичного файла в системе, каждый раз после вызова обертки или путем ручного добавления значений в основной скрипт - не принципиально). Сделать скрипт-обертку с "id вендора - название устройства", который предоставляет возможность выбора тех устройств, которые пользователь сам хочет; через псевдографику в терминале или графику типа zenity/yad.
------------------------------------------------------------
Иными словами, упростить для конечного пользователя
AxaRu
Level 1
Level 1
Posts: 15
Joined: Tue Jan 16, 2018 1:47 pm

Re: Простой скрипт энергосбережения.

Post by AxaRu »

root wrote: Mon Jun 14, 2021 10:57 am Сделать скрипт-обертку с "id вендора - название устройства", который предоставляет возможность выбора тех устройств, которые пользователь сам хочет; через псевдографику в терминале или графику типа zenity/yad.
------------------------------------------------------------
Иными словами, упростить для конечного пользователя
Он и так предельно прост для пользователя. Скрипт проверяет какое устройство и а какой порт подключено и активизирует только это оборудование.
User avatar
root
Level 3
Level 3
Posts: 133
Joined: Wed Mar 13, 2019 11:57 am

Re: Простой скрипт энергосбережения.

Post by root »

Тогда что это за жесткая однотипная привязка?
LOGITECH=$(grep 046d /sys/bus/usb/devices/*/idVendor)
RAPOO=$(grep 24ae /sys/bus/usb/devices/*/idVendor)
AxaRu
Level 1
Level 1
Posts: 15
Joined: Tue Jan 16, 2018 1:47 pm

Re: Простой скрипт энергосбережения.

Post by AxaRu »

Тогда что это за жесткая однотипная привязка?
Я пользуюсь двумя типами мышей.
У меня не было задачи вести базу данных всех мышей всех производителей.
Если вы используете мышь другого производителя просто добавьте ее в скрипт.
ID производителей можете посмотреть здесь https://usb-ids.gowdy.us/read/UD/ или здесь https://devicehunt.com/all-usb-vendors
Скрипт открытый и если что не ясно, я готов рассказать.


Удачи.
User avatar
root
Level 3
Level 3
Posts: 133
Joined: Wed Mar 13, 2019 11:57 am

Re: Простой скрипт энергосбережения.

Post by root »

О том и речь. Откуда обычному пользователю было узнать о таких нюансах? Зато логирование расписали. А какой от него смысл? Достаточно notify-send с кодом ошибки, если что-то пошло ни так.

Данные сайты имеют мало смысла, достаточно скомандовать lsusb и найти интересующее устройство из списка.

И что это за рекомендация?
sudo echo "$USER ALL = (ALL) NOPASSWD: /usr/bin/tee" >> /etc/sudoers.d/powertop
Мало того, что данная команда не сработает (echo вызовится с sudo, а перенаправление - с обычными правами), так еще и несет в себе целевую логику под названием "сделай огромную дырень в безопасности"?! Почему не накатать системным сервисом?
AxaRu
Level 1
Level 1
Posts: 15
Joined: Tue Jan 16, 2018 1:47 pm

Re: Простой скрипт энергосбережения.

Post by AxaRu »

offtopic wrote:Вопрос риторический, но требует осмысления: "Почему русская борда популярной системы Linux Mint полумертвая?"
root wrote: Wed Jun 16, 2021 8:13 pm sudo echo "$USER ALL = (ALL) NOPASSWD: /usr/bin/tee" >> /etc/sudoers.d/powertop
echo вызовится с sudo, а перенаправление - с обычными правами)
Да, накосячил малость. Поправил в первом сообщении.
User avatar
root
Level 3
Level 3
Posts: 133
Joined: Wed Mar 13, 2019 11:57 am

Re: Простой скрипт энергосбережения.

Post by root »

Ммм...

sudo -v # вводим пароль (необязательная команда)

Code: Select all

bins=("/usr/sbin/powertop" "/home/$USER/bin/powertop-tune" "/usr/bin/tee")
for i in "${bins[@]}"; do echo "$USER ALL = (ALL) NOPASSWD: $i" | sudo tee -a /etc/sudoers.d/powertop; done
Locked

Return to “Русский - Russian”