Как использовать "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
), но результат не такой приятный.