У меня есть служебный файл ниже в папке / 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](https://i.stack.imgur.com/OTsjW.png)
Как показано выше остановка выключения, сценарий выполняется службой в течение 20 секунд, как я включил time.sleep(20)
, но изображение не отображается .
Поскольку lightdm является диспетчером отображения по умолчанию, я пытался сделать этот python скрипт ExecStopPre
заданием lightdm.service, которое вообще не работает.
Должен ли я сделать свой сервис Bind
или Partof
для сервиса lightdm, чтобы изображение отображалось скриптом до того, как пользовательский сеанс lightdm gui будет завершен?
Является есть ли способ заставить мой служебный файл, который выполняет сценарий python, отображать изображение на экране входа в систему перед выключением или перезагрузкой?