什么时候是使用 upstart 启动 Redshift 的合适时间?

什么时候是使用 upstart 启动 Redshift 的合适时间?

我一直在努力得到红移开始登录,这样明亮的欢迎屏幕就不会令我眼花缭乱,特别是在切换用户时。

将 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.confdisplay-setup-scriptSeatDefaults部分中的行:

[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])。

相关内容