jonls / redshift

Redshift adjusts the color temperature of your screen according to your surroundings. This may help your eyes hurt less if you are working in front of the screen at night.
http://jonls.dk/redshift
GNU General Public License v3.0
5.87k stars 424 forks source link

Robustness improvement suggestion #815

Open raph2705 opened 3 years ago

raph2705 commented 3 years ago

Describe the bug Crash of redshift-gtk on some platforms related to the use of (or rather lack thereof) graphical-session.target

To reproduce Steps to reproduce the behavior:

  1. Install redshift-gtk Debian package
  2. Wait for reboot
  3. Notice the crash in syslogs (journalctl --user -u redshift-gtk)

Expected behavior I expect redshift-gtk to execute without a crash.

Error output/logs/screenshots No screenshot but here is the backtrace of the core dump

#0  0x00007f6e58f91690 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#1  0x00007f6e58e322c4 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#2  0x00007f6e58e53ad8 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#3  0x00007f6e58e3e21a in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#4  0x00007f6e58e539a8 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#5  0x00007f6e58e3eb62 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#6  0x00007f6e5ac99357 in g_type_create_instance () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7  0x00007f6e5ac7f615 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#8  0x00007f6e5ac80b1d in g_object_new_with_properties () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#9  0x00007f6e5ac815f1 in g_object_new () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#10 0x00007f6e58e5c47b in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#11 0x00007f6e59045819 in  () at /lib/x86_64-linux-gnu/libgtk-3.so.0
#12 0x00007f6e5ac99357 in g_type_create_instance () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#13 0x00007f6e5ac7f615 in  () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#14 0x00007f6e5ac80b1d in g_object_new_with_properties () at /lib/x86_64-linux-gnu/libgobject-2.0.so.0
#15 0x00007f6e5ae2ce84 in  () at /usr/lib/python3/dist-packages/gi/_gi.cpython-39-x86_64-linux-gnu.so
#16 0x00007f6e5ae4ad4f in  () at /usr/lib/python3/dist-packages/gi/_gi.cpython-39-x86_64-linux-gnu.so
#17 0x000000000051d6f5 in _PyObject_MakeTpCall ()
#18 0x00000000005175ba in _PyEval_EvalFrameDefault ()
#19 0x0000000000528b63 in _PyFunction_Vectorcall ()
#20 0x0000000000537b80 in  ()
#21 0x000000000051d6f5 in _PyObject_MakeTpCall ()
#22 0x00000000005170e4 in _PyEval_EvalFrameDefault ()
#23 0x0000000000510fe7 in  ()
#24 0x0000000000528d21 in _PyFunction_Vectorcall ()
#25 0x0000000000511fb5 in _PyEval_EvalFrameDefault ()
#26 0x00000000005106ed in  ()
#27 0x0000000000510497 in _PyEval_EvalCodeWithName ()
#28 0x00000000005f5be3 in PyEval_EvalCode ()
#29 0x0000000000619de7 in  ()
#30 0x0000000000615610 in  ()
#31 0x0000000000619d79 in  ()
#32 0x0000000000619816 in PyRun_SimpleFileExFlags ()
#33 0x000000000060d4e3 in Py_RunMain ()
#34 0x00000000005ea6e9 in Py_BytesMain ()
#35 0x00007f6e5b542d0a in __libc_start_main (main=0x5ea6b0, argc=2, argv=0x7fff17c021a8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fff17c02198) at ../csu/libc-start.c:308
#36 0x00000000005ea5ea in _start ()

Software versions (please complete the following information):

Remarks

Provided the issue is caused by an empty DISPLAY environment variable, I believe the crash could be avoided simply by looking at environment variables e.g. using Python equivalent to envp i.e. os.environ['DISPLAY'] and if that makes sense gracefully exit on the event « no DISPLAY variable defined »

Moreover as a small improvement a delay could be introduced in systemd service definition file between restart attempts (using RestartSec= field, as per systemd.service(5)), in order to avoid a frenzy restart and give time to the boot process to reach a step when DISPLAY is defined.