0

My Operating System is Manjora17.1.12, the Python version is 3.7.0, and the Supervisor's version is 3.3.4. I have a python script, it just shows a notification. The code is:

import os

os.system('notify-send hello')

The supervisor config is :

[program:test_notify]
directory=/home/zz
command=python -u test_notify.py
stdout_logfile = /home/zz/supervisord.d/log/test_notify.log
stderr_logfile = /home/zz/supervisord.d/log/test_notify.log

But when I execute the python script with the supervisor, it doesn't show the notification.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
zonzely
  • 395
  • 3
  • 6
  • 17

1 Answers1

1

Proper environment variables need to be set (DISPLAY & DBUS_SESSION_BUS_ADDRESS). You can do it in many different ways, depending on your needs, like e.g.

a) per subprocess

import os

os.system('DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send hello')

b) in script globally

import os

os.environ['DISPLAY'] = ':0'
os.environ['DBUS_SESSION_BUS_ADDRESS'] = 'unix:path=/run/user/1000/bus'
os.system('notify-send hello')

c) in supervisor config per program

[program:test_notify]
;
; your variables
;
user=john
environment=DISPLAY=":0",DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"

The above examples have a couple of assumptions (you may want to change these settings accordingly):

  • script is run as user john
  • UID of user john is 1000
  • notification appear on display :0

To run script as root and show notification for regular user, use sudo as described on Arch wiki Desktop_notifications.

dzekus
  • 26
  • 1