Страница 1 из 3

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 09:33
Sova
Здравствуйте! Незнаю куда писать (плохо знаком со структурой форума), поэтому создал запись здесь.
В Linux Mint <= 18, с любым DE, была архиполезнейшая фича - при переключении питания на батарейку (на ноутбуке, разумеется), яркость дисплея снижалась где-то вдвое и восстанавливалась обратно если запитать машину от сети. Снижение яркости у меня увеличивает время работы от батареи вдвое (!). В Минт 19 (со всеми DE) эту фишку выпилили (зачем-то). Сейчас я снижаю яркость вручную (кнопками Fn + (<- || ->)), но это не удобно (много раз давить надо (пробовал alias делать чтобы xrandr-ом одной командой из консоли гасить, но это тоже не торт), плюс можно просто забыть переключить и быстро посадить батарею).
Вопрос: как сделать автоматическое снижение и повышение яркости в зависимости от типа питания?
ЗЫ: При гуглении у меня создалось впечатление что этот вопрос беспокоит меня одного - не только нет решений, но даже никто не спрашивает. Так что может быть эту настройку куда-то хитро спрятали? Хотя я все перерыл и даже в gconf-editor-е ковырялся и ничего не нашел.

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 09:54
symon2014
Sova,
Снимок экрана в 2020-03-15 09-53-59.png

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 10:01
Sova
symon2014, в Cinnamon такого нет (да и в остальных на виртуалке я не видел)

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 10:15
demonlibra
http://askubuntu.com/questions/613741/u ... at-instead
http://www.linux.org.ru/forum/desktop/11554844

Сперва определите команду и диапазон для изменения яркости. Например у меня это:

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

echo -n 1080 | sudo tee /sys/class/backlight/intel_backlight/brightness
Создать файл /etc/udev/rules.d/powersafe.rules

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

sudo nano powersafe.rules /etc/udev/rules.d/powersafe.rules

SUBSYSTEM=="power_supply", ATTR{online}=="0", RUN+="/usr/local/bin/powersafe.sh true"
SUBSYSTEM=="power_supply", ATTR{online}=="1", RUN+="/usr/local/bin/powersafe.sh false"
Для просмотра состояния выполнить в терминале, после чего вытащить и вставить зарядку

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

udevadm monitor -p -u -s power_supply
В моём случае триггером для сценария служит атрибут status. На другом железе атрибут и его значения могут быть другими.

Создать файл /usr/local/bin/powersafe.sh

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

sudo nano powersafe.sh /usr/local/bin/powersafe.sh

#!/bin/bash

case $1 in
    true)
		echo -n 800 > /sys/class/backlight/intel_backlight/brightness
    ;;
    false)
		echo -n 1380 > /sys/class/backlight/intel_backlight/brightness
    ;;
esac
Вам нужно будет найти для своего железа имя файла и подставить свои значения яркости.
В этот сценарий можно добавить другие действия. Например менять время парковки жесткого диска.

Дать сценарию права для запуска

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

sudo chmod +x /usr/local/bin/powersafe.sh
Добавить в автозагрузку чтобы при включении происходил опрос и яркость менялась. Иначе будет задана установленная при последней работе.

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

sudo udevadm trigger -s power_supply
Создать файл

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

sudo nano /etc/systemd/system/powersafe.service

[Unit]
Description=brightness
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/udevadm trigger -s power_supply

[Install]
WantedBy=multi-user.target
Выполнить в терминале

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

sudo systemctl daemon-reload
sudo systemctl enable powersafe.service

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 13:30
Sova
demonlibra, Сделал, работает. Вообще отличное решение! Только не понял:
1) "sudo -i" с самого начала зачем? Ведь остальные команды все-равно через sudo написаны
2) "sudo nano powersafe.rules /etc/udev/rules.d/powersafe.rules" зачем "powersafe.rules" после nano? если там дальше путь прописан? Дальше "powersafe.sh" - таже история
3) Почему разрабы сами этого не сделали?
4) Вместо "sudo echo -n 1380 > /sys/class/backlight/intel_backlight/brightness" я получил значение из "cat /sys/class/backlight/intel_backlight/max_brightness" и вставил в /usr/local/bin/powersafe.sh его и его половину соответственно

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 13:54
demonlibra
1) Без sudo -i у меня следующая команда выдает "Отказано в доступе"
2) Вы правы, это я напортачил. Хорошо, что Вы не бездумно копируете команды. :bravo:
3) Не знаю :sry: . Оставляют место для творчества :dash2:

У меня два диска, SSD с системой и HDD с помойкой. Я добавил в сценарий изменение времени парковки диска.

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

#!/bin/bash

case $1 in
    true)
		echo -n 800 > /sys/class/backlight/intel_backlight/brightness
		hdparm -S60 /dev/sda
    ;;
    false)
		echo -n 1380 > /sys/class/backlight/intel_backlight/brightness
		hdparm -S240 /dev/sda
    ;;
esac

Автоматическое снижение яркости

Добавлено: 15 мар 2020, 14:25
symon2014
demonlibra писал(а):
15 мар 2020, 10:15
sudo -i
sudo echo -n 1380 > /sys/class/backlight/intel_backlight/brightness
Sova писал(а):
15 мар 2020, 13:30
"sudo -i" с самого начала зачем? Ведь остальные команды все-равно через sudo написаны
demonlibra писал(а):
15 мар 2020, 13:54
Без sudo -i у меня следующая команда выдает "Отказано в доступе"
Это путаница , как в испорченном телефоне (детская игра). Из-за команды ">" , sudo , бывшее в начале строки , перестаёт действовать. Команда sudo -i задаёт повышенные привилегии для всех последующих действий , но тогда sudo в следующей строке теряет смысл . По уму (не сильно большому :hoho: ) правильнее выглядело бы так.
sudo -i
echo -n 1380 > /sys/class/backlight/intel_backlight/brightness

Автоматическое снижение яркости

Добавлено: 08 фев 2021, 07:03
demonlibra
symon2014 писал(а):
15 мар 2020, 14:25
sudo -i
echo -n 1380 > /sys/class/backlight/intel_backlight/brightness
Мой ум с этим вариантом согласен на все 100. Проверка в терминале подтверждает признаки наличия интеллекта.

Автоматическое снижение яркости

Добавлено: 08 фев 2021, 07:19
rogoznik
demonlibra писал(а):
08 фев 2021, 07:03
Мой ум с этим вариантом согласен на все 100. Проверка в терминале подтверждает признаки наличия интеллекта.
Думаю лучше было бы так

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

echo -n 1380 | sudo tee /sys/class/backlight/intel_backlight/brightness

Автоматическое снижение яркости

Добавлено: 08 фев 2021, 07:22
Sova
rogoznik писал(а):
08 фев 2021, 07:19
demonlibra писал(а):
08 фев 2021, 07:03
Мой ум с этим вариантом согласен на все 100. Проверка в терминале подтверждает признаки наличия интеллекта.
Думаю лучше было бы так

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

echo -n 1380 | sudo tee /sys/class/backlight/intel_backlight/brightness
Я тему поднял обратно, потому что в Mint 20.1 оно работать перестало. Сервис в Системд не запускался, потому что udevadm переехал из /sbin в /bin. Это я поправил (в файле /etc/systemd/system/powersafe.service), но все-равно оно автоматически теперь не срабатывает

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 11:41
demonlibra
Sova писал(а):
08 фев 2021, 07:22
в Mint 20.1 оно работать перестало
Просто команда изменения яркости в терминале работает?

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 13:40
demonlibra
Проверил у себя на Mint 20.1
Работает.
Только изменил путь к udevadm в файле /etc/systemd/system/powersafe.service
ExecStart=/usr/bin/udevadm trigger -s power_supply

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 14:45
Sova
demonlibra писал(а):
09 фев 2021, 13:40

Работает.
Только изменил путь к udevadm ]
А у меня результата нет.
Если просто в консоли сделать "sudo udevadm trigger -s power_supply", то подсветка переключается, а автоматически нет.
Что еще проверить можно?

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 17:39
demonlibra
Через терминал яркость меняется?

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

echo -n 1080 | sudo tee /sys/class/backlight/intel_backlight/brightness
Это команда для моего железа. Вы подставьте свою.

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 17:56
Sova
demonlibra писал(а):
09 фев 2021, 17:39
Через терминал яркость меняется?

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

echo -n 1080 | sudo tee /sys/class/backlight/intel_backlight/brightness
Это команда для моего железа. Вы подставьте свою.
Да, меняется. Впечатление что удав не обрабатывает события питания, поэтому вручную меняется, а автоматически нет.

Моя команда "echo -n 60000 | sudo tee /sys/class/backlight/intel_backlight/brightness", я с самого начала в скриптах так сделал

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 18:07
demonlibra
Покажите вывод команды:

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

sudo systemctl status powersafe.service

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 18:11
Sova
demonlibra писал(а):
09 фев 2021, 18:07
Покажите вывод команды:

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

sudo systemctl status powersafe.service
● powersafe.service - brightness
Loaded: loaded (/etc/systemd/system/powersafe.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2021-02-09 18:41:57 +07; 3h 27min ago
Process: 933 ExecStart=/usr/bin/udevadm trigger -s power_supply (code=exited, status=0/SUCCESS)
Main PID: 933 (code=exited, status=0/SUCCESS)

фев 09 18:41:57 TUF-Gaming-FX505GT systemd[1]: Starting brightness...
фев 09 18:41:57 TUF-Gaming-FX505GT systemd[1]: powersafe.service: Succeeded.
фев 09 18:41:57 TUF-Gaming-FX505GT systemd[1]: Finished brightness.

Были проблемы из-за смены пути udevadm, но я путь исправил.

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 18:20
demonlibra
Странно, я этот сервис у себя удалил, а яркость всё равно меняется. Чудеса.

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 18:33
Sova
demonlibra писал(а):
09 фев 2021, 18:20
Странно, я этот сервис у себя удалил, а яркость всё равно меняется. Чудеса.
А у меня наоборот :)

Автоматическое снижение яркости

Добавлено: 09 фев 2021, 20:41
demonlibra
Сервис /etc/systemd/system/powersafe.service служит только для того чтобы пнуть при загрузке системы.

Всё лежит на /etc/udev/rules.d/powersafe.rules.
Может его надо как-то активировать.