Как использовать "xrandr --gamma" для использования в стиле "Night Light" в Gnome?

Фон: более красный / менее синий ночью

Чтобы сохранить глаза ночью, добавляя больше красного и / или вычитающего синего, становится популярным в Windows 10 (фильтр синего света) и Linux; Gnome Desktop (Night Light) и Ubuntu Unity Desktop с такими дополнениями, как Red Shift или f.lux.

Мне интересно, как сделать то же самое с помощью встроенной командной строки Ubuntu xrandr <monitor> --gamma 1:1:1 особенность. 1:1:1 представляет процент красного: зеленого: синего. я предполагаю 1 = 100% Я не уверен, что вышеупомянутые пакеты добавляют больше красного (1.2:1:1) на ~20% увеличение или уменьшение синего (1:1:0.8) на ~20% или на ~40%.

Пример Gnome Night Light не помогает

Согласно OMG Ubuntu, в Night Light Gnome вы можете использовать следующие числовые значения:

  • 1000 - самое низкое значение (супер теплый / красный)
  • 4000 - ночной свет по умолчанию на температуру
  • 5500 - Сбалансированная температура ночного света
  • 6500 - Температура ночного освещения по умолчанию выключена
  • 10000 - высшее значение (супер круто / синий)

Чтобы проверить эти числовые значения, как можно перевести их, чтобы переопределить значения по умолчанию --gamma 1:1:1?

О чем говорит документация xorg

Документация Xorg не говорит о многом --gamma управления:

- гамма красный: зеленый: синий

  • Установите указанные значения с плавающей запятой в качестве гамма-коррекции для CRTC, в данный момент подключенного к этому выходу. Обратите внимание, что вы не можете получить два разных значения для клонированных выходов (то есть: которые используют один и тот же crtc) и что переключение выхода на другой crtc вообще не меняет гамма-поправки crtc.

Плавающие десятичные точки будут полезны, потому что скрипт, который я хочу обновить, устанавливает xbacklight яркость медленно один раз в минуту в течение переходного периода от 90 до 120 минут на рассвете и закате. Я хочу улучшить сценарий с обоими xrandr --brightness поддержка программного обеспечения для внешних мониторов и встроенных дисплеев OLED и xrandr --gamma поддержка фильтров красного / синего света. Xorg не говорит, сколько десятичных позиций поддерживается, но я думаю, что я установлю bc расчеты должны быть с 3 или 4 десятичными позициями для удобочитаемости / точности баланса.

Резюме

Я надеюсь подражать тому, что "большие парни" в Microsoft и Gnome делают со своими "более красными" и / или "менее синими" техниками. Я еще не углубился в Wayland, но ответы, использующие эту систему, также будут оценены, поскольку это, несомненно, станет проблемой в будущем.

Какая корректировка --gamma 1:1:1 подходят для ночного времени?

3 ответа

9 декабря 2018 Обновление

Я нашел исходный код для программы sct что позволяет пользователю устанавливать цветовую температуру. Он "взломал код" из redshift и обеспечивает сопоставление для красного, зеленого и синего значений:

/* cribbed from redshift, but truncated with 500K steps */
static const struct { float r; float g; float b; } whitepoints[] = {
    { 1.00000000,  0.18172716,  0.00000000, }, /* 1000K */
    { 1.00000000,  0.42322816,  0.00000000, },
    { 1.00000000,  0.54360078,  0.08679949, },
    { 1.00000000,  0.64373109,  0.28819679, },
    { 1.00000000,  0.71976951,  0.42860152, },
    { 1.00000000,  0.77987699,  0.54642268, },
    { 1.00000000,  0.82854786,  0.64816570, },
    { 1.00000000,  0.86860704,  0.73688797, },
    { 1.00000000,  0.90198230,  0.81465502, },
    { 1.00000000,  0.93853986,  0.88130458, },
    { 1.00000000,  0.97107439,  0.94305985, },
    { 1.00000000,  1.00000000,  1.00000000, }, /* 6500K */
    { 0.95160805,  0.96983355,  1.00000000, },
    { 0.91194747,  0.94470005,  1.00000000, },
    { 0.87906581,  0.92357340,  1.00000000, },
    { 0.85139976,  0.90559011,  1.00000000, },
    { 0.82782969,  0.89011714,  1.00000000, },
    { 0.80753191,  0.87667891,  1.00000000, },
    { 0.78988728,  0.86491137,  1.00000000, }, /* 10000K */
    { 0.77442176,  0.85453121,  1.00000000, },
};

Три столбца выше - это значения для красного, зеленого и синего.

4 ноября 2018 г. Обновление

Я написал набор сценариев bash для постепенной регулировки яркости и гаммы на рассвете и в сумерках в течение периода от 90 минут до 120 минут. Полная настройка яркости:

xrandr --output DP-1-1 --gamma 1:1:1 --brightness 1.0

Ночная настройка:

xrandr --output DP-1-1 --gamma 1.1:0.8:0.7 --brightness 0.55

Оригинальный ответ

В конце концов нашел один ответ: БОЛЬШЕ XRANDR ИЛИ СИНИЙ СВЕТОВОЙ ВОЗДЕЙСТВИЯ Этот сценарий представлен:

#!/bin/sh 

night_mode() { 
  for disp in $(xrandr | sed -n 's/^\([^ ]*\).*\<connected>.*/\1/p'); do 
    xrandr --output $disp --gamma $1 --brightness $2 
  done } 
case $1 in 
  off) night_mode 1:1:1 1.0 ;; 
  *) night_mode 1:1:0.5 0.7 ;;
esac

Скрипт уменьшает компонент синего света и яркость всех подключенных дисплеев Xorg. Просто сохраните его в своем bin каталог, chmod +x и, если вы хотите, добавить cron работа или сочетание клавиш для вызова функции.

Как это устроено? Просто введите имя скрипта без каких-либо параметров, чтобы уменьшить синий свет. Чтобы вернуться к обычным настройкам, добавьте off параметр после команды.

Те значения в тысячах, о которых вы говорили, - это температуры в Кельвинах. У каждого есть соответствующий спектр излучения черного тела (звезды или чего-то, что излучает все длины волн света).

Итак, если вы выберете полосу видимого света (например, красную, зеленую или синюю), то найдите, где кривые пересекают эти полосы, и это даст вам их пропорции. (Примечание: шкала на графике логарифмическая; различий гораздо больше, чем кажется)

Думаю, 5777К - это наше Солнце (оно какое-то белое). Помните, что это всего лишь необработанный излучаемый свет, всевозможные атмосферные эффекты могут искривлять, рассеивать или поглощать свет на пути в разное время суток в зависимости от угла наклона Солнца, толщины атмосферы, химических веществ в атмосфере и т. д. Прочтите эту статью для получения дополнительной информации об этих явлениях: Изменение наружного освещения в зависимости от высоты солнца и светового загрязнения.

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

Для меня наилучшие результаты были получены при установке ( apt install redshift) и используя его как:

      redshift -oP -O 4500 -b 0.5

для температуры 4500 и яркости 0,5 или в сочетании с (и, опционально, для инвертирования цветов):

      xrandr --output eDP-1 --brightness 0.5
xrandr-invert-colors
redshift -o -O 4500

Обратите внимание, что вызов сам по себе отменит любой эффект красного смещения. Опция также сбрасывает яркость и цвет экрана вместо постепенного наложения настроек. Поэтапные корректировки (нет -Pвариант) необходимы при использовании в сочетании с как во втором случае использования.

Наконец, вместо использования xrandr-invert-colors, можно также использовать отрицательное значение яркости в xrandr(но не в redshift), но результат не такой приятный.

Другие вопросы по тегам