LINUX.ORG.RU

Как правильно задать настройку яркости при старте?

 , ,


0

1

Asus g75vw. Убунта 16.04
С дровами Nvidia яркость экрана после перезагрузки всегда на максимум сбивается. Всякие xbacklight и прочие не устраивают. Стоит Indicator-brightness, который сохраняет установленную яркость после перезагрузки только с дровами nouveau.
Решение проблемы вижу так. В /etc/rc.local прописываю

sudo sh -c 'echo 54 > /sys/class/backlight/nvidia_0/brightness'
Редко бывает что не срабатывает. Раздражает. Поэтому изменил эту строку так
echo 54 | sudo tee /sys/class/backlight/nvidia_0/brightness
Тоже самое. Иногда не срабатывает. Засунул обе эти команды теперь потому что не знаю какая из них более правильная. Еще иногда при загрузке валится ошибка
[FAILED] Failed to start Load/Save Screen Backlight Brightness of backlight:nvidia_0.
See 'systemctl status systemd-backlight@backlight:nvidia_0.service' for details
Какую команду оставить? Может как то по другому прописать будет правильно? Яркость клавиатуры не слетает, сохраняется. Только с экраном чушь такая. Может где то есть настройка чтобы сохранял текущую настройку яркости после перезагрузки?

Дополню свой вопрос. Какую из этих команд использовать более правильно? И в чем у них различия?
sh -c 'echo 54 > /sys/class/backlight/nvidia_0/brightness'
echo 54 | tee /sys/class/backlight/nvidia_0/brightness
echo 54 > /sys/class/backlight/nvidia_0/brightness

С дровами Nvidia яркость экрана после перезагрузки всегда на максимум сбивается.

Поставь redshift, настрой гамму на 0.7 и пусть себе дефольтная яркость будет по максимуму, ты её не увидишь.

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

Не устраивает. Удобно регулировать яркость через Indicator-brightness. Вечером убавить, днем добавить. Идеально было бы если бы его настройка запоминалась. Но хотя бы уж пусть по среднему будет как /etc/rc.local пишу.

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

Вечером убавить, днем добавить.

А redshift думаешь чем занимается? Не поверишь, днём добавляет, ночью убавляет, причём ты сам указываешь ему на сколько.

anonymous ()

Глянь. Попробуй параметры ядра:

acpi_backlight=video
acpi_backlight=vendor
acpi_backlight=native

Ещё про Asus’ы написано:

On an Asus notebooks you might also need to load the asus-nb-wmi kernel module.

Проверь нет ли правила udev, управляющего яркостью. Проверь статус сервисов systemd-backlight@backlight: (возможно, их несколько) и сравни с содержимым директории /sys/class/backlight/: каждой поддиректории должен соответствовать свой активный сервис.

rassol ()

Какую из этих команд использовать более правильно? И в чем у них различия?

Основные различия, если использовать sudo.

sudo sh -c 'echo 54 > /sys/class/backlight/nvidia_0/brightness'

Запускает интерпретатор с правами суперпользователя, чтобы выполнить команду. Обрати внимание: echo запускается с правами суперпользователя, поэтому переменные среды (например, $USER) будут суперпользователя, но в твоём случае это неважно. Также могут возникнуть проблемы с вложенными кавычками и их придётся экранировать.

echo 54 | sudo tee /sys/class/backlight/nvidia_0/brightness

Передаёт значение 54 программе tee, запущенной с правами суперпользователя. echo запускается в пространстве пользователя, поэтому и переменные среды будут пользовательские.

́sudo echo 54 > /sys/class/backlight/nvidia_0/brightness

Работать не будет, потому что перенаправлением вывода занимается оболочка, а не sudo, то есть echo запущена с правами суперпользователя, а перенаправление вывода нет.

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

acpi_backlight=video acpi_backlight=vendor acpi_backlight=native

Перепробовал все параметры и эти и еще кучу каких нагуглил. Удалось добиться только реакцию на fn+F5 и fn+F6. Но яркость при этом не меняется и только уведомления всплывают.

Проверь статус сервисов systemd-backlight@backlight: (возможно, их несколько)

Как это сделать?

и сравни с содержимым директории /sys/class/backlight/: каждой поддиректории должен соответствовать свой активный сервис.

Тут все правильно. Лежит только симлинк на nvidia_0.

trishhhhh ()
Ответ на: комментарий от rassol

Основные различия, если использовать sudo.

sudo sh -c 'echo 54 > /sys/class/backlight/nvidia_0/brightness'

Запускает интерпретатор с правами суперпользователя, чтобы выполнить команду. Обрати внимание: echo запускается с правами суперпользователя, поэтому переменные среды (например, $USER) будут суперпользователя, но в твоём случае это неважно. Также могут возникнуть проблемы с вложенными кавычками и их придётся экранировать.

echo 54 | sudo tee /sys/class/backlight/nvidia_0/brightness

Передаёт значение 54 программе tee, запущенной с правами суперпользователя. echo запускается в пространстве пользователя, поэтому и переменные среды будут пользовательские.

́sudo echo 54 > /sys/class/backlight/nvidia_0/brightness

Работать не будет, потому что перенаправлением вывода занимается оболочка, а не sudo, то есть echo запущена с правами суперпользователя, а перенаправление вывода нет.

Сейчас сделал так

echo 54 > /sys/class/backlight/nvidia_0/brightness
вроде полет нормальный. А какую команду правильней будет написать?

trishhhhh ()
Ответ на: комментарий от anonymous

А ты проверь

$ cat /sys/class/backlight/nvidia_0/brightness

Я и так вижу что после перезагрузки яркость нормальная а не на 100% :) По команде тоже выдало 54. Лишь бы работало нормально и не слтало иногда как прошлые команды.

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

Как это сделать?

systemctl status systemd-baclight@backlight:

После двоеточия можно воспользоваться автодополнением по tab’у, чтобы вывести список всех сервисов, связанных с яркостью. Проверь все.

rassol ()
Ответ на: комментарий от trishhhhh

А какую команду правильней будет написать?

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

Если с этой командой будут проблемы, можешь задать правило udev (есть в той ссылке, которую я кинул), но тогда, возможно, придётся замаскировать сервисы systemd-backlight. Хотя ты и так можешь их замаскировать.

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

systemctl status systemd-baclight@backlight:

После двоеточия можно воспользоваться автодополнением по tab’у, чтобы вывести список всех сервисов, связанных с яркостью. Проверь все.

Ничего не подставляется по табу после двоеточия.

$ systemctl status systemd-baclight@backlight:
● systemd-baclight@backlight:.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

trishhhhh ()
Ответ на: комментарий от rassol

Если с этой командой будут проблемы, можешь задать правило udev

Вроде полет нормальный. Проблем нет. Разве что ошибка эта при загрузке вываливается иногда

[FAILED] Failed to start Load/Save Screen Backlight Brightness of backlight:nvidia_0.
See 'systemctl status systemd-backlight@backlight:nvidia_0.service' for details

trishhhhh ()
Ответ на: комментарий от rassol
~$ systemctl status systemd-backlight@backlight:nvidia_0.service
● systemd-backlight@backlight:nvidia_0.service - Load/Save Screen Backlight Brig
   Loaded: loaded (/lib/systemd/system/systemd-backlight@.service; static; vendo
   Active: active (exited) since Пн 2019-09-23 01:11:26 MSK; 11min ago
     Docs: man:systemd-backlight@.service(8)
  Process: 879 ExecStart=/lib/systemd/systemd-backlight load %i (code=exited, st
 Main PID: 879 (code=exited, status=0/SUCCESS)

сен 23 01:11:26 nebo systemd[1]: Starting Load/Save Screen Backlight B
сен 23 01:11:26 nebo systemd[1]: Started Load/Save Screen Backlight Br
lines 1-9/9 (END)
trishhhhh ()
Ответ на: комментарий от trishhhhh

Ничего не подставляется по табу после двоеточия.

Выполни systemctl list-units | grep "systemd-backlight"

Короче, это известный баг. В качестве вре́менного решения можно сделать следующее. Для начала замаскировать сервисы systemd-backlight.

  • Попробовать альтернативы: religh, brillo или light.
  • Попробовать правило udev.

Разве что ошибка эта при загрузке вываливается иногда

Так ты и смотри статус этого сервиса после падения.

Тоже иногда не срабатывает. Интересно почему.

Замаскируй для начала сервисы, а потом смотри.

rassol ()
Ответ на: комментарий от rassol
~$ systemctl list-units | grep "systemd-backlight"
  systemd-backlight@backlight:acpi_video0.service                                          loaded active exited    Load/Save Screen Backlight Brightness of backlight:acpi_video0
  systemd-backlight@backlight:acpi_video1.service                                          loaded active exited    Load/Save Screen Backlight Brightness of backlight:acpi_video1
  systemd-backlight@backlight:nvidia_0.service                                             loaded active exited    Load/Save Screen Backlight Brightness of backlight:nvidia_0
  systemd-backlight@leds:asus::kbd_backlight.service                                       loaded active exited    Load/Save Screen Backlight Brightness of leds:asus::kbd_backlight

Что значит замаскировать сервисы? Как это сделать?

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

А зачем он тебе нужен? Именно этот сервис отвечает за восстановление яркости при включении. Если после маскировки твоя команда всё равно будет иногда не срабатывать, значит, дело не в нём.

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

По одной пробовал отключать. Не помогло. Все 3 отключены. За то теперь перед появлением десктопа экран мигает несколько раз. Пока безотказно работает только

echo 54 > /sys/class/backlight/nvidia_0/brightness
echo 54 > /sys/class/backlight/nvidia_0/actual_brightness

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

Нашел решение своей проблемы на arch wiki https://wiki.archlinux.org/index.php/Backlight_(Русский)#.D0.9F.D0.B0.D1.80.D...

systemctl mask systemd-backlight@backlight:acpi_video0.service
systemctl mask systemd-backlight@backlight:acpi_video1.service
systemctl mask systemd-backlight@backlight:nvidia_0.service

Правило Udev

Если доступен интерфейс ACPI, уровень подсветки может быть установлен во время загрузки с использованием правила udev:

/etc/udev/rules.d/81-backlight.rules

# Установить уровень подсветки равным 54
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="nvidia_0", ATTR{brightness}="54"


trishhhhh ()