## 前言

大家都知道,长时间注视电子屏幕对眼睛伤害很大。特别是在夜晚的时候,亮度过高的屏幕更是让人的眼睛异常酸痛。虽然我们可以通过使用显示器的配置菜单,更改屏幕亮度和色温,但每次都要手动调,未免太过麻烦。实际上,在 Linux 下,有好几款自动调节屏幕色温和亮度的工具。

## 使用 RedShift

RedShift 是 redshift 命令的图形化工具,集成为 gnome 插件。RedShift 界面简洁,非常容易使用,能改根据时间自动地调整屏幕色温:

![](https://leanote.com/api/file/getImage?fileId=58fbf3f1ab644129eb004ed5)

对于 Fedora 用户,可以使用下面命令进行安装:

sudo dnf copr enable mystro256/gnome-redshift

sudo dnf install gnome-shell-extension-redshift

注意,由于 Wayland 默认不支持 RedShift,因此需要一些额外的工作来使它工作。具体见附录。

**2017-04-23 更新**

如果遇到下图所示错误:

![](https://leanote.com/api/file/getImage?fileId=58fbf1b4ab644129eb004e9a)

请加上 --allowerasing 安装,如果还是不行,请尝试将桌面服务器切换为 xorg 后再次尝试。

## 使用 ddccontrol

ddccontrol 工具可以配置显示器的参数,因此灵活性较高,但配置比较复杂。对于大部分用户而言,可能只需要配置显示器的色温和亮度。为了方便配置,可以使用国外友人编写好的工具:[danielng01/iris-floss-wayland](https://github.com/danielng01/iris-floss-wayland)。这个工具把所有设备检测和操作都封装起来了,使得我们只需要给出目标色温和亮度的值即可。**注意,运行这个工具需要 root 权限**。

### 安装 ddccontrol

sudo dnf install ddccontrol

### 安装 iris-floss-wayland

由于我的系统是 Fedora 25,而默认图形服务器是 Wayland,因此安装的简化工具是 iris-floss-wayland。如果读者的图形服务器是 X11,可以到[Iris Floss仓库](https://github.com/danielng01/iris-floss)下载工具。

下载完成后,执行 make 进行编译。然后会生成可执行文件 iris-floss-wayland。以`sudo`方式执行该程序,同时给出两个参数——第一个是色温,第二个是亮度。如下面的代码将色温设置为 5000K,亮度设置为 40%:

sudo ./iris-floss-wayland 5000 40

如果执行后不起作用,可以加上`-v`标志,输出调试信息。

### 使用 crontab

使用 ddccontrol 工具的一个缺点是需要自己调用它,而使用 RedShift 则不需要,因为 RedShift 因此把这一切都包装好了。为了能改按照时间自动地进行屏幕色温和亮度的切换,可以使用`crontab`命令。如果不熟悉 crontab,可以阅读本文附录给出的相关教程。

#### 创建 crontab 文件

由于需要以 root 运行 iris-floss-wayland(实际上 ddccontrol ),因此 crontab 的添加用户应该是 root。可以在 root 家目录下创建一个 crontab 文件(假设名为 .cron/screen_light_mode.cron),然后为它添加以下内容:

# Siwtching screen to day mode, starts at 6 am.

0 6-17 * * * switch-to-day-light-mode

# Siwtching screen to night mode, starts at 6 pm.

0 18-23 * * * switch-to-night-light-mode

其中以'#'开头的是注释,crontab 会忽略它。文件中的一行代表一条 crontab 记录,一个包含六列,各列的定义如下:

分 时 日 月 星期 要运行的命令

对于`0 6-17 * * * switch-to-day-light-mode`来说,意思是每天6点到17点,每整时调用命令 switch-to-day-light-mode。

#### 分离配置与调用

在这里,命令 switch-to-day-light-mode 只是对 iris-floss-wayland 调用的一个封装。为什么要做这样一个封装呢?结果很明显:将调用和配置分开。如果将与参数有关的命令直接写在 crontab 中,则每一次修改参数都要运行相关的 crontab 命令进行更新。

这个封装我保存在文件 /etc/profile.d/screen_light_mode.sh,该文件的内容如下:

```bash

# Command of siwtching screen light mode

# Change these params to fit your eyes.

day_temperature=5000

day_lightness=40

night_temperature=3300

night_lightness=35

# The following content should not be modified.

day_light_mode_cmd="sudo iris-floss-wayland $day_temperature $day_lightness"

night_light_mode_cmd="sudo iris-floss-wayland $night_temperature $night_lightness"

export current_screen_light_mode

current_screen_light_mode=${current_screen_light_mode:-"day"}

switch-to-day-light-mode()

{

if [ "$current_screen_light_mode" = "night" ]; then

current_screen_light_mode="day"

$day_light_mode_cmd $*

fi

}

switch-to-night-light-mode()

{

if [ "$current_screen_light_mode" = "day" ]; then

current_screen_light_mode="night"

$night_light_mode_cmd $*

fi

}

```

通过修改 day_temperature、day_lightness、night_temperature 以及 night_lightness 分别为白天模式和晚上模式指定色温和亮度。

### 添加 crontab 任务

完成了 crontab 文件的创建后,执行下列命令就完成了定期任务的添加:

crontab .cron/screen_light_mode.cron

再罗嗦一句,记得是为特权用户添加该任务,否则配置工具将因缺少权限而执行失败。

### 添加开机服务

添加 crontab 解决了日光和夜光模式的自动切换,但它无法解决一个问题:在检查间隔期间启动机器的话,便无法自动根据当前时间切换。虽然我们可以将 crontab 的执行间隔缩小,但那样未免杀鸡用牛刀了。实际上,简单地添加一个开机任务,根据启动系统时的时间,更改屏幕模式即可 。

对于使用 systemd 的 Linux 发行版来说,以往存放在 /etc/rc.d/ 目录下的开机启动脚本都会被映射为一个 systemd service unit(服务单元)。服务单元相比以往的启动脚本更容易管理,因为我们可以使用 `systemctl` 命令对其进行管理。sytemd 提供了向前兼容性,使得我们可以像往常那样在 /etc/rc.d/rc.local 中添加启动脚本。但在添加启动脚本之前,要需要进行一些配置工作,使 rc.local 机制工作。

首先编辑 /etc/rc.d/rc.local 文件,在文件中添加以下内容:

. /root/scripts/auto-switch-screen-light-mode.sh

注意为 /etc/rc.d/rc.local 添加可执行权限:

sudo chmod +x /etc/rc.d/rc.local

接着,编辑 /usr/lib/systemd/system/rc-local.service,添加以下内容:

[Install]

WantedBy=multi-user.target

然后使能 rc-local 服务:

sudo systemctl enable rc-local.service

到此 rc.local 就配置好了,下次启动系统时,便会自动地执行 rc.local 文件中的内容。

最后,完成我们的启动脚本的编写。/root/scripts/auto-switch-screen-light-mode.sh 的内容如下:

```bash

#!/usr/bin/bash

# Automatically switch screen light mode according to current date's hour.

# Load configurations.

. /etc/profile.d/screen_light_mode.sh

# Get current hour.

date_hour=`date +"%H"`

# Determine screen light mode.

if [ "$date_hour" -lt "18" ]; then

$day_light_mode_cmd $*

current_screen_light_mode="day"

else

$night_light_mode_cmd $*

current_screen_light_mode="night"

fi

```

## 总结

能改使用 RedShift 工具就好办了……可惜的是在我的系统上安装 RedShift 提示缺少依赖 gnome-settings-daemon-redshift,,而我在网上又找不到,最后只能转而使用 ddccontrol。

ddccontrol 不仅配置麻烦,要自己做一堆附加工作,而且还时不时不能工作。看着身边小伙伴用着和我一样的系统(Fedora 25),却没有这些问题,一个 dnf 就达成了需求。看来还是得找时间好好解决 RedShift 的依赖问题。

**2017-04-22 更新**

坑爹啊……今天再一次尝试安装 RedShift,但又遇到了同样的错误:

![](https://leanote.com/api/file/getImage?fileId=58fbf1b4ab644129eb004e9a)

这一次抱着试试的心态加上了选项 --allowerasing,结果安装成功了!之前好像也有试过,但没有成功……在这期间也就把桌面服务器从 Wayland 换成了xorg,该不会是因为这个才……如果你也遇到了这样的问题,你可以试一下。

## References

- [Redshift functionality on Fedora 25 (GNOME + Wayland).](http://www.thelinuxrain.com/articles/redshift-functionality-on-fedora-25-gnome-wayland-yes-its-possible)

- [crontab 定时任务](http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html)

- [Fedora 23 实现开机自启脚本](https://semsevens.com/2016/03/08/make-startup-script-in-fedora/)

- [Improve your sleep by using Redshift on Fedora](https://fedoramagazine.org/safe-eyes-redshift/)

linux如何设置显示器亮度调节软件,为 Linux 启用色温和亮度调节工具相关推荐

  1. lg分屏软件支持linux吗,LG显示器分屏软件-OnScreen Control(快速分屏)下载v2.95-领航下载站...

    OnScreen Control是LG为其显示器用户提供的一款功能非常强大的显示器分屏软件,OnScreen Control可以快速的帮助用户分割屏幕显示区域,领航小编觉得这个功能对于那些经常需要运行 ...

  2. linux中设置环境变量_如何在Linux中设置环境变量

    linux中设置环境变量 Wondering how to set environment variables in Linux? This is exactly what we'll be doin ...

  3. Linux时钟设置-硬件时钟与软件时钟

    Linux里分硬件时钟与系统时钟等两种时钟. 1.硬件时钟: (1)定义:硬件时钟是存储在主板上CMOS里的时钟,关机后该时钟依然运行,主板的电池为它供电.对应于嵌入式设备有一个RTC(Real ti ...

  4. linux下设置显示器对比度

    在没有安装显卡驱动的情况下如何设置对比度? 命令如下: xgamma -gamma 0.70 其中数值的范围为:0-10.00 但该命令重启后就会失效,因此需要在用户变量下添加该命令,即在用户目录下任 ...

  5. linux中realplayer.rpm格式的软件安装,Linux中安装Realplay 10.0 的方法

    一.什么是RealPlay : Realplay 在Windows大家经常用,不必介绍:呵... ... 在一两年前,如果说Rlealplay 能在Linux操作系统中正常的运行,有点异想天开:目前看 ...

  6. linux中realplayer.rpm格式的软件安装,Linux系统中Realplay 10.0的安装和使用

    一.什么是RealPlay Realplay 在Windows大家经常用,不必介绍:呵... ... 在一两年前,如果说Rlealplay 能在Linux操作系统中正常的运行,有点异想天开:目前看来运 ...

  7. linux ubuntu 设置ip地址命令行,Ubuntu Linux上的IP地址管理

    如今,一切都在互联网上.说"互联网已经成为我们生活的基本必需品"是正确的.互联网是相互连接的网络的网络.要浏览互联网,应该了解网络的基本知识,即如何将本地网络连接到互联网.首先,连 ...

  8. linux qt设置应用程序图标大小,Qt5 linux如何设置窗口图标图像

    我有一个用Qtdevise器devise的用户界面,并用c ++编写了代码. 我正在使用catkin ,这只是cmake,来build立我的项目. 目前当程序启动时,应用程序图标看起来像, .我想这是 ...

  9. linux 脚本设置定时,脚本添加定时任务(Linux)

    引言:前段时间写了个脚本,用来定时备份数据库的 ,后来定时任务也添加了,结果却要求写个脚本去添加定时任务,哎...当时真是一头雾水!后来请教了下高人,得以解决.下面我们来看到脚本. #!/bin/ba ...

  10. win7调整屏幕亮度_三星屏幕亮度微调app免费版下载-三星手机屏幕亮度微调软件一键操作版v1.0 最新版...

    三星手机屏幕亮度微调软件一键操作版,是一款非常实用的亮度调节软件,软件内功能强大,用户在智能感光模式下,可以一键轻松调节屏幕亮度,并且手机上的内容也看的一清二楚,有效的保护了用户的用眼问题. 三星手机 ...

最新文章

  1. jsTree设置默认节点全部展开的方法
  2. Haskell语言实现求解一个整数所有因子的代码及运行结果
  3. VTK:PolyData之ShrinkPolyData
  4. 计算机音乐 phd,美国大学音乐(Music)专业PhD排名
  5. ygo游戏王卡组_游戏王:二线卡组脱颖而出的战将,混沌青眼卡组,仪式卡组的骄傲...
  6. thinkphp的分页类
  7. 计算机类系统能力培养试点学校,南昌航空大学获批教育部计算机类专业系统能力培养试点高校...
  8. java 常用 函数_java在线报表中有哪些常用函数
  9. [SOJ] 无路可逃?
  10. Java发送HTTP POST请求(内容为xml格式)
  11. JAVA调用Web Service接口的五种方式
  12. ESP8285调试记录
  13. 字节跳动“蚕食”B端,搅局企业服务?
  14. 15个素材下载网站,从此不做「伸手党」!
  15. CLUSTERDOWN Hash slot not served 记录一次线上redis插槽问题
  16. matlabrobert锐化_图像锐化matlab算法
  17. 科创人|容联七陌CEO陈光:90后街舞少年的CEO修炼手册
  18. 敬畏传奇——直面第一台可编程电子计算机:Colossus
  19. 阿里云HaaS100物联网开发板学习笔记(六)做个智能灯---一个完整的开发例子
  20. 1.socket网络编程

热门文章

  1. 北京圣思园XML培训视频教程下载
  2. 技术干货大集锦(一)
  3. word交叉引用自动编排word参考文献
  4. 神经网络物联网未来发展趋势怎么样
  5. Frsky X9D Plus遥控器和 Frisky R8 Pro接收机对频
  6. vs2015 社区版
  7. wireshark读写pcap文件_使用wireshark分析tcpdump出来的pcap文件
  8. gb28181简单实现sip信令服务器(java版基于springboot):二、sip摄像头注册(信令解读)
  9. opensips搭配rtpengine实现sip信令和rtp流的代理
  10. 计算机课教师评价,教师课堂评价语集锦