autostart.sh Programm IREXEC

Ein neuer Artikel wurde veröffentlicht
  • Den zweiten Teil der ExecStart find ich nicht. Bei mir gibt es im etc Ordner keinen conf.d Ordner.
    Ich hab mal nach lircrc gesucht. Die einzige Datei, die ich Namens lircrc gefunden habe ist storage Ordner und das ist eine .lircrc
    In der wird die Verknüpfung zwischen dem Tastendruck und der ausführbaren .sh Datei hergestellt.
    Was ich noch gefunden habe ist im etc Ordner einen Ordner Namens lirc mit einer lircd.conf.rpi Datei und einer lircd.conf.xbox Datei.
    Hilft das irgendwie weiter?

  • Warum hast Du die anderen Ausgaben nicht gepostet?


    Möglicherweise ist es wirklich die fehlende Conf. Die man-page beschreibt eindeutig, wie man erst mal eine Anfangs-Conf anlegt:

    Code
    1. [b]irexec[/b] executes commands on an IR signal decoded by lircd, the LIRC daemon. It uses an lircrc config file where the [i]config = [/i]entries are executed. E. g., given the following config file snippet
    2.    begin
    3.        prog   = irexec
    4.        button = KEY_RED
    5.        config = echo "KEY_RED"
    6.    end


    Was jetzt noch vage ist, ist die Definition von ~ in der Pfadangabe zur Conf in der service-unit. Wenn man diese Conf nicht in ein vages Homedir gemäß ~ anlegen würde, könnte man das besser mit einem absoluten Pfad in der service-unit regeln. Möglicherweise würde das das Problem lösen. Soll es aber über ~ sein, muss man ggf. halt experimentieren und mal schauen, wo man mit

    Code
    1. cd ~


    tatsächlich landet. Das ließe sich ja dann in einen absoluten Pfad übersetzen. Ansonsten weiss ich nicht, welche User eingerichtet sind und ob der Standarduser der gleiche ist (root), der die systemstarts durchführt. Ist der Standarduser ein anderer als root, sind ~/ im Normalbetrieb und ~/ bei Systemstart zwei unterschiedliche Homedirs.

  • ich hab da nix gepostet weil ich nicht weiter gemacht habe. Macht ja auch wenig Sinn wenn ich die falsche Datei dort einbinde. Dieses Config File hab ich schon erstellt. das ist bei mir unter /storage und heißt einfach nur .lircrc und sieht so aus. Dann pack ich das da mal an die zweite Stelle der ExecStart.
    .lircrc:
    begin
    button = KEY_F1
    prog = irexec
    config = ./Hyperion-off.sh
    end


    begin
    button = KEY_F2
    prog = irexec
    config = ./Hyperion-on.sh
    end
    Automatisch zusammengefügt:[hr]
    Der Befehl hier (systemctl status lircd.service) bringt das. Also ist da kein lircd Service gestartet.
    lircd.service
    Loaded: not-found (Reason: No such file or directory)
    Active: inactive (dead)


    und der hier (dpkg -l | grep lircd) bringt das.
    -sh: dpkg: not found


    Ist das nen folge Fehler von der fehlenden lircd.service?


  • Der Befehl hier (systemctl status lircd.service) bringt das. Also ist da kein lircd Service gestartet.


    Code
    1. lircd.service
    2.   Loaded: not-found (Reason: No such file or directory)
    3.   Active: inactive (dead)


    Code
    1. dpkg -l | grep lircd
    2. -sh: dpkg: not found



    Mach noch mal folgendes.... um mal zu sehen, obs da überhaupt was ähnlich oder verwandt aussehendes gibt, wo man mal weiter recherchieren könnte.

    Code
    1. systemctl -l | grep ircd
    2. systemctl -l | grep lirc


    Zwei Ratschläge für die Zukunft.... Du solltest immer die vollständigen erbetenen Ausgaben posten, einschließlich des Befehls, der die Ausgabe durchführt. Und zweitens, bitte immer alle geforderten Ausgaben posten, selbst dann, wenn Du meinst, dass das unnötig ist. Das ist nämlich nie unnötig, sondern hilft immer dabei, sich ein Gesamtbild zu machen.... es sei denn, es handelt sich um seitenlange Ausgaben, die sollten natürlich passend auszugsweise gekürzt sein.

    dpkg not found
    ist für mich wichtig, da ich jetzt weiss, dass entweder kein Debian-Derivat läuft oder das es keinen Paket-Manager gibt. Ich nehme aber mal an, dass es ursprünglich Raspian ist , die Entwickler aber das Paket-Management irgendwie abgeschaltet haben. Und damit sind wir beim nächsten Problem: kein Socket.


    Code
    1. Ist das nen folge Fehler von der fehlenden lircd.service?


    Ja, das ist wohl der fehlende Socket.... zumindest vermute ich das. Und wegen der Kombination dieser beiden Feststellungen kann ich mich jetzt nur noch ausklinken. Ich habe keine Ahnung, wie man unter LibreElec ohne Paket-Manager fehlende Software installiert. Jetzt könnte man höchstens noch mal prüfen, ob vielleicht pacman oder yum als Tools fürs Paketmanagement vorhanden sind.... ich glaubs aber eher nicht. Vielleicht sind fehlende Pakete auch einfach nur zu downloaden, an richtiger Stelle zu entpacken und entsprechende Starts einzurichten. Auch das ist möglich. *hmmmm*


    Meiner unmaßgeblichen Meinung nach funktionert das nicht, weil der Socket-Layer anscheinend nicht installiert ist. Und das lässt sich imho wohl nur mit mehr Sachkenntnis lösen, als ich das jetzt hier ohne "Objekt" habe. Machbar ist sicher ne Menge, aber ab hier wärs für mich nur trockenschwimmen. Tut mir leid.

  • Ok.


    Der Befehl (systemctl -l | grep ircd) gibt das aus:


    eventlircd.service loaded active running Eventlirc server daemon
    lircd@lirc0:default:lircd.conf.rpi.service loaded active exited Lirc with lirc0:default:lircd.conf.rpi
    system-lircd.slice loaded active active system-lircd.slice



    und der Befehl (systemctl -l | grep lirc) gibt das aus:


    sys-devices-platform-lirc_rpi-lirc-lirc0.device loaded active plugged /sys/devices/platform/lirc_rpi/lirc/lirc0
    eventlircd.service loaded active running Eventlirc server daemon
    lircd@lirc0:default:lircd.conf.rpi.service loaded active exited Lirc with lirc0:default:lircd.conf.rpi
    system-lircd.slice loaded active active system-lircd.slice



    Ja. Danke dir nochmal für deine Hilfe. Was ich an dem ganzen System nur nicht verstehe ist, warum funktioniert das alles wenn ich es per Hand starte aber nicht wenn es automatisch gestartet werden soll?


    MfG Igge


  • Der Befehl (systemctl -l | grep ircd) gibt das aus:


    eventlircd.service loaded active running Eventlirc server daemon
    lircd@lirc0:default:lircd.conf.rpi.service loaded active exited Lirc with lirc0:default:lircd.conf.rpi
    system-lircd.slice loaded active active system-lircd.slice


    Versuch bitte solcherart Ausgaben in allgemein akzeptierter Form zu posten, und zwar in Code-Tags ... und immer die Ausgabe einschließlich dem Befehl. Das ist dann optisch deutlich vom normalen Posting-Text und den Textzitaten getrennt, sieht dann so aus und ist damit wesentlich besser lesbar:

    Code
    1. systemctl -l | grep ircd)
    2. eventlircd.service                                      loaded active running   Eventlirc server daemon
    3. lircd@lirc0:default:lircd.conf.rpi.service              loaded active exited    Lirc with lirc0:default:lircd.conf.rpi
    4. system-lircd.slice                                      loaded active active    system-lircd.slice



    Was ich an dem ganzen System nur nicht verstehe ist, warum funktioniert das alles wenn ich es per Hand starte aber nicht wenn es automatisch gestartet werden soll?


    Das war mir neu... dann muss es auch über die Unit funktionieren. Poste mal alle manuellen Schritte die zum erfolgreichen manuellen Start führen.... aber wirklich vom Terminalfenster alle Ausgaben, und zwar unzerrissen und ohne eigene Kommentare dazwischen.... aber auch nix anderes dazwischen ... wirklich nur die korrekten Befehle, mit denen das Programm danach erfolgreich läuft.


  • Das war mir neu... dann muss es auch über die Unit funktionieren. Poste mal alle manuellen Schritte die zum erfolgreichen manuellen Start führen.... aber wirklich vom Terminalfenster alle Ausgaben, und zwar unzerrissen und ohne eigene Kommentare dazwischen.... aber auch nix anderes dazwischen ... wirklich nur die korrekten Befehle, mit denen das Programm danach erfolgreich läuft.


    Das hatte ich allerdings schon in meinem ersten Post geschrieben. Das mit dem Code ist einfach.


    Code
    1. irexec &


    Meldungen vom System kommen da keine. Mehr muss ich nicht eingeben und schon geht es. Geht halt nur nicht wenn ich es versuche irgendwo rein zu schreiben um es beim hochfahren automatisch zu starten.


    MfG

  • Code
    1. /usr/bin/irexec --daemon


    Funktioniert das auch? Wenn nicht die Pfadangabe prüfen. Gegebenenfalls auch die Fehlermeldung posten.


    Bitte anschließend, wenn es erfolgreich war, die vollständige Zeile posten, einschließlich Pfad. Wenn das wie in deinem Beispiel funktioniert, geht das auch bei Systemstart.

  • Servus,
    nein. Das hier funktioniert nicht. Bingt aber auch keine Fehlermeldungen.

    Code
    1. /usr/bin/irexec --daemon



    Das hier funktioniert. Das hab ich aber auch schon versucht sowohl in deine irexec.service als auch in die autostart.sh rein zu schreiben. Ging aber nicht beim starten.

    Code
    1. /usr/bin/irexec &

  • Das hier funktioniert. Das hab ich aber auch schon versucht sowohl in deine irexec.service als auch in die autostart.sh rein zu schreiben. Ging aber nicht beim starten.

    Code
    1. /usr/bin/irexec &


    Dann habe ich noch eine letzte Idee, mit der ich es versuchen würde.... aber wichtig: KEINE konkurrierenden Prozesse generieren. Wenn da noch was in der autostart.sh enthalten sein sollte, MUSS das deaktiviert werden. Sonst wirst Du nie erfahren, ob sich der Prozess nicht vielleicht durch 2 Starts einfach gegenseitig behindert.

    Code
    1. nano /storage/.config/system.d/irexec.service



    " Enabled" ist diese Unit bereits. Du solltest sie nur einmal "reloaden"

    Code
    1. systemctl daemon-reload


    Probiere, was beim manuellen Start passiert und poste mal die Ausgaben:

    Code
    1. cd /storage/.config/system.d
    2. systemctl start irexec.service
    3. systemctl status irexec.service


    Wenn es gestartet wird, einmal rebooten und prüfen, was draus geworden ist:

    Code
    1. systemctl reboot
    2. systemctl status irexec.service
  • hier der code inklusive der Ausgabe.


    Gehen tut es auf jeden Fall nicht. Mal ne dumme Fage, hattest du nicht gesagt das bei Type das symple nicht funktioniert? Hab die irexec.service jetzt so umgeschrieben.

  • Code
    1. systemctl status irexec.service
    2. ● irexec.service - Autostart von irexec als Daemon
    3. ::::
    4. Nov 12 19:29:53 LibreELEC irexec[595]: irexec: could not open config file &
    5. Nov 12 19:29:53 LibreELEC irexec[595]: irexec: No such file or directory


    Der Fehler ist eindeutig: irexec findet während des Boots seine Config nicht und interpretiert den Hintergrund-Ampersand als Conf, was natürlich falsch ist.... aber beim manuellen Start wird sie gefunden. Warum? Wo ist der Unterschied? Ich nehme an, in den Shellvariablen, die zum Zeitpunkt des Boots nicht gesetzt sind.... soll heissen, vielleicht fehlt einfach nur sowas wie ein gesetzter PATH im Environment.


    Zwei Möglichkeiten sehe ich.... erstens, in der Manpage des installierten irexec nachsehen, was dort zur config steht, prüfen, ob die als Parameter übergeben werden kann. Dann feststellen, wo die tatsächlich liegt und prüfen, wie man sie als Commandline-Parameter korrekt übergibt.... und danach dann die Service-Unit anpassen. Alternativ das benötigte Environment in der Service-Unit setzen. Ist beides Frickelkram, aber durchaus machbar.



    Leider kann man das nur sinnvoll tun, wenn man selber am PC sitzt... jetzt hier per Ferndiagnose ohne eine äquivalente Installation wäre ein Treffer ein reiner Glückstreffer.


    Tut mir leid.... ich bin am Ende....