Автозагрузка скрипта .py на Распберри

Не получается создать автозагрузку скрипта питона Задача, запускать видео по датчику Делаю через systemctl, Пишет ошибка и всё, а в чем не пишет( есть файл /lib/systemd/system/avtozap.service

[Unit]
Description=avtozap_v8
After=multi-user.target
[email protected]

[Service]
Type=simple
ExecStart=/usr/bin/python3 /usr/bin/aaavtozap.py
Reatart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

причем с этим кодом работает

#!/usr/bin/python3
from subprocess import run
import RPi.GPIO as IO
import time


buttonPin = 26

IO.setwarnings(False)
IO.setmode(IO.BCM)
IO.setup(buttonPin, IO.IN)

    
while 1:
    if(IO.input(buttonPin) == True):
        print ("pressed")
        run('vcgencmd display_power 0', shell=True)
    else:
        run('vcgencmd display_power 1', shell=True)
        print ("ne press")
        
   # if keyboard.is_pressed('esc'):
    #    print ("esc")
    
    time.sleep(1)

def keypress(event):
    global shiftkey
    if event.keysym == 'Shift_L':
        shiftkey = 0
    else:
        shiftkey = 101

а с этим не работает

#!/usr/bin/python3
from pathlib import Path
from time import sleep
from omxplayer.player import OMXPlayer
import RPi.GPIO as IO
from pynput import mouse
from subprocess import run

vpath = Path("/home/pi/Videos/black.mp4")

player = OMXPlayer(vpath, pause =True)
#player.quit()
duration = int(player.duration())
buttonPin = 26

IO.setwarnings(False)
IO.setmode(IO.BCM)
IO.setup(buttonPin, IO.IN)

def on_click(x,y,button,pressed):
    run('vcgencmd display_power 1', shell=True)
#    print('{0} at {1}'.format('Pressed' if pressed else 'Released',(x,y)))
#    if player.can_control():
#        player.stop()
#        player.quit()
#    if not pressed:
#        return False

listener = mouse.Listener(
    on_click=on_click
    )
listener.start()


while 1:
    if(IO.input(buttonPin) == True):
        print ("pressed")
        
        player = OMXPlayer(vpath, pause =True)
        #player.hide_video()
        player.play()
        run('vcgencmd display_power 0', shell=True)
        sleep(1)
        run('vcgencmd display_power 1', shell=True)
        sleep(duration-1)
        #sleep(5)
        #player.pause()
        #player.stop()
        #player.previous()
        #sleep(2)
        #player.show_video()
    else:
        print ("ne press")
    
   
    sleep(1)

Ответы (2 шт):

Автор решения: eri

OMXPlayer скорее всего нужен дисплэй

Для запуска на иксах

[Unit]
Description=X11 session for kiosk
After=graphical.target systemd-user-sessions.service
ConditionPathExists=/dev/tty8

[Service]
User=kiosk
WorkingDirectory=/opt/budka/

PAMName=login
Environment=XDG_SESSION_TYPE=x11
TTYPath=/dev/tty8
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
IgnoreSIGPIPE=no
SendSIGHUP=yes
StandardInput=tty
UnsetEnvironment=TERM

UtmpIdentifier=tty8
UtmpMode=user

StandardOutput=journal
ExecStartPre=/usr/bin/chvt 8
ExecStart=/usr/bin/startx /usr/bin/python3 /opt/budka/ui.py  -- -keeptty -novtswitch -sharevts  vt8

PIDFile=/opt/budka/budka.pid
KillSignal=9
Restart=always
RestartSec=5

[Install]
WantedBy=graphical.target
→ Ссылка
Автор решения: Илья Курбатов

В общем, мытарства привели меня к 3 вариантам автозагрузки

  1. Через .service
  2. sudo nano /etc/rc.local
  3. cron

и все они Работают! то есть, я создал скрипт создающий файл и он файл создавал при загрузке

from time import sleep
import datetime

current = datetime.datetime.now()
name = '/home/pi/python/avtozap' + 'DEBUG'+'.txt'
f = open(name,"w+")
f.write("Starting time = " + str(current) +'/r/n')

for i in range(10):
    f.write("this str /r/n " + str(i+1))
f.close()


duration = 10

while duration > 0:
    duration = duration -1
    sleep(1)    
name = '/home/pi/python/avtozap' + 'DEBUG'+'.txt'
f = open(name,"w+")
f.write("exec(open")
f.close()
exec(open("/home/pi/python/playVideo2.py").read())

а вот с этим не работает ( (это содержимое playVideo2.py)

    from pathlib import Path
    from time import sleep
    from omxplayer.player import OMXPlayer
    import RPi.GPIO as IO
    from subprocess import run

    vpath = Path("/home/pi/video.mp4")
    
    player = OMXPlayer(vpath, pause =True)
    #player.quit()
    duration = int(player.duration())
    buttonPin = 26
    
    
    IO.setwarnings(False)
    IO.setmode(IO.BCM)
    IO.setup(buttonPin, IO.IN)
    
    
    while 1:
    

        player = OMXPlayer(vpath, pause =True)
 
        player.play()
        run('vcgencmd display_power 0', shell=True)
        sleep(1)
        run('vcgencmd display_power 1', shell=True)
        sleep(duration-1)
        sleep(10)

причем если запустить в Thonny все Ок

→ Ссылка