31 мая 2010 в 03:07

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

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

Как?


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

Комментарии (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"
    ?

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