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

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

    Как?


    Всё предельно просто. Ближе к вечеру Солнце клонится к закату и свет попадает прямо в комнату очень ярко освящая пространство вокруг моего рабочего места как никогда ярче. Но чем ближе Солнце подходит к горизонту, тем тусклее становятся его лучи и приходится включать искусственное освещение. И в это самое время образуется разница в освещённости комнаты и на фоне приглушённого освещения 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, так как сначала должны запускаться иксы и драйвера, а только затем сам скрипт, но если вдруг у кого-нибудь получится достичь такого же результата аналогичным путём, будьте добры, опишите в комментариях свой вариант.
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 45
    • +30
      Мсье понимает толк в извращениях =)
      • +5
        Алгоритм светового дня… Не катит. Бывают пасмурные дни, когда свет совсем другой, чем в дни солнечные. А бывает, что зимой, из-за снега и облаков, света больше, чем если бы снега не было.

        Кстати, имхо, дёргать яркость видеокарты не есть хорошо, правильнее это делать с монитором. В идеале — с монитором, у которого есть датчик освещения.
        • +5
          если уж извращаться… может под датчик освещенности приспособить веб-камеру? :)
          • +1
            Как детектор ББ — нет (зайдёт дядя в зелёной футболке — и на экране всё фиолетовое). Как детектор освещённости… Наверное, да, но с большими оговорками. (фонарики, блики, морда лица на большую часть экрана и т.д.). Кроме того, нужно ещё найти веб-камеру, которая умеет отдавать картинку при фиксированном ИСО, а не подстаивать его под приложение.
            • 0
              Так просто камеру нужно направить на стену.
              • 0
                … И в темноте ловить остаточное отражение света монитора от стен и лиц?
                • 0
                  измерять освещенность комнаты.
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Полагаю, что-нибудь можно придумать.
          • НЛО прилетело и опубликовало эту надпись здесь
            • +6
              это будет не многим лучше чем брать инфорачию с /dev/random
          • +14
            Я бы, на вашем месте, с точки зрения эргономики – выключил бы ультраяркий светодиод на колонке, который, наверное, просто мозг взрывает в темноте :D
            • +2
              У меня на колонке аналогичный светодиод заклеен несколькими слоями тетрадной бумаги и поверх неё липкой лентою, например.
              • +21
                Нет, это неэкономно.
                Всего лишь небольшая система маленьких зеркал — и вот уже диод колонки подсвечивает путь к холодильнику ночью! Реальная экономия электроэнергии, бумаги и скотча. Нанотехнологии — наш выбор!
                • 0
                  обычно хватает мелкого куска изоленты. Зачем бумага и липкая лентая?
                  • 0
                    Это очень мощный яркий светодиод! Он выжигает глаза. Причем насквозь.
                    • 0
                      Сквозь изоленту его вообще не видно, как правило.

                      Мне же было нужно видеть его, но слабо.
                  • +1
                    Сразу видно: человек читал статью про злобный и коварный синий цвет, так и норовящий засветить в глаз.
                    • 0
                      Читать читал. Но светодиод заклеил несколькими годами ранее, даже не будучи ещё на Хабрахабре.
                  • 0
                    Даешь датчик света и управление освещением в комнате.
                    • +4
                      Ох уж эти оч.умелые ручки… Поставить жалюзи — Заратустра не позволяет? :)
                      • +3
                        Знать, далеко залежи жалюзи.
                        • +1
                          Ну, тогда остаются только клей и старые газеты, нанесенные густым слоем на окно… :)
                          • 0
                            Полумеры. Лучше сразу как в «Убике» закрасить окна серебрянкой.
                            • 0
                              И, конечно же, пройтись липкой лентой сверху.
                        • НЛО прилетело и опубликовало эту надпись здесь
                          • +1
                            ИМХО надо не к видяхе, а к монитору писать. Он более аккуратно яркость (ламп) меняет.
                            • 0
                              ~$ xgamma -gamma n
                              Это вы имели в виду?
                          • 0
                            У некоторых NEC'ов есть встроенный датчик освещения, который сам регулирует яркость.
                            Вот например у этого точно есть — market.yandex.ru/model.xml?hid=91052&modelid=5010468.
                            Но на практике изменение яркости без разрешения скоро начинает напрягать. в итоге фичу отключил.
                            • 0
                              Я также приобрёл себе NEC с этой функцией, и также отключил её.
                            • +1
                              Посколько нас тут много таких, кому глаза дороги, а ночью бывает работает, скриптик Night.css для Оперы очень помогает читать интернеты. Говоря просто — он «выключает» свет на сайте. Скажем Хабр становиться темносерым, но настолько темносерым, чтоб можно было отлично и без напрягов всё читать.

                              Рекомендую!
                              • 0
                                Спасибо. Весьма удобно. Даже есть кнопка для Opera.
                              • 0
                                Простите сэр, а что у Вас с клавиатурой?
                                имею ввиду: белые кнопки?
                              • 0
                                Нет, ddccontrol (я про него как раз писал). xgamma меняет гамму в видеокарте. Изменение яркости, контрастности или гаммы в видеокарте всегда постеризует картинку, в отличие от монитора, у которого есть место для манёвра.
                                • 0
                                  «Ближе к вечеру Солнце клонится к закату и свет попадает прямо в комнату очень ярко освящая пространство вокруг моего рабочего места как никогда ярче.»

                                  Везучий. А у меня окна выходят на север, и густая растительность за этим окном, так что в комнате всегда тьма.
                                  • 0
                                    Предлагаю купить самую дешевую вебкамеру и просто считать интенсивность освещения, и цветовую температуру сделать функцией от интенсивности освещения (зависимость вовсе не обязательно там линейная).
                                    • НЛО прилетело и опубликовало эту надпись здесь
                                      • –2
                                        На маке монитор автоматически меняет яркость в зависимости от освещенности комнаты.
                                        • НЛО прилетело и опубликовало эту надпись здесь
                                          • НЛО прилетело и опубликовало эту надпись здесь
                                          • 0
                                            > export DISPLAY=:0 && "/ путь до скрипта /brightness_morning.sh"

                                            А почему нельзя так:
                                            DISPLAY=:0 "/ путь до скрипта /brightness_morning.sh"
                                            ?

                                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.