如何让Redshift随着我的电脑启动?

我已经在我的电脑上安装了Redshift,使用命令gtk-redshift它可以正常工作。
然而,在启动应用程序中使用相同的命令时,它无法自动启动。
请问如何设置它自动启动?
9个回答

有一个已知的错误#868904导致Redshift在11.10版本中由于启动时的geoclue冲突而无法自动启动。

请参考错误报告中的评论 #17,可能会提供一个解决方案,即在启动时永久设置位置。

1)使用http://itouchmap.com/latlong.html或其他服务来查找您的纬度/经度

2)调整redshift的启动命令为:gtk-redshift -l <latitude>:<longitude>

以阿姆斯特丹的纬度/经度为例:gtk-redshift -l 52.37:4.9

据报道,该问题在1.7-1ubuntu2版本的软件包中已修复,但项目的Launchpad主页上只列出了35周前构建的1.7-0ubuntu1版本。

你可以尝试直接从他们的网站下载,看看是否能通过更新版本来解决问题。

我使用GNOME-clock方法,它会启动吗? - Dandyman
我不确定,你可以试一试,但是上面列出的步骤似乎有效。 - Mark Rooney
我现在已经尝试过了gnome时钟和手动方法,但都无法启动。 - Dandyman
如果您已经尝试了上述方法但仍然无效,那么我没有其他建议了。正如我之前所说,这是Redshift中的一个错误,您可能需要等待Redshift开发人员解决该问题。 - Mark Rooney
这个问题在14.04版本中也出现了,你的第二个选项对我很有效。谢谢。 - Ébe Isaac

~/.config中创建一个名为redshift.conf的文件,并将您的坐标添加到其中。它应该最终看起来像这样:like this
[redshift]
location-provider=manual
[manual]
lat=55.0
lon=12.0

这对我来说运作正常,使用的是Trusty上设置为自动启动的redshift-gtk v1.7版本。 - Arch Stanton

我建议两种方法:

  1. 使用crontab
  2. 使用upstart

CRONTAB

Crontab是一个一直在运行的程序。它有一个包含程序和脚本以及它们应该运行的确切日期或间隔的列表。系统管理员经常使用Crontab来进行备份和自动化任务。

要查看程序列表,您可以输入

crontab -l

编辑列表,请输入
crontab -e

在最后添加这行代码,以便在计算机启动时自动启动Redshift。
@reboot export DISPLAY=:0.0 && /usr/bin/redshift -l 56.20:16.35

在这里,56.20:16.35是您所在位置的LATITUDE:LONGITUTE。 保存并重新启动。

UPSTART

Upstart是一个程序,除其他功能外,它还会在启动时查找特定文件夹中的脚本来运行。因此,我们只需将我们的程序添加到其中,以便在每次启动时运行。Upstart比crontab更低级,并且需要root权限。

要添加redshift,您只需编辑/etc/rc.local文件。在文件中的exit之前添加redshift的路径即可,否则它将无法运行。您可以通过键入whereis redshift来找到路径。文件应该类似于以下内容:

#!/bin/sh -e
pcscd
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/usr/bin/redshift

exit 0

保存并重新启动。

在我的Ubuntu 14.04上,两种方法都不起作用。特别是使用crontab的方法,在syslog中我可以看到命令被执行了,没有错误信息,但是当登录屏幕出现时,进程消失了。(也就是说,没有Redshift运行的视觉效果,在登录后我可以确认确实没有Redshift进程在运行。) - Raphael
1这篇帖子表明你提出的两种方法都注定会失败。你真的确认过它们在多个设置中是否有效吗?例如,我已经检查过对于我来说,$DISPLAY有时是:0,有时是:0.0,那么我该如何硬编码一个值呢? - Raphael
在点赞之前应该先确认这个是否真的有效。正如@Raphael的评论所说,这根本不起作用。现在我无法取消我的点赞了! - jamadagni

连接您的计算机到互联网并在终端中运行gtk-redshift
输出将会是:

maez@maez:~$ gtk-redshift
尝试使用位置提供程序`geoclue'...
启动Geoclue提供程序`Geoclue Master'。
使用提供程序`geoclue'。
** (process:3541): 警告 **: 无法获取位置,还剩3次重试。
根据geoclue提供程序,我们位于:18.98, 72.83 使用方法`randr'。
一旦您从上述内容中获得您的纬度和经度,请继续编辑Redshift的自动启动配置文件,该文件位于"~/.config/autostart/"目录下。

maez@maez:~$ cd .config/autostart/
maez@maez:~/.config/autostart$ gedit redshift-gtk.desktop


在gedit窗口中,在"Exec=redshift-gtk"旁边添加"-l 18.98:72.83"。

[Desktop Entry]
Comment=Color temperature adjustment tool
StartupNotify=true
Exec=redshift-gtk -l 18.98:72.83
Terminal=false
GenericName=Color temperature adjustment
Version=1.0
Categories=Utility;
Hidden=false
Icon=redshift
Type=Application
X-GNOME-Autostart-enabled=true
Name=Redshift

在这里18.98:72.83是你的纬度:经度

保存这个文件并重新启动。


3只需执行命令 cp /usr/share/applications/redshift.desktop ~/.config/autostart/ 即可。 - Gayan Weerakutti

另一个解决方法(评论#53)是安装geoclue-hostip
尽管在我的设置中(Ubuntu 13.04),手动定位的解决方法有效,并且我更喜欢它,因为它可以让我更精确地指示位置。

另一种方法是这样做:
  1. 创建一个配置文件,例如 /etc/redshift.conf

    [redshift]
    location-provider=manual
    
    [manual]
    lat=xx.xxx
    lon=yy.yyy
    
  2. 创建一个调用该文件的脚本,例如 /usr/local/bin/redshift.sh (之后执行 chmod 755

    redshift -c /etc/redshift.conf &
    
  3. 每当显示管理器启动时调用此脚本。对于 LightDM,这将是位于 /etc/lightdm/lightdm.conf.d/90-redshift.conf 的文件:

    [Seat:*]
    display-setup-script=/usr/local/bin/redshift.sh
    

相当古老的问题,但对于那些可能遇到此问题的人来说,一个可能的解决方案可能只是通过移除geoclue并--如果尚不存在--安装geoclue-2.0
类似这样:apt remove geoclue && apt install geoclue-2.0 注销并重新登录以查看更改。
附注:如果颜色无法说明情况,您可以使用ps命令检查redshift是否正在运行。例如:ps aux | grep redshift

创建文件~/.xprofile,内容如下:
#!/bin/sh
sleep 10 && redshift -PO 4200 &

xprofile 是在 X 用户会话开始时执行的,即在您登录到图形 shell(Unity 或 Gnome)后执行。

命令redshift -PO 4200将温度设置为4200K。

您可以通过注销然后重新登录来测试该脚本。


为什么要睡10秒钟? - KajMagnus
1@KajMagnus 为了有效果,redshift 应该在其他一些进程完成之后运行。 - golopot

另一种方法是通过手动指定经纬度来设置redshift的启动命令,例如:
redshift-gtk -l xx:yy

其中 xx - 纬度,yy - 经度

初始应用程序界面:

在 Ubuntu 14.04LTS 上进行测试