Redshift

From the
Redshift project web page
:
Redshift
adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night. This program is inspired by the closed-source application
f.lux
.
Note
Redshift does not support
Wayland
[1]
. See
Backlight#Wayland
for alternatives.
Installation
Install
the
redshift
package. Alternatively, install the
redshift-minimal
AUR
package, for a version with minimal dependencies.
Front ends
The
redshift-gtk
command comes with the
redshift
package and provides a system tray icon for controlling Redshift. See optional dependencies.
Alternatives are
redshift-qt
AUR
or
redshiftconf
AUR
.
Usage
Redshift will at least need your location to start (unless
-O
is used), meaning the latitude and longitude of your location. Redshift employs several routines for obtaining your location. If none of them works (e.g. none of the used helper programs is installed), you need to enter your location manually.
Quick start
To just get it up and running with a basic setup, issue:
$ redshift -l
LATITUDE
:
LONGITUDE
where
LATITUDE
is the latitude and
LONGITUDE
is the longitude of your location.
Tip
You can get the coordinates of a place with
GeoNames.org
.
To instantly adjust the color temperature of your screen use:
$ redshift -P -O
TEMPERATURE
where
TEMPERATURE
is the desired
color temperature
(between
1000
and
25000
).
Autostart
There are several options to have Redshift automatically started:
By right-clicking the system tray icon and selecting
Autostart
when
redshift-gtk
or
plasma5-applets-redshift-control
is already launched.
By placing a Redshift
desktop entry
in
~/.config/autostart/
or by adding
redshift
to your window manager or desktop environment's
autostarting
method.
By using the
user units
provided:
redshift.service
and
redshift-gtk.service
. Activate only one of them depending on whether or not you want the system tray icon.
Note
The Redshift service files contain
Restart=always
so they will restart infinitely. See
systemd.service(5)
.
When using a systemd user service,
Xorg
must be started before execution of the service, which is not the case without a
display manager
. Otherwise you will get
RANDR Query Version' returned error -1
and
Initialization of randr failed
. This is already accounted for in the
systemd/User
method above, which contains
After=display-manager.service
.
Toggle
Redshift will continously update the color temperature at regular intervals. One shot mode can be selected if you only want to do one adjustment. The color adjustments done by Redshift can be temporarily toggled on and off by sending it the USR1 signal:
$ pkill -USR1 redshift
Configuration
Redshift reads the configuration file
~/.config/redshift/redshift.conf
[2]
if it exists. However, Redshift does not create that configuration file, so you may want to create it manually. See
redshift.conf.sample
.
Specify location manually
Redshift calculates the sunrise and sunset times based on geographic coordinates. It can be specified manually by using the
manual
location-provider, e.g. for Paris:
~/.config/redshift/redshift.conf
[redshift]
...
location-provider=manual
...
[manual]
lat=48.864716
lon=2.349014
Automatic location based on GeoClue
Redshift uses the
geoclue2
location-provider by default. It needs a GeoClue agent running in the background. It is supposed to work without further configuration, but if you experience problems, see
#Unable to connect to GeoClue
.
Automatic location based on GPSD
You can also use
gpsd
to automatically determine your
GPS
location and use it as an input for Redshift. Create the following script and pass
$lat
and
$lon
to
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"
For more information, see
this
forums thread.
Use real screen brightness
Redshift has a brightness adjustment setting, but it does not work the way most people might expect. In fact it is a fake brightness adjustment obtained by manipulating the gamma ramps, which means that it does not reduce the backlight of the screen.
[3]
Changing screen backlight is possible with redshift hooks and
acpilight
AUR
, but there are some limitations and you may have to find another method of controlling the backlight depending on your hardware.
You need to create a file in
~/.config/redshift/hooks
and make it executable. You can use and edit the following example:
~/.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
Make it
executable
and
restart
the
redshift.service
to apply changes.
Check the service status as it should
not
contain the following message:
redshift[..]: No outputs have backlight property
Troubleshooting
Unable to connect to GeoClue
If running
$ redshift
and you are getting:
Unable to obtain GeoClue client path: Timeout was reached.
Then make sure that a GeoClue agent is running. GNOME Shell
provides an agent itself
. For other desktop environments, a demo agent (
/usr/lib/geoclue-2.0/demos/agent
) is
autostarted
. You can check if GeoClue works properly by checking the output of the
/usr/lib/geoclue-2.0/demos/where-am-i
command.
If you are using a desktop environment that does not support
XDG Autostart
, then you have to start the demo agent manually, or you can create a
systemd
unit file with the following config:
~/.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
Then
start/enable
the
geoclue-agent.service
user unit
.
Screen 1 could not be found
Locate configuration-file "redshift.conf" in your distribution and change "screen 1" to "screen 0".
Left/right clicking the tray icon does not work
Install
libappindicator
. See
redshift issue 363
and
FS#49971
.
Redshift makes the screen quickly flicker between the set color value of the screen and the default color value
Make sure there are not multiple instances of redshift running.
Redshift works fine when invoked as a command but fails when run as a systemd service
The
systemd
unit has a line in the
redshift.service
file that makes the service wait until the
display-manager.service
unit is started by a
display manager
before the unit will invoke
redshift
. If you do not use a display manager,
edit
the
redshift.service
user service and delete the
After=display-manager.service
line. Run a
daemon-reload
and the service should initialize properly.
Redshift-gtk service causes core-dumping
Refer to the previous problem and to
[4]
.
Redshift does not appear in system tray
If running the
$ redshift-gtk
command does not start in the system tray, but instead you get the following output
$ 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'
you will need to install
python-gobject
.
Redshift turns the screen green when resolution is over 1080p while using Nvidia drivers
This is a bug with the nvidia drivers. A fix for this is to make the following edit:
/etc/X11/xorg.conf.d/20-nvidia.conf
Section "Device"
    ...
    Option         "UseNvKmsCompositionPipeline" "false"
    ...
EndSection
For more information, see
redshift issue 587
and
redshift issue 720
.
Redshift does not support hotkey for toggling
A workaround is to create a custom hotkey in your desktop environment calling the command
pkill -USR1 '^redshift$'
.
For more information, see
[5]
.
See also
Redshift website
Redshift on GitHub
Wikipedia:Redshift (software)
Similar software:
redshift-scheduler
AUR
,
blugon
AUR