Redshift

来自 ArchWiki

来自 Redshift 项目网页

Redshift 根据您的周围环境调整屏幕的色温。如果您在晚上在屏幕前工作,这可能有助于减轻眼睛的疲劳。此程序受到闭源应用程序 f.lux 的启发。
注意: Redshift 不支持 Wayland [1]。有关替代方案,请参阅 Backlight#Wayland

安装

安装 redshift 软件包。或者,安装 redshift-minimalAUR 软件包,以获得依赖项最少的版本。

前端

redshift-gtk 命令随 redshift 软件包一起提供,并提供一个系统托盘图标,用于控制 Redshift。请参阅可选依赖项。

替代方案包括 redshift-qtAURredshiftconfAURplasma5-applets-redshift-control-gitAUR

用法

Redshift 至少需要您的位置才能启动(除非使用了 -O),这意味着您所在位置的纬度和经度。Redshift 采用多种例程来获取您的位置。如果这些例程均无效(例如,未安装任何使用的辅助程序),则需要手动输入您的位置。

快速开始

要使用基本设置启动并运行它,请执行

$ redshift -l LATITUDE:LONGITUDE

其中 LATITUDE 是您所在位置的纬度,LONGITUDE 是经度。

提示: 您可以使用 GeoNames.org 获取某个地点的坐标。

要立即调整屏幕的色温,请使用

$ redshift -P -O TEMPERATURE

其中 TEMPERATURE 是所需的 色温(介于 100025000 之间)。

自动启动

有几种选项可以让 Redshift 自动启动

  • redshift-gtkplasma5-applets-redshift-control 已经启动时,右键单击系统托盘图标并选择自动启动
  • 通过将 Redshift 桌面条目 放置在 ~/.config/autostart/ 中,或者将 redshift 添加到您的窗口管理器或桌面环境的 自动启动 方法中。
  • 通过使用提供的 用户单元redshift.serviceredshift-gtk.service。仅激活其中一个,具体取决于您是否需要系统托盘图标。
注意
  • Redshift 服务文件包含 Restart=always,因此它们将无限重启。请参阅 systemd.service(5)
  • 当使用 systemd 用户服务时,Xorg 必须在服务执行之前启动,如果没有 显示管理器,则情况并非如此。否则,您将收到 RANDR Query Version' returned error -1Initialization of randr failed 错误。这已经在上面的 systemd/User 方法中得到解决,该方法包含 After=display-manager.service

切换

Redshift 将定期持续更新色温。如果您只想进行一次调整,可以选择单次模式。可以通过向其发送 USR1 信号来临时切换 Redshift 完成的颜色调整的开启和关闭状态

$ pkill -USR1 redshift

配置

如果存在,Redshift 将读取配置文件 ~/.config/redshift/redshift.conf [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"

有关更多信息,请参阅 论坛主题。

使用真实的屏幕亮度

Redshift 具有亮度调整设置,但它的工作方式与大多数人可能期望的不同。实际上,它是一种通过操纵 gamma 斜坡获得的虚假亮度调整,这意味着它不会降低屏幕的背光。[3]

可以使用 redshift hooks 和 acpilight 更改屏幕背光,但请参阅 Backlight#xbacklight,因为存在一些限制,您可能需要找到另一种控制背光的方法,具体取决于您的硬件。

您需要在 ~/.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

故障排除

无法连接到 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

在您的发行版中找到配置文件 "redshift.conf",并将 "screen 1" 更改为 "screen 0"。

托盘图标的左/右键单击无效

安装 libappindicator-gtk3。请参阅 redshift issue 363FS#49971

Redshift 使屏幕在设定的颜色值和默认颜色值之间快速闪烁

确保没有多个 redshift 实例正在运行。

Redshift 作为命令调用时工作正常,但作为 systemd 服务运行时失败

systemd 单元在 redshift.service 文件中有一行,使服务等待 显示管理器 启动 display-manager.service 单元后,该单元才会调用 redshift。如果您不使用显示管理器,请编辑 redshift.service 用户服务并删除 After=display-manager.service 行。运行 daemon-reload,服务应正确初始化。

Redshift-gtk 服务导致核心转储

请参考上一个问题和 [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

Redshift 在使用某些重置 gamma 值的 wine 应用程序时暂时重置

此条目或章节正在考虑移除。

原因: 此错误似乎自约 2021 年以来已修复。(在 Talk:Redshift 中讨论)

如果您注意到使用某些 wine 应用程序时,redshift 似乎在启动、调整设置等时暂时重置,那么有一个有用的注册表项似乎可以缓解此问题。请参阅 [5][6]。使用注册表编辑器设置或创建此字符串值,或以其他方式导入/设置它

HKEY_CURRENT_USER\Software\Wine\X11 Driver
UseXVidMode="N"

在使用 Nvidia 驱动程序时,分辨率超过 1080p 时 Redshift 将屏幕变成绿色

这是 nvidia 驱动程序的一个错误。对此的修复方法是进行以下编辑

/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
    ...
    Option         "UseNvKmsCompositionPipeline" "false"
    ...
EndSection

有关更多信息,请参阅 redshift issue 587redshift issue 720

Redshift 不支持切换热键

一种解决方法是在您的桌面环境中创建一个自定义热键,调用命令 pkill -USR1 '^redshift$'

有关更多信息,请参阅 [7]

参见