Redshift
安装
安装 redshift 软件包。或者,安装 redshift-minimalAUR 软件包,以获得依赖最少版本。
前端
redshift-gtk 命令随 redshift 软件包一起提供,并提供一个用于控制 Redshift 的系统托盘图标。请参阅可选依赖。
替代方案包括 redshift-qtAUR 或 redshiftconfAUR。
用法
Redshift 启动时至少需要您的位置(除非使用了 -O),即您所在位置的纬度和经度。Redshift 采用了几种获取位置的方案。如果这些方案都失效(例如,没有安装所需的辅助程序),您需要手动输入位置。
快速入门
若要使用基础设置快速运行,请执行
$ redshift -l LATITUDE:LONGITUDE
其中 LATITUDE 是您所在位置的纬度,LONGITUDE 是经度。
要立即调整屏幕色温,请使用
$ redshift -P -O TEMPERATURE
其中 TEMPERATURE 是所需的色温(在 1000 到 25000 之间)。
自启动
有几种方法可以让 Redshift 自动启动
- 在
redshift-gtk或plasma5-applets-redshift-control已启动的情况下,右键单击系统托盘图标并选择 Autostart (自启动)。 - 将 Redshift 的 桌面条目 (desktop entry) 放入
~/.config/autostart/,或将redshift添加到您的窗口管理器或桌面环境的 自启动 方法中。 - 使用提供的 用户单元 (user units):
redshift.service和redshift-gtk.service。根据您是否需要系统托盘图标,仅激活其中一个。
- Redshift 服务文件中包含
Restart=always,因此它们会无限次重启。请参阅 systemd.service(5)。 - 使用 systemd 用户服务时,必须在服务执行前启动 Xorg,而如果没有 显示管理器 (display manager) 则无法实现。否则,您将收到
RANDR Query Version' returned error -1和Initialization of randr failed。上述 systemd/User 方法已经考虑到了这一点,因为它包含After=display-manager.service。
切换
Redshift 将以定期的时间间隔持续更新色温。如果您只需要进行一次调整,可以选择单次模式 (One shot mode)。通过向 Redshift 发送 USR1 信号,可以临时开启或关闭由 Redshift 完成的颜色调整
$ pkill -USR1 redshift
配置
如果存在配置文件 ~/.config/redshift/redshift.conf,Redshift 将读取该文件 [2]。但是,Redshift 不会自动创建该配置文件,因此您可能需要手动创建。请参阅 redshift.conf.sample。
手动指定位置
Redshift 根据地理坐标计算日出和日落时间。可以使用 manual 位置提供者手动指定,例如对于巴黎
~/.config/redshift/redshift.conf
[redshift] ... location-provider=manual ... [manual] lat=48.864716 lon=2.349014
基于 GeoClue 的自动定位
Redshift 默认使用 geoclue2 位置提供者。它需要一个在后台运行的 GeoClue 代理。它理应无需进一步配置即可工作,但如果您遇到问题,请参阅 #无法连接到 GeoClue。
基于 GPSD 的自动定位
您也可以使用 gpsd 来自动确定您的 GPS 位置,并将其作为 Redshift 的输入。创建以下脚本并将 $lat 和 $lon 传递给 redshift -l $lat:$lon
#!/bin/bash date #gpsdata=$( gpspipe -w -n 10 | grep -m 1 lon ) gpsdata=$( gpspipe -w | grep -m 1 TPV ) lat=$( echo "$gpsdata" | jsawk 'return this.lat' ) lon=$( echo "$gpsdata" | jsawk 'return this.lon' ) alt=$( echo "$gpsdata" | jsawk 'return this.alt' ) dt=$( echo "$gpsdata" | jsawk 'return this.time' ) echo "$dt" echo "You are here: $lat, $lon at $alt"
欲了解更多信息,请参阅此论坛线程 this。
使用真实的屏幕亮度
Redshift 具有亮度调节设置,但其工作方式可能与大多数人的预期不同。实际上,它是一种通过操纵伽马斜率 (gamma ramps) 实现的伪亮度调节,这意味着它并不能降低屏幕的背光 [3]。
可以通过 Redshift 钩子 (hooks) 和 acpilightAUR 来更改屏幕背光,但存在一些限制,且根据硬件的不同,您可能需要寻找另一种控制背光的方法。
您需要在 ~/.config/redshift/hooks 中创建一个文件并使其可执行。您可以使用并编辑以下示例
~/.config/redshift/hooks/brightness.sh
#!/bin/sh
# Set brightness via xbrightness when redshift status changes
# Set brightness values for each status.
# Range from 1 to 100 is valid
brightness_day=85
brightness_transition=50
brightness_night=30
# Set fps for smoooooth transition
fps=1000
# Adjust this grep to filter only the backlights you want to adjust
backlights=($(xbacklight -list | grep ddcci*))
set_brightness() {
for backlight in "${backlights[@]}"
do
xbacklight -set $1 -fps $fps -ctrl $backlight &
done
}
if [ "$1" = period-changed ]; then
case $3 in
night)
set_brightness $brightness_night
;;
transition)
set_brightness $brightness_transition
;;
daytime)
set_brightness $brightness_day
;;
esac
fi
将其设为 可执行 并 重启 redshift.service 以应用更改。
检查服务状态,其中 不应 包含以下消息
redshift[..]: No outputs have backlight property
故障排除
Unable to connect to GeoClue
如果运行 $ redshift 时出现
Unable to obtain GeoClue client path: Timeout was reached.
那么请确保 GeoClue 代理正在运行。GNOME Shell 本身提供了一个代理。对于其他桌面环境,一个演示代理 (/usr/lib/geoclue-2.0/demos/agent) 会被 自动启动。您可以通过检查 /usr/lib/geoclue-2.0/demos/where-am-i 命令的输出来检查 GeoClue 是否正常工作。
如果您使用的桌面环境不支持 XDG Autostart,则必须手动启动演示代理,或者您可以创建一个具有以下配置的 systemd 单元文件
~/.config/systemd/user/geoclue-agent.service
[Unit] Description=redshift needs to get a (geo)clue [Service] ExecStart=/usr/lib/geoclue-2.0/demos/agent [Install] WantedBy=default.target
然后 启动/启用 geoclue-agent.service 用户单元。
找不到屏幕 1 (Screen 1)
在您的发行版中找到配置文件 "redshift.conf",并将 "screen 1" 更改为 "screen 0"。
左键/右键点击托盘图标无效
安装 libappindicator。请参阅 redshift issue 363 和 FS#49971。
Redshift 导致屏幕在设置的颜色值与默认颜色值之间快速闪烁
确保没有多个 redshift 实例在运行。
Redshift 作为命令调用时正常,但作为 systemd 服务运行时失败
redshift.service 文件中的 systemd 单元有一行,使得该服务在单元调用 redshift 之前,必须等待 显示管理器 启动 display-manager.service 单元。如果您不使用显示管理器,请 编辑 redshift.service 用户服务并删除 After=display-manager.service 行。运行 daemon-reload 后,服务应能正常初始化。
Redshift-gtk 服务导致核心转储 (core-dumping)
请参考上述问题以及 [4]。
Redshift 不出现在系统托盘中
如果运行 $ redshift-gtk 命令没有在系统托盘中启动,而是出现了以下输出
$ redshift-gtk
Traceback (most recent call last):
File "/usr/bin/redshift-gtk", line 26, in <module>
from redshift_gtk.statusicon import run
File "/usr/lib/python3.8/site-packages/redshift_gtk/statusicon.py", line 31, in <module>
gi.require_version('Gtk', '3.0')
AttributeError: module 'gi' has no attribute 'require_version'
您将需要安装 python-gobject。
使用 Nvidia 驱动且分辨率超过 1080p 时,Redshift 使屏幕变绿
这是 nvidia 驱动的一个 bug。解决方法是进行以下修改
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
...
Option "UseNvKmsCompositionPipeline" "false"
...
EndSection
欲了解更多信息,请参阅 redshift issue 587 和 redshift issue 720。
Redshift 不支持用于切换的快捷键
一种解决方法是在您的桌面环境中创建自定义快捷键,调用命令 pkill -USR1 '^redshift$'。
欲了解更多信息,请参阅 [5]。