我一直在努力得到红移开始前登录,这样明亮的欢迎屏幕就不会令我眼花缭乱,特别是在切换用户时。
将 Redshift 作为服务运行似乎并不完全支持(参见例如这个错误)但似乎是可能的原则。
尝试后在 AskUbuntu 上找到的一些东西如果没有成功,我目前的尝试是建立自己的暴发户任务;这是我的/etc/init/redshift.conf
:
# Redshift
description "Redshift"
author "[email protected]"
start on (started lightdm)
script
exec redshift -c /etc/redshift.conf
end script
stop on runlevel [016]
我认为在 LightDM 运行后开始应该可以解决问题,并且也可以停止。
现在,这最终出现在我的日志文件中/var/log/upstart/redshift.log
:
`RANDR Query Version' returned error -1
Initialization of randr failed.
谷歌搜索该错误并没有提供太多信息。我猜测我还为时过早,一些与显示魔法相关的服务尚未运行。
我的表情应该是什么start on
?
Ubuntu 14.04 LTS; 3.13.0-77-generic #121-Ubuntu SMP ... x86_64 GNU/Linux;
红移1.8; RandR 服务器版本 1.4;新贵1.12.1
答案1
红移与X服务器。虽然您可以将其作为系统启动的一部分来启动,但这很脆弱;启动它的可靠方法是在 X 服务器会话的上下文中(比 X 登录会话更广泛)。
在给定时间,同一台机器上可以运行多个 X 服务器。它们按照先到先得的原则分配显示号码。显示编号是程序如何知道要联系哪个服务器以及程序在DISPLAY
环境变量中查找它的方式。启动 GUI 程序的自然方法是在将DISPLAY
环境变量设置为所需值的上下文中。
您可以假设 lightdm 是启动 X 服务器的第一个实体,因此它是 display ,并在您的 upstart 作业中:0
硬编码环境变量。DISPLAY=:0
您还需要设置XAUTHORITY
变量(请参阅在远程 X 显示器上打开窗口(为什么“无法打开显示器”)?)。我认为 Ubuntu 上的 lightdm 将 cookie 存储在/var/lib/lightdm/.Xauthority
.
env DISPLAY=":0"
env XAUTHORITY="/var/lib/lightdm/.Xauthority"
但这很脆弱:它假设显示 lightdm 最终位于 is :0
。我认为由于竞争条件,它不会以当前的形式工作:该lightdm
作业可能会被认为在 X 服务器启动并运行之前开始(但我对此不确定,我不知道在什么时候作业算作开始)。
干净的方法是让 lightdm 启动 Redshift。这样它就可以在正确的时间、正确的背景下开始。编辑/etc/lightdm/lightdm.conf
并添加redshift -c /etc/redshift.conf
到display-setup-script
该SeatDefaults
部分中的行:
[SeatDefaults]
…
display-setup-script=redshift -c /etc/redshift.conf &
请注意在后台&
启动redshift
(否则 lightdm 将等待它完成)。我认为 Redshift 会在 X 服务器退出时退出(X 应用程序通常在显示消失时退出,因此无需跟踪进程并显式终止它。
答案2
避免lightdm-冻结。
原因是&
没有传递给shell,而是作为参数传递给redshift(查看ps -aux
验证)。要解决此问题,请创建一个脚本 f.ex。
redshift -c /etc/redshift.conf &
在/root/bin/redshift.sh
。 chmod 755,并编辑/etc/lightdm/lightdm.conf.d/90-redshift.conf
以包含
[Seat:*]
display-setup-script=/root/bin/redshift.sh
([Seat:*]
似乎是新的[SeatDefaults]
)。