У многих ли из вас монитор находится рядом с окном, в которое по утрам, дням или вечерам светит Солнце? Даже если лучи Солнца не ослепляют и не создают блики на поверхности экрана, оно всё равно будет создавать небольшой дискомфорт во время заката, по крайней мере для меня.
Всё предельно просто. Ближе к вечеру Солнце клонится к закату и свет попадает прямо в комнату очень ярко освящая пространство вокруг моего рабочего места как никогда ярче. Но чем ближе Солнце подходит к горизонту, тем тусклее становятся его лучи и приходится включать искусственное освещение. И в это самое время образуется разница в освещённости комнаты и на фоне приглушённого освещения 22-х дюймовый монитор начинает «резать» глаза.
Хоть уже есть готовые программы, например f.lux или Redshift, в которых реализовано постепенное изменение температуры цвета, я всё же решил уделить своё внимание именно яркости. А так как я – гордый обладатель видеокарты HD3870 с поставленным проприетарным драйвером fglrx, то я написал три небольших shell скрипта для автоматической постепенной смены яркости экрана.
Опять-таки всё очень просто!
«Вечерний», «Утренний» и «Загрузочный» скрипт, работает без прав рута. Внимательно прочитайте комментарии в самом верху, так как, возможно, придётся угадывать с другим типом дисплея!
Как заставить всё это работать? Опять-таки всё элементарно.
Вуаля! Всё готово к продолжительному ночному кодингу. Осталось приготовить кофе и закуски, ибо программируя на пустой желудок появляются новые баги.
Осталось мне только написать алгоритм по вычислению начала и конца светового дня в зависимости от даты и местоположения, но это совсем другая история. Надеюсь, кому-нибудь ещё, кроме меня, пригодятся эти скрипты. Берегите здоровье, в особенности, зрение. Удачи!
1 Обязательно указать
2 Сброс яркости на ноль у меня не получилось сделать через cron, так как сначала должны запускаться иксы и драйвера, а только затем сам скрипт, но если вдруг у кого-нибудь получится достичь такого же результата аналогичным путём, будьте добры, опишите в комментариях свой вариант.
Как?
Всё предельно просто. Ближе к вечеру Солнце клонится к закату и свет попадает прямо в комнату очень ярко освящая пространство вокруг моего рабочего места как никогда ярче. Но чем ближе Солнце подходит к горизонту, тем тусклее становятся его лучи и приходится включать искусственное освещение. И в это самое время образуется разница в освещённости комнаты и на фоне приглушённого освещения 22-х дюймовый монитор начинает «резать» глаза.
Решение
Хоть уже есть готовые программы, например f.lux или Redshift, в которых реализовано постепенное изменение температуры цвета, я всё же решил уделить своё внимание именно яркости. А так как я – гордый обладатель видеокарты HD3870 с поставленным проприетарным драйвером fglrx, то я написал три небольших shell скрипта для автоматической постепенной смены яркости экрана.
Как?
Опять-таки всё очень просто!
- Каждый день во время заката постепенно и равномерно, в течение часа незаметно для глаза снижаем яркость экрана до приятного моим глазам уровня.
- Во время каждого рассвета запускается второй скрипт, который, наоборот, восстанавливает яркость экрана до удобной для дневной работы за компом.
- А третий скрипт исполняется при каждом запуске компа и сразу же восстанавливает яркость до стандартной отметки.
«Вечерний» алгоритм
- Определяем начальную яркость.
- Определяемся с продолжительностью перехода и делим время на Δ яркости.
- Затемняем экран постепенно.
now=$((now-1))
aticonfig --set-dispattrib=tmds1,brightness:$now - Ждём n/m секунд, где «n» – время затемнения, а «m» – Δ яркости.
- Повторяем 3-й и 4-й пункт до тех пор, пока $now не станет равным требуемому затемнению.
«Утренний» алгоритм
- Определяем начальную яркость.
aticonfig --query-dispattrib=tmds1,brightness
- Определяемся с продолжительностью перехода, находим Δ яркости.
- Продолжаем, если Δ яркости ≠ 0, иначе уже достигнута требуемая отметка.
- Добавляем яркость.
now=$((now+1))
aticonfig --set-dispattrib=tmds1,brightness:$now - Ждём n/m секунд, где «n» – время затемнения, а «m» – Δ яркости.
- Повторяем 4-й и 5-й пункт до тех пор, пока $now не станет равным начальному уровню яркости.
«Загрузочный» алгоритм
- Сразу же восстанавливаем до уровня по умолчанию.
aticonfig --set-dispattrib=tmds1,brightness:0
«Вечерний», «Утренний» и «Загрузочный» скрипт, работает без прав рута. Внимательно прочитайте комментарии в самом верху, так как, возможно, придётся угадывать с другим типом дисплея!
Вопрос на «засыпку»
Как заставить всё это работать? Опять-таки всё элементарно.
- Изменяем в терминале список задач планировщика.
~$ crontab -e
- Вставляем всего две строки1. Первая – запуск каждый день, к примеру, в 05:00 восстановления яркости, а вторая – затемнения в 20:00 ежедневно. Не забудьте изменить путь до скрипта!
0 5 * * * export DISPLAY=:0 && "/ путь до скрипта /brightness_morning.sh"
0 20 * * * export DISPLAY=:0 && "/ путь до скрипта /brightness_evening.sh" - Перезапускаем cron.
~$ sudo /etc/init.d/cron restart
- Открываем список программ, запускающихся при загрузке Ubuntu
System → Preferences → Startup Applications
или в терминале.
~$ gnome-session-properties
- Добавляем строку для запуска2.
"/ путь до скрипта /brightness_reboot.sh"
Вуаля! Всё готово к продолжительному ночному кодингу. Осталось приготовить кофе и закуски, ибо программируя на пустой желудок появляются новые баги.
Было и стало
Осталось мне только написать алгоритм по вычислению начала и конца светового дня в зависимости от даты и местоположения, но это совсем другая история. Надеюсь, кому-нибудь ещё, кроме меня, пригодятся эти скрипты. Берегите здоровье, в особенности, зрение. Удачи!
1 Обязательно указать
export DISPLAY=:0
для запуска из под «Иксов». Прекрасно работает в Ubuntu 9.10 Karmic Koala.2 Сброс яркости на ноль у меня не получилось сделать через cron, так как сначала должны запускаться иксы и драйвера, а только затем сам скрипт, но если вдруг у кого-нибудь получится достичь такого же результата аналогичным путём, будьте добры, опишите в комментариях свой вариант.