Как сделать так, чтобы изображение сценария python отображалось перед завершением работы с помощью службы systemd? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть служебный файл ниже в папке / lib / systemd / system / рабочего стола Ubuntu 16.04 с диспетчером отображения lightdm для отображения изображения с python библиотекой подушек.

[Unit]

Description=Python script to show image on starting shutdown
DefaultDependencies=no
Requires=graphical.target
#Requires=lightdm.service graphical.target
Before= halt.target poweroff.target shutdown.target

[Service]

Environment="XAUTHORITY=/home/devops/.Xauthority"
Environment="DISPLAY=:0"
User=devops
Type=simple
RemainAfterExit=yes
ExecStart=/bin/true
ExecStop=/usr/bin/python3 /home/devops/display_image.py
KillMode=none
TimeoutSec=300min

[Install]

WantedBy=graphical.target multi-user.target

И python сценарий для отображения изображения приведен ниже

#!/usr/bin/python3


import time
from datetime import datetime
import psutil
from PIL import Image

start_time=datetime.now().strftime("%m/%d/%Y, %H:%M:%S")


#log to check if the script is started
with open("/home/devops/pylogs.txt", "a+") as text_file:
    print("Service script started on: {}".format(curr_time), file=text_file)

# open and show image
im = Image.open('/home/devops/shutdown_banner.jpg')
im.show()

# display image for 20 seconds before shutdown
time.sleep(20)

# hide image by killing the process
for proc in psutil.process_iter():
    if proc.name() == "display":
        proc.kill()


end_time=datetime.now().strftime("%m/%d/%Y, %H:%M:%S")

##log to check if the script is exited
with open("/home/devops/pylogs.txt", "a+") as text_file:
    print("Service exited on: {}".format(final_time), file=text_file)

Скрипт выполняется в соответствии с записями времени начала и окончания, которые добавляются в файл журнала. Однако изображение не отображается, поскольку сеанс пользователя gui lightdm уже завершен.

Script execution as stop job

Как показано выше остановка выключения, сценарий выполняется службой в течение 20 секунд, как я включил time.sleep(20), но изображение не отображается .

Поскольку lightdm является диспетчером отображения по умолчанию, я пытался сделать этот python скрипт ExecStopPre заданием lightdm.service, которое вообще не работает.

Должен ли я сделать свой сервис Bind или Partof для сервиса lightdm, чтобы изображение отображалось скриптом до того, как пользовательский сеанс lightdm gui будет завершен?

Является есть ли способ заставить мой служебный файл, который выполняет сценарий python, отображать изображение на экране входа в систему перед выключением или перезагрузкой?

...