Pull to refresh

Эргономика в тёмное время суток

Reading time 3 min
Views 4K
У многих ли из вас монитор находится рядом с окном, в которое по утрам, дням или вечерам светит Солнце? Даже если лучи Солнца не ослепляют и не создают блики на поверхности экрана, оно всё равно будет создавать небольшой дискомфорт во время заката, по крайней мере для меня.

Как?


Всё предельно просто. Ближе к вечеру Солнце клонится к закату и свет попадает прямо в комнату очень ярко освящая пространство вокруг моего рабочего места как никогда ярче. Но чем ближе Солнце подходит к горизонту, тем тусклее становятся его лучи и приходится включать искусственное освещение. И в это самое время образуется разница в освещённости комнаты и на фоне приглушённого освещения 22-х дюймовый монитор начинает «резать» глаза.

Решение


Хоть уже есть готовые программы, например f.lux или Redshift, в которых реализовано постепенное изменение температуры цвета, я всё же решил уделить своё внимание именно яркости. А так как я – гордый обладатель видеокарты HD3870 с поставленным проприетарным драйвером fglrx, то я написал три небольших shell скрипта для автоматической постепенной смены яркости экрана.

Как?


Опять-таки всё очень просто!
  • Каждый день во время заката постепенно и равномерно, в течение часа незаметно для глаза снижаем яркость экрана до приятного моим глазам уровня.
  • Во время каждого рассвета запускается второй скрипт, который, наоборот, восстанавливает яркость экрана до удобной для дневной работы за компом.
  • А третий скрипт исполняется при каждом запуске компа и сразу же восстанавливает яркость до стандартной отметки.

«Вечерний» алгоритм

  1. Определяем начальную яркость.
  2. Определяемся с продолжительностью перехода и делим время на Δ яркости.
  3. Затемняем экран постепенно.
    now=$((now-1))
    aticonfig --set-dispattrib=tmds1,brightness:$now
  4. Ждём n/m секунд, где «n» – время затемнения, а «m» – Δ яркости.
  5. Повторяем 3-й и 4-й пункт до тех пор, пока $now не станет равным требуемому затемнению.

«Утренний» алгоритм

  1. Определяем начальную яркость.
    aticonfig --query-dispattrib=tmds1,brightness
  2. Определяемся с продолжительностью перехода, находим Δ яркости.
  3. Продолжаем, если Δ яркости ≠ 0, иначе уже достигнута требуемая отметка.
  4. Добавляем яркость.
    now=$((now+1))
    aticonfig --set-dispattrib=tmds1,brightness:$now
  5. Ждём n/m секунд, где «n» – время затемнения, а «m» – Δ яркости.
  6. Повторяем 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"

Вуаля! Всё готово к продолжительному ночному кодингу. Осталось приготовить кофе и закуски, ибо программируя на пустой желудок появляются новые баги.


Было и стало


image

image


Осталось мне только написать алгоритм по вычислению начала и конца светового дня в зависимости от даты и местоположения, но это совсем другая история. Надеюсь, кому-нибудь ещё, кроме меня, пригодятся эти скрипты. Берегите здоровье, в особенности, зрение. Удачи!



1 Обязательно указать export DISPLAY=:0 для запуска из под «Иксов». Прекрасно работает в Ubuntu 9.10 Karmic Koala.
2 Сброс яркости на ноль у меня не получилось сделать через cron, так как сначала должны запускаться иксы и драйвера, а только затем сам скрипт, но если вдруг у кого-нибудь получится достичь такого же результата аналогичным путём, будьте добры, опишите в комментариях свой вариант.
Tags:
Hubs:
+25
Comments 45
Comments Comments 45

Articles