如何将“xrandr --gamma”用于类似 Gnome“夜灯”的用法?

Win*_*nix 22 xrandr ubuntu-gnome f.lux redshift gamma

背景:夜间更多红色/更少蓝色

为了在夜间保护眼睛,添加更多红色和/或减去蓝色,在Windows 10(蓝光过滤器)和 Linux 中变得流行;带有Red Shiftf.lux等附加组件的Gnome 桌面(夜灯)和 Ubuntu Unity 桌面。

我想知道如何使用 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,在 Gnome 的 Night Light 中,您可以使用这些数值:

  • 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 个小数位,以实现可读性/精度平衡。

概括

我希望模仿微软和 Gnome 的“大人物”正在用他们的“更多红色”和/或“更少蓝色”技术做的事情。我还没有深入研究 Wayland,但使用该系统的答案也将受到赞赏,因为它无疑将成为未来的问题。

--gamma 1:1:1夜间适合做哪些调整?

Win*_*nix 23

2018 年 12 月 9 日更新

我找到了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, },
};
Run Code Online (Sandbox Code Playgroud)

上面的三列是RedGreenBlue 的值

2018 年 11 月 4 日更新

我编写了一系列 bash 脚本,以在 90 分钟到 120 分钟的时间段内在黎明和黄昏逐渐调整亮度和伽玛值。全亮度设置为:

xrandr --output DP-1-1 --gamma 1:1:1 --brightness 1.0
Run Code Online (Sandbox Code Playgroud)

夜间设置是:

xrandr --output DP-1-1 --gamma 1.1:0.8:0.7 --brightness 0.55
Run Code Online (Sandbox Code Playgroud)

原答案

终于找到了一个答案:MORE OF XRANDR OR BLUE LIGHT EXPOSURE这个脚本呈现:

#!/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
Run Code Online (Sandbox Code Playgroud)

该脚本减少了所有连接的 Xorg 显示器的蓝光成分和亮度。只需将其保存在您的bin目录中,chmod +x如果您愿意,还可以添加cron作业或键盘快捷键来调用该函数。

这个怎么运作?只需输入不带任何参数的脚本名称即可减少蓝光。要恢复正常设置,请off在命令后添加参数。