Beiträge von Alti

    Sorry, das ist etwas irreführend. Ich hatte im Dienst den devmon - Aufruf auskommentiert.

    Wie Du an den Logs siehst, es wird nur Python ausgeführt. Kein Bash, kein devmon.

    Es steht und Fällt mit der besch... Useranmeldung. Wie gesagt das Ding soll ohne Anmeldung laufen, Anschalten und Musik spielen. ;(

    Nachtrag:

    Das Script hängt nicht, es bricht ab, wie zuvor. Und sobald ich mich über Putty einlogge startet das Script neu, was im ersten Moment den Eindruck erzeugte die alte Scriptausführung würde fortgesetzt.

    Denn als nächstes hab ich dann die Zeile log(0,'os.environ.get("USER") = ' + os.environ.get("USER")) (Userabfrage) gelöscht. Dann lief das Script wieder durch, aber ohne Ton. Als ich mich dann wieder über Putty angemeldet habe startete das Script von neuem, aber dann mit Ton.

    Wie kann ich dem Script sagen, dass es nicht nur mit den Rechten, sondern von dem User gestartet werden soll, bzw. wie kann ich den user für diesen Task anmelden?

    Also ich habe den Dienst wie folgt angepasst (und alle Dateien vom Stick ins HOME:

    Nach dem reboot hängt das Script wieder an der Userabfrage. Wenn ich mich dann über Putty anmelde läuft es weiter...?!?!?!?

    Hallo,

    leider hab ich zurzeit viel Stress und bin nicht mehr weiter zu Testen (und Schreiben) gekommen, aber die Statusabfrage hatte ich noch an dem Abend gemacht. Leider kann ich nicht sagen was wirklich der Grund ist, dass das Pythonsript dann doch manchmal startet. Bisher schaffe ich es, in dem ich mehrmals schnell zwischen Start und Stop das Dienstes wechsel. Das ist aber keine Lösung.

    Was mir bei dem Status auffällt ist, wenn das Pythonsctipt abbricht läuft nur eine Instanz vom devmon, wenn das(/ein) Pythonscript durchläuft, laufen 2 Instanzen vom devmon.

    Pythonscript ist abgebrochen

    Pythonscript läuft

    Wie ich inzwischen gelesen habe, kann man in so einem Dienst auch mehrer Programme nacheinander starten, so dass ich mir überlegt habe, zuerst den devmon zu starten und dann separat das Script. Und die Kontrolle, ob ein passender Stick eingesteckt oder entfernt wurde, packe ich dann in das Pythonscript. Auf gut deutsch, das Pythonscript muss dann endlos laufen (das wollte ich mit dem Start aus dem devmon vermeiden).

    Als nächstes werde ich erstmal testen, ob das Pythonscript ohne devmon einwandfrei läuft, also ohne Abbruch bei der Userabfrage. Vieleicht schaffe ich es dieses Wochenende mal zu testen. Ich halte Euch auf dem Laufenden.

    hyle vielen Dank, vom Grundsatz her tut es das was es soll.

    Eine kleine Besonderheit gibt es aber noch, ob ich das dann als Feature "verkaufen" kann... :D .

    Das Teil soll ja am Ende eine Blackbox sein, in die man einen USB - Stick steckt und er dann die Musik spielt. Deshalb starte ich mit dem Dienst auch den devmon ( RTFM ich betrachte das Wort kurios in diesem Zusammenhang aus dem Mund eines alten Hasens mal als Kompliment :D) und mit dem devmon dann das Pythonscript, wenn der USB-Stick eingesteckt ist.

    Und hier ist die Besonderheit:

    Als ich, nach einigem tüfteln, den Dienst manuel gestartet habe lief alles einwandfrei, also USB-Stick steckt im Pi. Dann habe ich den Dienst enabled und den Pi gerebooted. Rechner startet, devmon startet, Python startet, bricht aber direkt zu begin an der Zeile log(0,os.environ.get("USER")) ab.

    Dienst gestoppt und nach einer Zeit wieder gestartet, das gleiche.

    Dienst gestoppt und sofort wieder gestartet, Script läuft und es kommt Musik.

    Rechner wieder neu gebootet, gleiche wie vorher, Script bricht ab.

    Ich ziehe den USB-Stick und steck ihn wieder rein, Script startet und läuft und es kommt Musik.(Bis zu diesem Punkt wollte ich es noch als Feature verkaufen.)

    Dann habe ich die Zeile log(0,os.environ.get("USER")) aus dem Script gelöscht und den Rechner neu gestartet.

    Script startet und läuft durch, aber keine Musik. Ich sehe an der Logdatei, dass die Musikstücke gespielt werden (mit Lautstärke ;) ) aber kein Sound.

    USB-Stick aus und einstecken, das gleiche.

    Zeile wieder eingefügt, Script stoppt wieder, aber leider funktioniert jetzt auch das ein und ausstecken des USB-Sticks nicht mehr :(

    Ich vermute/hoffe es ist ein Timing Problem dass zu lösen ist.

    denn bei "Dienst gestoppt und sofort wieder gestartet", Script läuft wieder und es kommt auch Musik.

    das ist alles was ich habe, weil den Rest schon rausgeschmissen habe.

    Alti
    17. Mai 2023 um 13:51

    cron ist das falsche Tool dafür. Besser wäre systemd, weil man da auch festlegen kann, dass er aufs Soundsystem usw. warten soll.

    Ich habe da was gefunden unter https://github.com/gutenye/systemd-units/tree/master/devmon gefunden. Ich steig da aber noch nicht durch.

    devmon soll beim booten gestartet werden, und devmon soll das Pythonscript starten sobald der (richtige) USB Stick eingesteckt wird. Ich habe schon ein Bash Script das (zurzeit noch) über @reboot aufgerufen wird.

    Bash
    #!/bin/sh
    /usr/bin/devmon --exec-on-drive "python3 /mnt/smb/Audio/MusikBox.py %d >MusikBox.log" --always-exec --exec-on-remove "bash ~/cmd" >devmon.log

    Wenn systemd der richtige Weg ist wäre ich Euch sehr dankbar, wenn ihr mir da helfen könntet devmon mit den gewünschten Parametern zu starten. :helpnew:

    Setz den Aufruf mal in ein bash-Skript (mit Shebang), mach das ausführbar und lass die Ausgabe des Cronjobs in eine Datei umleiten.

    Das ist die Ausgabe, wenn er versucht den Player zu starten und Musik zu spielen:

    Die Einträge mit Main kommen aus dem Pythonprogramm, aus dem Threading.

    Die gleichen ausgaben habe ich wenn ich das Pythonscript als root, also mit sudo starte.

    Es wäre auch möglich, dass @reboot zu früh das Script startet. Siehe "Please note ..." in < man 5 crontab >

    Ich habe sicherheitshalber ein sleep 15 vorangestellt, weil ich das in anderen Fällen schon gemerkt habe.

    PS: Für vlc brauchst Du nicht nur einen angemeldeten User (im Multiuser Modus), sondern auch dessen Grafiksystem.

    Mit einem angemeldeten User funktioniert es auf ohne grafische Oberflächer, wenn Du damit Grafiksystem meinst, denn das System ist headless. Das Problem scheint der User zu sein der als nicht angemeldet gilt.

    Hallo zusammen,

    ich habe ein kurioses Problem.

    Ich habe mit Pythen 3.9 ein Script geschrieben, dass den vlc Mediaplayer nutzt. Es läuft auf einem Pi4 mit bullseye.

    Ich weiss, dass der vlc unter einem User laufen muss, weil er als root oder system nicht auf die resourcen zugreifen kann.

    Das ganze wird über devmon gestartet, da die Musik auf einem USB-Stick ist und soll im "Autostart" sein.

    Wenn ich mich jetzt über das Terminal anmelde und den ganzen Spass mit devmon --exec-on-drive "python3 /mnt/smb/Audio/MusikBoxV1.py %d" --always-exec starte, funktioniert alles einwandfrei, wenn ich das ganze aber in der crontab mit @reboot userDJ /bin/devmon --exec-on-drive "python3 /mnt/smb/Audio/MusikBoxV1.py %d" --always-exec oder auch mit crontab -e ohne Usernennung starte, läufte das Script zwar einwandfrei aber es kommt kein Ton.

    Was ich herrausgefunden habe ist, dass der vlc sich alle möglichen Devices zieht (mit get_device()) als wäre er als root angemeldet.

    Darauf hin habe ich folgende 2 Zeilen eingebaut die einen Log wegschreiben um zu schauen, wer denn nun wirklich des Script ausführt.

    Code
    log(0,os.system("whoami"))
    log(0,os.environ.get("USER"))

    Wenn ich das Script per Hand starte (über das Terminal) bekomme ich für beide Zeilen den gerade ausführenden User.

    Starte ich das Script über crontab (oder crontab -e) kommt für whoami gar nichts und für os.environ.get("USER") bekomme ich None geliefert, was erklärt warum vlc nicht so macht wie er soll.

    Wie schaffe ich es, dass das Script aus einem crontab unter einem bestimmten User ausgeführt wird? Oder habe ich irgend was übersehen?

    Vielen Dank

    Heiko

    Hallo zusammen,

    Et löppt!!!!

    Ich bin leider erst heute weiter zum Testen gekommen, aber es läuft jetzt, zwar weiß ich nicht seit wann, aber es läuft.

    Erstmal vielen Dank an hyle und an Bernd666, dass ihr euch die Zeit genommen habt. Ich habe gerade auch gesehen, dass sich noch weiter damit beschäftigt haben. Auch euch Danke.

    hyle genau darüber bin ich auch gestolpert

    Alti Bezüglich Lautstärke könnte der VLC-Player nicht voll aufgedreht sein. Siehe hier Zeile 11, die Du mal einfügen könntest:

    Bernd666 In den Lite Versionen ist (zum Glück) kein PulseAudio vorinstalliert, im Gegensatz zu den Desktop Versionen. Bin mir auch nicht sicher, ob man den MiniAmp mit dem DAC+ vergleichen kann.

    und Bernd666 die Idee mit dem Mixer war garnicht so abwegig, wie ich zuerst dachte

    Moin Alti,

    du hast das Overlay für HiFiberry Dac + aktiviert? Ich finde es komisch das sich da IQ-Audio meldet.

    Aber vielleicht soll es so sein.

    Kannst du denn mit dem alsamixer die Lautstärke verändern?

    73 de Bernd

    und ja es ist eine IQ-Audio Karte (ich missbrauche gerade zum Testen und Programmschreiben eine von meinen Volumio HWs. Meine Mutter bekommt dann aber eine echte HifiBerry).

    Ich habe dann also alle Anpassungen, wie in dem Link von Dir hyle durchgeführt (dann nur mit dem IQ-Audio overlay). Und habe die asound.conf Datei erstellt. Alle Abfragen (aplay -l) sahen so aus wie sie sollten aber weder mein TestScript noch das von hyle gab einen Ton ab. Keine Fehlermeldung, kein Abbruch aber auch kein Ton. Vor Verzweilung hab ich dann einfach mal mein eigentliches MusikboxProgramm gestartet (ohne wirklich Hoffnung zu haben) und da kam dann plötzlich Musik!

    Einzige Unterschied zwischen MusikboxProgramm und den TestScripts was den VLC anbetrifft war die Zeile p.audio_set_volume(100).

    Also ich weiß nicht ab welchem Punkt der ganzen Versuche und Anpassungen es gelaufen ist und lediglich die Lautstärker des VLCs auf 0 war, aber wer dem Link von hyle gepostet folgt (dort steht es auch nochmal mit der asound.conf drin),

    https://www.hifiberry.com/docs/software/…g-linux-3-18-x/

    der sollte das Ding zum laufen bringen. Also, an die Lautstärke denken ;)

    Danke nochmal und

    viele Grüße

    Heiko

    Ok mit dem - vor dem t quatscht die jetzt auch, auch in normaler Lautstärke.

    die Ausgabe von aplay -l steht im #3 post... (deshalb hatte ich es erklären wollen ;) )

    Code
    $ aplay -l
    **** List of PLAYBACK Hardware Devices ****
    card 0: vc4hdmi0 [vc4-hdmi-0], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]  Subdevices: 1/1  Subdevice #0: subdevice #0
    card 1: vc4hdmi1 [vc4-hdmi-1], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]  Subdevices: 1/1  Subdevice #0: subdevice #0
    card 2: IQaudIODAC [IQaudIODAC], device 0: IQaudIO DAC HiFi pcm512x-hifi-0 [IQaudIO DAC HiFi pcm512x-hifi-0]  Subdevices: 1/1  Subdevice #0: subdevice #0

    Moin Alti,

    es kommt aber grundsätzlich Musik aus dem DAC+ raus?

    Also ohne VLC und Co. Einfach speaker-test -c 2 t wave.

    73 de Bernd

    das funktioniert. Da kommt ein weisses Rauschen mal rechts mal links :)

    Moin hyle,

    noe, ich will wissen ob die Defaultausgabe auf dem DAC liegt.

    Das war bisher immer die richtige Vorgehensweise.

    73 de Bernd

    Hallo Bernd,

    Das ist eigentlich genau das was ich suche, oder mir einbilde das es funktionieren könnte. Dem VLC oder dem Pulseaudio sagen, nimm standardmäßig die DAC Karte. Da soll später nicht zwischen irgendwelchen Output devices hin und her geschaltet werden.

    Welche Infos brauchst Du und wo finde ich sie?

    Ich denke nicht dass die Defaultausgabe auf der DAC liegt musste ja das Device 3 explizit angeben um was zu hören.

    ...Eine sound.conf in /etc habe ich nicht.