diff options
Diffstat (limited to 'DESIGN')
-rw-r--r-- | DESIGN | 95 |
1 files changed, 95 insertions, 0 deletions
@@ -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. |