Запустите Python как root при загрузке - PullRequest
0 голосов
/ 23 апреля 2020

Заранее извиняюсь, если об этом уже спрашивают, но я провел последние несколько часов, пытаясь найти предыдущие ответы, поэтому я потерян.

У меня есть следующий скрипт python, работающий на пи ноль, чтобы обнаружить RFID-карты и действовать как HID-клавиатура для ввода моего пароля. Это не безопасно, я знаю, но работает отлично.

Работает, когда IS SH в pi отдельно и запускает скрипт. Я пытаюсь заставить его запускаться при загрузке, не работает слишком хорошо. Я пробовал bashr c, init.d и любые другие способы, которые я нашел в своих начинаниях, поэтому любая другая помощь будет принята с благодарностью.

Я также пробовал показывать экран через bash скрипт, обеспокоенный тем, что для моего скрипта потребуется активная оболочка, но безрезультатно.

Вот мой скрипт:

import time
import RPi.GPIO as GPIO

import MFRC522
import signal
import datetime
now = datetime.datetime.now()
continue_reading = True

NULL_CHAR = chr(0)
def writetofile(scr):
    f = open("logs.txt", "a")
    tim = now.strftime("%Y-%m-%d %H:%M:%S")
    if scr == "error":
        f.write("Got error at ")
        f.write(tim)
        f.write("\r\n")
    else:
        f.write("Got Success with ")
        f.write(scr)
        f.write(" at ")
        f.write(tim)
        f.write("\r\n")

# function to send the data
def write_report(report):
    with open('/dev/hidg0', 'rb+') as fd:
        fd.write(report.encode())
def login():
    ##writes my password, commands removed for stack :)


def uidToString(uid):
    mystring = ""
    for i in uid:
        mystring = format(i, '02X') + mystring
    return mystring


def end_read(signal, frame):
    global continue_reading
    print("Ctrl+C captured, ending read.")
    continue_reading = False
    GPIO.cleanup()


signal.signal(signal.SIGINT, end_read)


MIFAREReader = MFRC522.MFRC522()


while continue_reading:

    # Scan for cards
    (status, TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

    # If a card is found
    if status == MIFAREReader.MI_OK:
        print ("Card detected")
                # Get the UID of the card
        (status, uid) = MIFAREReader.MFRC522_SelectTagSN()
        # If we have the UID, continue
        if status == MIFAREReader.MI_OK:
            carduid = uidToString(uid)
            if carduid == '75AC5685':
                print("KeyRing")
                writetofile("Keyring")
                login()
            elif carduid == 'D539F1FD':
                print("Keycard")
                writetofile("Keycard")
                login()
            print("Card read UID: %s" % carduid)
        else:
            print("Authentication error")
            writetofile("error")

Спасибо !!

1 Ответ

0 голосов
/ 24 апреля 2020

Спасибо @lxop за помощь, но это не моя проблема.

Извините за потраченный впустую пост, моя ошибка была в том, что я использовал каталог ~ при обращении к файлу, очевидно, без входа в систему. сейчас работает нормально. Спасибо, хотя!

...