aboutsummaryrefslogtreecommitdiffstats
path: root/DESIGN
diff options
context:
space:
mode:
Diffstat (limited to 'DESIGN')
-rw-r--r--DESIGN95
1 files changed, 95 insertions, 0 deletions
diff --git a/DESIGN b/DESIGN
new file mode 100644
index 0000000..31c9ee4
--- /dev/null
+++ b/DESIGN
@@ -0,0 +1,95 @@
+This is a document describing how redshift works. It might be useful
+if the normal docs don't answer a question, or when you want to hack
+on the code.
+
+
+Programs
+========
+
+redshift
+--------
+
+redshift is a program written in C that tries to figure out the user's
+location during startup, and then goes into a loop setting the display
+gamma according to the time of day every couple seconds or minutes
+(details?).
+
+On systems that support signals, it reacts to the SIGUSR1 signal by
+switching to day/night immediately, and when receiving SIGINT or
+SIGTERM, it restores the screen gamma (to 6500K).
+
+Redshift knows short and long transitions, short transitions being
+used at start and when reacting to signals. Short transitions take
+about 10 seconds; long transitions about 50 minutes.
+
+Once running, redshift currently doesn't check location providers
+again.
+
+
+gtk-redshift
+------------
+
+gtk-redshift is a small program written in Python that shows a status
+icon (what is an appindicator versus a GTK status icon?) (does it
+change the icon according to internal program state of redshift?
+doesn't seem so) and run an instance of the "redshift" program, and
+will send it SIGUSR1 each time the user clicks the icon.
+
+
+Alternative Features
+====================
+
+Redshift interacts with the rest of the system in two ways: reading
+the location, and setting the gamma. Both can be done in different
+ways, and so for both areas there are configure options to
+enable/disable compilation of the various methods. ./configure --help
+shows more about what parts of the program that can be conditionally
+compiled.
+
+NOTE: some features have to be disabled explicitely, like
+--disable-gnome-clock to prevent the gnome-clock code from being built
+in.
+
+The two groups of features shall be called: "location providers" and
+"adjustment methods".
+
+These are probably not the best names for these things but at least
+I've been mostly consistent with the naming throughout the source code
+(I hope).
+
+First adjustment methods: There is "randr" which is the preferred
+because it has some features that are lacking in "vidmode" (IIRC it
+has to do with multiple monitors). Both are APIs in the X server that
+allow for manipulation of gamma ramps, which is what Redshift uses to
+change the screen color temperature. There's also "wingdi" which is
+for the Windows version.
+
+Then there are location providers: "manual", "gnome-clock" and
+"geoclue". Some time ago there was only one way to specify the
+location which had to be done manually with the argument "-l LAT:LON".
+Then later, automatic "location providers" were added and the syntax
+had to be changed to "-l PROVIDER:OPTIONS" where OPTIONS are arguments
+specific to the provider. But to make people less confused about the
+change I decided to still support the "-l LAT:LON" syntax, so if the
+PROVIDER is a number, the whole thing is parsed as LAT:LON. You could
+run redshift with "-l manual:lat=55:lon=12" and get the same effect as
+"-l 55:12".
+
+So there are currently two automatic location providers "gnome-clock"
+and "geoclue". From the beginning I was looking for a way to get the
+location automatically (from e.g. GPS) and Geoclue seemed like a good
+idea, but upon closer investigation it turned out to be horribly
+unstable. At this time GNOME had a clock applet which was present by
+default (at least in Ubuntu) that allowed the user to set a home town.
+This setting was registered in the gconf key
+/apps/panel/applets/clock_screen*/prefs/cities.
+The idea was to use this information until Geoclue had become more
+stable. To me, it always was a hack. Now that the Clock applet has
+gone (at least in Ubuntu) the "gnome-clock" makes little sense and
+causes a lot of trouble, so I really want to get rid of it as soon as
+possible. The problem is that Geoclue is still problematic for some
+people.
+
+Lastly, there's the support for configuration files for which there's
+no real documentation, but all the options that can be set on the
+command line can also be set in the config file.