Difference between revisions of "Redshift"

From ArchWiki
Jump to: navigation, search
m (Fixed issue with escaping the "=" sign in the variable assignment)
(The included geoclue.service runs for 5 seconds and exits by design. It is unclear that for non gnome installs you also need to run an agent (which has no .service file) before redshift-gtk will run.)
 
(17 intermediate revisions by 7 users not shown)
Line 6: Line 6:
 
From the [http://jonls.dk/redshift/ Redshift project web page]:
 
From the [http://jonls.dk/redshift/ 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 [http://justgetflux.com f.lux].
+
:[[Wikipedia:Redshift (software)|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 [http://justgetflux.com f.lux].
  
 
{{Note|  
 
{{Note|  
Line 14: Line 14:
  
 
== Installation ==
 
== Installation ==
 
=== Redshift ===
 
  
 
[[Install]] the {{Pkg|redshift}} package. Alternatively, install the {{AUR|redshift-minimal}} package, for a version with minimal dependencies.
 
[[Install]] the {{Pkg|redshift}} package. Alternatively, install the {{AUR|redshift-minimal}} package, for a version with minimal dependencies.
  
==== Redshift-GTK ====
+
=== Front ends ===
  
The {{ic|redshift-gtk}} command is provided by the {{Pkg|redshift}} package. Redshift-GTK provides a system tray icon for controlling Redshift and requires the following packages to be installed: {{Pkg|python-gobject}}, {{Pkg|python-xdg}}, and {{Pkg|gtk3}}.
+
The ''redshift-gtk'' command comes with the {{Pkg|redshift}} package and provides a system tray icon for controlling Redshift. See optional dependencies.
  
===== Alternatives =====
+
Alternatives are {{AUR|redshiftgui-bin}} (GTK) and {{AUR|redshift-qt}}, {{AUR|redshiftconf}} or {{Pkg|plasma5-applets-redshift-control}} and {{AUR|plasma5-applets-redshift-control-git}} (Qt).
 
 
Another GTK application is {{AUR|redshiftgui-bin}} and alternative Qt solutions available are {{AUR|redshift-qt}}, {{AUR|redshiftconf}} or {{AUR|plasma5-applets-redshift-control-git}}.
 
  
 
== Configuration ==
 
== Configuration ==
  
Redshift will at least need your location to start, 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.
+
Redshift will at least need your location to start (unless {{ic|-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.
  
 
Redshift reads the configuration file {{ic|~/.config/redshift/redshift.conf}}, if it exists. However, Redshift does not create that configuration file, so you may want to create it manually. See [https://raw.githubusercontent.com/jonls/redshift/master/redshift.conf.sample redshift.conf.sample].
 
Redshift reads the configuration file {{ic|~/.config/redshift/redshift.conf}}, if it exists. However, Redshift does not create that configuration file, so you may want to create it manually. See [https://raw.githubusercontent.com/jonls/redshift/master/redshift.conf.sample redshift.conf.sample].
Line 39: Line 35:
 
To just get it up and running with a basic setup, issue:
 
To just get it up and running with a basic setup, issue:
  
  $ redshift -l LAT:LON
+
$ redshift -l LAT:LON
  
 
where ''LAT'' is the latitude and ''LON'' is the longitude of your location.
 
where ''LAT'' is the latitude and ''LON'' is the longitude of your location.
Line 65: Line 61:
 
=== Automatic location based on GeoClue2 ===
 
=== Automatic location based on GeoClue2 ===
  
[[Install]] {{pkg|geoclue2}}.
+
In order to allow access Redshift to use GeoClue2, add the following lines to {{ic|/etc/geoclue/geoclue.conf}}:
 
 
In order to allow access Redshift to use GeoClue, add the following lines to {{ic|/etc/geoclue/geoclue.conf}}:
 
 
{{hc|/etc/geoclue/geoclue.conf|2=
 
{{hc|/etc/geoclue/geoclue.conf|2=
 
[redshift]
 
[redshift]
Line 77: Line 71:
 
[[Restart]] {{ic|redshift.service}} and/or any other Redshift instance to apply the chances.
 
[[Restart]] {{ic|redshift.service}} and/or any other Redshift instance to apply the chances.
  
{{Note|If using [[GNOME]], also toggle Location Services to "On" in "Settings -> Privacy"}}
+
{{Note|
 +
* If using [[GNOME]], also toggle Location Services to "On" in "Settings -> Privacy"
 +
* Due possible bugs with geoclue2 and Redshift [https://github.com/jonls/redshift/issues/318], it may be required to use the {{ic|manual}} location-provider instead, e.g. for Paris:
 +
{{hc|~/.config/redshift/redshift.conf|2=
 +
[redshift]
 +
...
 +
; Set the location-provider: 'geoclue2', 'manual'
 +
; type 'redshift -l list' to see possible values.
 +
; The location provider settings are in a different section.
 +
location-provider=manual
 +
 
 +
...
 +
 
 +
; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
 +
; are negative numbers.
 +
[manual]
 +
lat=48.853
 +
lon=2.349}}
 +
* If using [[i3wm]] or similar, you'll also need to enable the geoclue agent on startup. As well as {{ic|systemctl --user enable redshift-gtk}} or {{ic|redshift}} user service.
 +
{{hc|~/.i3/config|2=
 +
...
 +
exec --no-startup-id /usr/lib/geoclue-2.0/demos/agent
 +
...}}
 +
}}
  
 
=== Automatic location based on GPS ===
 
=== Automatic location based on GPS ===
Line 107: Line 124:
  
 
Create and adjust the following script:
 
Create and adjust the following script:
{{hc|
+
{{hc|~/.config/redshift/hooks/brightness.sh|output=
~/.config/redshift/hooks/brightness.sh|output=#!/bin/sh
+
#!/bin/sh
  
 
# Set brightness via xbrightness when redshift status changes
 
# Set brightness via xbrightness when redshift status changes
Line 160: Line 177:
  
 
=== Redshift works fine when invoked as a command but fails when run as a systemd service ===
 
=== Redshift works fine when invoked as a command but fails when run as a systemd service ===
The [[systemd]] unit has a line in the {{ic|redshift.service}} file that makes the service wait until the {{ic|display-manager.service}} unit is started by a [[Display Manager]] before the unit will invoke {{ic|redshift}}. In lightweight setups, such as [[i3]], one often uses a [[Window Manager]] or no manager at all instead and thus the {{ic|display-manager.service}} is never started. Delete the line:
+
The [[systemd]] unit has a line in the {{ic|redshift.service}} file that makes the service wait until the {{ic|display-manager.service}} unit is started by a [[display manager]] before the unit will invoke {{ic|redshift}}. If you do not use a display manager, [[edit]] the {{ic|redshift.service}} user service and delete the {{ic|1=After=display-manager.service}} line. Run {{ic|systemctl --user daemon-reload}} and the service should initialize properly.
{{hc|/usr/lib/systemd/user/redshift.service|2=
 
After=display-manager.service
 
}}
 
 
 
from the {{ic|redshift.service}} file and run:
 
# systemctl --user daemon-reload
 
and the service should initialize properly.
 
  
 
=== Redshift temporarily resets using some wine apps that reset gamma values ===
 
=== Redshift temporarily resets using some wine apps that reset gamma values ===
Line 177: Line 187:
 
* [http://jonls.dk/redshift Redshift website]
 
* [http://jonls.dk/redshift Redshift website]
 
* [http://github.com/jonls/redshift Redshift on github]
 
* [http://github.com/jonls/redshift Redshift on github]
* {{App|sct|set color temperature|{{AUR|sct}}|{{AUR|sct}}}}
+
* {{App|sct|set color temperature|http://www.tedunangst.com/flak/post/sct-set-color-temperature|{{AUR|sct}}}}
 
* {{AUR|xflux-gui-git}}
 
* {{AUR|xflux-gui-git}}
 
* [[Wikipedia:Redshift_(software)]]
 
* [[Wikipedia:Redshift_(software)]]

Latest revision as of 14:28, 17 August 2018

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 f.lux.
Note:
  • Redshift does not support Wayland since it offers no way to adjust the color temperature. [1]
  • GNOME provides features like Redshift out-of-the-box and has Wayland support. Enable the Night Light in Display settings.

Installation

Install the redshift package. Alternatively, install the redshift-minimalAUR 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 redshiftgui-binAUR (GTK) and redshift-qtAUR, redshiftconfAUR or plasma5-applets-redshift-control and plasma5-applets-redshift-control-gitAUR (Qt).

Configuration

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.

Redshift reads the configuration file ~/.config/redshift/redshift.conf, if it exists. However, Redshift does not create that configuration file, so you may want to create it manually. See redshift.conf.sample.

Note: There seems to be a bug in Redshift that causes the transition option in the configuration file to not work as described: Instead of handling the transition between day and night it only changes the transition between application start-up and shutdown (and delay the latter as a consequence). See the talk page and the issue on the Redshift project page for more information.

Quick start

To just get it up and running with a basic setup, issue:

$ redshift -l LAT:LON

where LAT is the latitude and LON is the longitude of your location.

Tip: You can get the coordinates of a place with GeoNames.org.

To instantly adjusts the color temperature of your screen use:

$ redshift -O TEMP

where TEMP is the desired color temperature (between 1000 and 25000).

Autostart

There are several options to have redshift automatically started:

  • By using a systemd user unit. Two services are provided: redshift.service or redshift-gtk.service. Activate only one of them depending on whether or not you want the system tray icon.
  • By adding a shell script with the contents redshift &> /dev/null & in /etc/X11/xinit/xinitrc.d/, and then make it executable with chmod +x script_name.sh.
  • By adding pgrep redshift &> /dev/null || redshift &> /dev/null & to ~/.xinitrc if you are using startx
  • By right-clicking the system tray icon when Redshift-GTK or plasma5-applets-redshift-control is already launched and selecting 'Autostart'.
  • By using your preferred window manager or desktop environment's autostart methods. For example in i3, the following line could be added to the config file: exec --no-startup-id redshift-gtk. On other desktop environments, Desktop entries inside ~/.config/autostart can be used.
Note: The Redshift services files contains Restart=always so the service will restart infinitely (see systemd.service(5)).

Automatic location based on GeoClue2

In order to allow access Redshift to use GeoClue2, add the following lines to /etc/geoclue/geoclue.conf:

/etc/geoclue/geoclue.conf
[redshift]
allowed=true
system=false
users=

Restart redshift.service and/or any other Redshift instance to apply the chances.

Note:
  • If using GNOME, also toggle Location Services to "On" in "Settings -> Privacy"
  • Due possible bugs with geoclue2 and Redshift [2], it may be required to use the manual location-provider instead, e.g. for Paris:
~/.config/redshift/redshift.conf
[redshift]
...
; Set the location-provider: 'geoclue2', 'manual'
; type 'redshift -l list' to see possible values.
; The location provider settings are in a different section.
location-provider=manual

...

; Keep in mind that longitudes west of Greenwich (e.g. the Americas)
; are negative numbers.
[manual]
lat=48.853
lon=2.349
  • If using i3wm or similar, you'll also need to enable the geoclue agent on startup. As well as systemctl --user enable redshift-gtk or redshift user service.
~/.i3/config
...
exec --no-startup-id /usr/lib/geoclue-2.0/demos/agent
...

Automatic location based on GPS

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 xorg-xrandr and xorg-xbacklight but, please see Backlight#xbacklight as 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:

$ mkdir -p ~/.config/redshift/hooks

Create and adjust the following script:

~/.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="100"
brightness_transition="50"
brightness_night="10"
# Set fade time for changes to one minute
fade_time=60000

case $1 in
	period-changed)
		case $3 in
			night)
				xbacklight -set $brightness_night -time $fade_time
				;;
			transition)
				xbacklight -set $brightness_transition -time $fade_time
				;;
			daytime)
				xbacklight -set $brightness_day -time $fade_time
				;;
		esac
		;;
esac

Make it executable:

$ chmod +x ~/.config/redshift/hooks/brightness.sh

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

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 doesn't work

Install libappindicator-gtk3. See [4] and [5]

Redshift makes the screen quickly flicker between the set color value of the screen and the default color value

Make sure there aren't 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 systemctl --user daemon-reload and the service should initialize properly.

Redshift temporarily resets using some wine apps that reset gamma values

If you notice that using some wine apps, redshift seems to reset temporarily upon launch, or adjusting settings, or etc, then there is a useful registry key that seems to alleviate this. See [6] and [7]. Set or create the string value

HKEY_CURRENT_USER\Software\Wine\X11 Driver
UseXVidMode="N"
using the registry editor, or import/set it otherwise.

See also

http://www.tedunangst.com/flak/post/sct-set-color-temperature || sctAUR