Quel est le moment approprié pour démarrer Redshift en utilisant upstart?

J'ai essayé de faire démarrer Redshift avant la connection pour que l'écran de bienvenue shiny ne m'ennuie pas, en particulier lors du changement d'user.

Exécuter Redshift en tant que service ne semble pas entièrement supporté (voir par exemple ce bug ) mais il semble possible en principe.

Après avoir essayé certaines choses trouvées sur AskUbuntu sans succès, ma tentative actuelle est mise en place ma propre tâche upstart; voici mon /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] 

Je pensais que démarrer après LightDM devrait fonctionner, et s'arrêter avec lui aussi.

Maintenant, cela se retrouve dans mon file de log /var/log/upstart/redshift.log :

 `RANDR Query Version' returned error -1 Initialization of randr failed. 

Googler pour l'erreur n'était pas très informatif. Je suppose que je suis encore trop tôt et que certains services ou l'autre liés à l'affichage des magies ne fonctionne pas encore.

Quel devrait être mon start on expression?

Ubuntu 14.04 LTS; 3.13.0-77-generic # 121-Ubuntu SMP … x86_64 GNU / Linux;
redshift 1.8; Serveur RandR version 1.4; paré 1.12.1

    Redshift est lié à un server X Alors que vous pouvez le démarrer dans le cadre du démarrage du système, c'est fragile; la façon robuste de le démarrer est dans le context de la session du server X (qui est plus large que la session de connection X).

    Plusieurs servers X peuvent s'exécuter sur la même machine à un moment donné. On leur atsortingbue des numéros d'affichage selon le principe du premier arrivé, premier servi. Le numéro d'affichage est la façon dont un programme sait quel server contacter, et les programmes le searchnt dans la variable d'environnement DISPLAY . La façon naturelle de démarrer un programme graphique est dans un context où la variable d'environnement DISPLAY est définie sur la valeur désirée.

    Vous pouvez faire l'hypothèse que lightdm est la première entité qui démarre un server X, donc il affiche :0 et code dur la variable d'environnement DISPLAY=:0 dans votre job upstart. Vous devez également définir la variable XAUTHORITY (voir Ouvrir une window sur un affichage X distant (pourquoi "Impossible d'ouvrir l'affichage")? ). Je pense que lightdm sur Ubuntu stocke le cookie dans /var/lib/lightdm/.Xauthority .

     env DISPLAY=":0" env XAUTHORITY="/var/lib/lightdm/.Xauthority" 

    Mais c'est fragile: cela suppose que l'affichage lightdm se termine par :0 . Je pense que cela ne fonctionnera pas sous sa forme actuelle en raison d'une condition de lightdm : le travail lightdm peut être considéré comme démarré avant que le server X ne soit opérationnel (je n'en suis pas sûr, je ne sais pas à quel moment le travail count comme commencé).

    La façon propre est de faire démarrer lightdm Redshift. De cette façon, il a commencé au bon moment dans le bon context. Editez /etc/lightdm/lightdm.conf et ajoutez redshift -c /etc/redshift.conf à la ligne display-setup-script dans la section SeatDefaults :

     [SeatDefaults] … display-setup-script=redshift -c /etc/redshift.conf & 

    Notez le & pour démarrer le redshift en arrière-plan (sinon lightdm attendrait qu'il soit fini). Je pense que Redshift se fermera quand le server X sortira (les applications X sortent généralement quand leur affichage disparaît, il n'y a donc pas besoin de suivre le process et de le tuer explicitement.

    Pour éviter le gel-lumière .

    La raison en est que le & n'est pas passé au shell, mais au redshift comme paramètre (regardez ps -aux pour vérifier). Pour résoudre ce problème, créez un script, f.ex.

     redshift -c /etc/redshift.conf & 

    dans /root/bin/redshift.sh . Chmod 755 et modifiez /etc/lightdm/lightdm.conf.d/90-redshift.conf pour contenir

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

    ( [Seat:*] semble être le nouveau [SeatDefaults] ).