Note that the dependencies aren't because of setting the colour temperature, but to get your location information (see geoclue in the list). geoclue has several providers, but a common one for desktop machines is to connect to a network service that does geoip. Consequently most of the dependencies arrive due to that (eg proxies, crypto, glue code for object models to do all that, and some innocent bystanders).
The location information is used so that redshift can alter the colour temperature during the day (less needed) and dusk, evening and night (very needed).
And it looks like it includes redshift-gtk to give it graphical controls. Most packages I've used (Fedora, Ubuntu) split them up as redshift and redshift-gtk, and I've only never installed redshift-gtk, despite running a full Gnome desktop.
Because it uses sunset times to change your colour temperature around dusk. Localtime is not sufficient to work out dusk with any degree of accuracy.
Those of us using Redshift are not doing so for a one off colour temperature set, but because it is continually updated through the day and night.
You can tell it your location manually or have it done automatically.
Redshift is open source. It does not have binary blobs, patents, a business model and similar crud that f.lux does. Adjust your paranoia/expectations as needed.
This location-based setting sounds clever, but it's a crappy idea if you live further north than ~60°N. Or do you want your screen to go red at 3pm and stay that way until 10am the next day when it's winter? And then in summer it's red from 2am to 4am?
I use CF.lumen on Android and Redshift on Linux and I have to regularly shift the fake locations I give them in order to have them do what I want. At least with Redshift on Linux I can script it...
At least one of the authors is Danish (~55°N) so they are presumably aware of this to some degree. I am at 37°N and really do want the colour temperature inside to match that outside.
In any event it is open source, so you can change the code as you deem fit :)
Self-plug for something I wrote some time ago - you can use redshift-scheduler ( https://github.com/spantaleev/redshift-scheduler/ ) to set up a custom schedule (ultimately using redshift to set the screen temperature).
Do you think the idea of basing the timing on location is just bad altogether, or could the implementation be improved? Like mention to users above that latitude that they should set their bedtime, and then factor that into the timings.
Hell, I live at 53N and I definitely don't want the circadian rhythm dictated by sunrise/sunset. Sunrise right now is 8:00AM and sunset is 4:35PM. At solstice it'll be almost 9AM and just after 4PM.
The "crap" is primarily from geoclue which supports numerous methods of getting your location. Some of them such as geoip require making network connections. https://en.wikipedia.org/wiki/GeoClue
It would be absurd for Redshift to include its own networking (don't forget proxies and SSL), GPS, and other code. On Linux (Ubuntu especially), all those dependencies are installed by default and used by many other components. "crap" is the last thing to describe it.
OpenBSD doesn't have them by default which is why they show up. Redshift does support specifying your location on the command line or config file. gentoo has use flags where you can explicitly include (eg +geoclue) or exclude (eg -geoclue) components. I suspect OpenBSD doesn't, so it came down to whoever authored their port deciding to use geoclue by default.
It is an entirely reasonable decision. You use this software on personal machines (ie not servers), and people move around. Defaulting to something that usually works right is fine.
You are of course welcome to do a competitor, and show us all how much better it could be :-)
I don't really care either way about this, but to me, seems like a classic case of bloat, where the program is doing too many things at once.
It makes more sense to have a core app that does the basic functionality and can be run from CLI, and then separate out the the various components that perform different duties and require more dependencies etc, in a modular architecture. It's just better software design and you avoid a lot of pitfalls and hassle to end-users and integrators - just like the issue described by the OP.
It doesn't want to know the time - it wants to know the natural light levels outside. It wants to know the location to know what the light is like outside at the given time.
To expand a bit on why the localtime() is not enough, two factors are at play. First, the solar noon can be as much as two hours displaced from the timezone. This is basically time zone vs longitude. Second, depending on time of year and attitude you can go from having no daylight in the winter to no darkness in the summer.
> Second, depending on time of year and attitude you can go from having no daylight in the winter to no darkness in the summer.
Isn't this a perfect example where using more than localtime() is pointless? Just because it's dark all the time outside you don't want your screen to be red-ish all the time. And in summer you want the effect if you try to sleep, even if the sun is still relatively high.
I actually like that it's "red-ish all the time" because I'd prefer that my circadian rhythm match the outside lighting conditions. My eyes (and most others I know) adjust, and it no longer looks orange (in fact, non-adjusted screens start to look blue). Of course the lights around my apartment adjust too, otherwise the screen would continue to look off.
I generally have a hard time getting to sleep, and most mornings feel like I've been run over by a steamroller, so I don't mind a little red tint if it makes even a tiny difference in the quality of my sleep.
Saying you want your circadian rhythm match the outside light, then adding that you generally can't get to sleep while being steamrolled in the morning, sounds an aweful lot like you're not sleeping in accordance with your biological clock. Are you aware of delayed sleep phase syndrom?[0]? I have the same "issue" and it took me years to find a name for it, so I'd rather throw this at you, even if you knew.
I can understand wanting the screen to tint reddish when it's 9 or 10 pm, because I should be going to bed soon.
I don't necessarily want it changing colors at 4pm when it starts getting dark here in the winter. At 4:00, I still need to be up for another 6-10 hours.
FWIW, until I went in manually, I was monkeying with f.lux around Daylight Savings switches specifically to make it show up the way I wanted it. 4PM is a good time for it to start for me, because it heads off eyestrain at the pass before the sun starts getting low enough and yet my work time's still ongoing. YM, of course, MV.
I almost (but not quite) voted it down. I think it's mostly the tone, especially the "wait, what?" for something that is patently obvious to some people.
On Ubuntu includes are apparently broken, complaining about strings.h included from Xlibint.h ...
There's probably a yak to shave in that. However, if you're lazy and hit the same problem, you can compile a functional sct by lifting declarations of i and c outside their loops and dropping "-std=c99" from the command line.
Historically, including some headers ended up including some other headers automatically, such that the author might not realize what headers the file depends on, because it compiles without them explicitly included. glibc (and maybe gcc and xlib?) have been cleaning this up where possible, slowly over time. So a file that had "correct enough" includes for an older glibc might now be caught not including a header it needed all along.
I've been thinking of using xcalib to invert my display colors to reclaim a sane black background.
My terminal/editor have always been dark background, but eventually I had enough of the web's blinding conventions [0], and installed a browser extension. But it doesn't work as well as it should and I'm thinking a blanket inversion would be preferable.
It seems like xcalib (and associated machinery) only supports a simple RGB LUT though, which means green turns to purple etc. It's unfortunate that it doesn't have the universal approach of LUT->matrix->LUT like a calibratable monitor, so the invert could be done in say HSV space.
[0] White paper makes sense because it's a reflective medium that relies on ambient light. A glaring white background is the wrong choice for an emissive display. Notice how visual art applications (photoshop, maya, etc) default to a grey background and dark color scheme.
The redshift binary can be built without any of the GUI stuff at all, so some of the bloat complaint is a bit over-blown - more a fault of the port provider to not offer the option of a stripped down install perhaps?
Over the years I've decided the gradual adjustment lat/long bits are really a negative feature. It engineer cool but it's counterproductive to the goal.
I want the monitor dim between 7pm and 630am regardless of time of year so I cronned that into redshift.
Your body clock probably wants the full blue light in the am fwiw.
I'll give sct a try to see if its more pleasing to the eye.
Does it support changing temperature gradually when it's starting to get dark outside? This is one of biggest features of f-lux and redshift I believe.
This is a nice little idea; I’m cleaning it up for my own use under Linux, and I’d like to release it, but I cannot seem to find a license declaration for Ted’s code.
Anyone happen to know what license it was released under?
Cool, but is there any way we can do this without sacrificing colour precision? Also, the author didn't say if the values in the array are in linear or sRGB colour-space, though I'd bet it's the latter.
Don't monitors have colour calibration settings that can be set programatically? So you can change the output light intensity that corresponds to each of 0-255, i.e. change the voltage applied to the crystal at each of them?
The location information is used so that redshift can alter the colour temperature during the day (less needed) and dusk, evening and night (very needed).