Mal wieder: LCD Display

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Schnell ein Script geschrieben:

    /home/pi/chronometer

    Bash
    #!/bin/sh 
    DISPLAY=:1 pihole -c 
    #

    Lokal (händisch) aufgerufen funktioniert es.

    In crontab -e eingetragen als:

    Code
    @reboot sleep 30 && /home/pi/chronometer >/dev/null 2>&1
    #

    passiert wieder genau nichts. Auch keine Fehlermeldung oder so.

    Das letzte in /var/log/messages lautet:

    Code
    Mar 30 20:31:15 raspi3 fbcp[960]: Primary display is 480 x 320
    Mar 30 20:31:15 raspi3 fbcp[960]: Second display is 480 x 320 16bps

    :conf:

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

    Einmal editiert, zuletzt von GuentherB (30. März 2021 um 20:55)

  • Wenn Du die Ausgaben nach /dev/null, also ins Nirvana und nicht in eine Datei schickst, wirst Du auch keine Fehlermeldungen erfahren.

    Damit hast Du natürlich völlig recht. Das war unüberlegt von mir.

    Diese Umleitungsgeschichte am Ende einer Zeile bei Crontab ist so drin bei mir, ohne zu hinterfragen, was da eigentlich passiert. Den Ausdruck 2>&1 hab ich bis heute nicht verstanden.

    Aber zurück zum Kern.

    Einen Fehler habe ich jetzt gefunden. Bei meinem letzen Konstrukt mit dem Shellscript konnte pihole nicht ausgeführt werden, weil der Pfad im Script fehlte. Also der klassische Fehler, dass Cron in einer anderen Umgebung läuft, als pi@. Das habe ich jetzt korrigiert und das Script sieht jetzt so aus:

    Bash
    #!/bin/sh
    DISPLAY=:1 /usr/local/bin/pihole -c
    #

    Die Zeile in der Crontab hab ich abgeändert auf:

    Code
    @reboot sleep 30 && /home/pi/chronometer >/home/pi/chronometer.err 2>&1
    #

    Immernoch ohne zu wissen, was der 2>&1 Ausdruck bewirkt.

    Das Ergebnis ist, dass das Script jetzt immerhin schon ausgeführt wird, es mir aber innerhalb von 2 Minuten ca. 82 kByte in /home/pi/chronometer.err schreibt. Hier mal ein Ausschnitt des Inhalts. Die erste Zeile irritiert mich:

    Dieser Block wiederholt sich ständig, vermutlich bei jedem refresh.

    Da steht also genau das, was ich eigentlich auf dem LCD sehen möchte. Sogar in bunt. Ich tippe mal auf einen Umleitungsfehler als Ursache für die Ausgabe der Anzeige in die Datei?

    Lg

    Günther

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

    • Offizieller Beitrag

    Die 2 steht für die Fehlerausgabe und die 1 für die normale Ausgabe, die ein Skript (z.B. durch ein echo "Hallo") machen könnte.

    Siehe dazu u.a. hier: https://wiki.ubuntuusers.de/Shell/Umleitun…anaele-der-Bash

    Btw. Setz mal DISPLAY=:1 in den Cronjob vor das Skript und das sleep in das Skript.

  • Die 2 steht für die Fehlerausgabe und die 1 für die normale Ausgabe, die ein Skript (z.B. durch ein echo "Hallo") machen könnte.

    Dann müsste also zur reinen Fehlerumleitung in eine Datei der Aufruf am Ende der Zeile in crontab >/verz/dateiname 2 lauten?

    Btw. Setz mal DISPLAY=:1 in den Cronjob vor das Skript und das sleep in das Skript.

    Das habe ich gemacht und neu gestartet. Leider ohne Änderung. Die Ausgabe geht weiterhin nach chronometer.err

    Die erste Zeile 'unknown': I need something more specific ist allerdings nicht mehr vorhanden.

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

  • Nein, dann so

    /home/pi/chronometer 2> /home/pi/chronometer.err;)

    So ganz langsam wird mir die Arbeitsweise etwas klarer.

    Ich hab das gleich eingebaut und nun erfolgt nicht mehr die komplette Ausgabe in die Fehlerprotokolldaeit, dafür erscheint jetzt die Zeile

    'unknown': I need something more specific. im log. DISPLAY=:1 steht weiterhin in der Crontab, die Sleep-Anweisung im Script.

    Eine Ausgabe auf dem LCD erfolgt weiterhin nicht. ;(

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

    • Offizieller Beitrag

    Lokal (händisch) aufgerufen funktioniert es.

    Füge der Crontab mal über dem ersten Cronjob die Zeile SHELL=/bin/bash ein und verwende im Skript mal den Shebang #!/bin/bash statt #!/bin/sh!

    Mir gehen ehrlich gesagt so langsam die Ideen aus, zumindest was die Crontab betrifft. :conf:

  • Entschuldige, dass meine Antwort erst so spät kommt. Muss nur gelegentlich auch den alltäglichen Dingen außerhalb des Hobby nachgehen.

    Füge der Crontab mal über dem ersten Cronjob die Zeile SHELL=/bin/bash ein und verwende im Skript mal den Shebang #!/bin/bash statt #!/bin/sh!

    Das mit /bin/bash als Shell in der Crontab und im Script hab ich umgesetzt. Die Auswirkung war gleich Null. Deshalb hab ich beides erstmal wieder zurück auf /bin/sh geschrieben.

    Mir ist aufgefallen dass der @reboot Eintrag wohl immer und immer wieder ausgeführt wird. Ich ging bislang davon aus, das der nur einmal beim starten ausgeführt wird?

    Drauf gekommen bin ich, weil die chronometer.err Datei so ca alle 10 Sekunden eine weitere Zeile 'unknown': I need something more specific. dazubekommt.

    Mir gehen ehrlich gesagt so langsam die Ideen aus, zumindest was die Crontab betrifft.

    Ich bekomme hier auch langsam eine Krise. Es kann doch nicht so scheinbar unmöglich sein, auf einem System ein Script mit Displayausgabe automatisch zu starten. Oder kommt das so selten vor?

    Ich hatte kurzfristig auch schon den Gedanken, ob es vllt sinnvoll ist, einen extra Benutzer anzulegen, der sich automatisch einloggt und dessen Shell das chronometer-script ist. Wäre das evtl eine Option?

    Lg

    Günther

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

  • Hast Du denn mal den export der Displayvariable probiert?

    Das habe ich gerade eben erst aufgegriffen und so in dem chronometer-script ausprobiert:

    Code
    /usr/bin/sleep 30
    export DISPLAY=:1 && /usr/local/bin/pihole -c
    #

    Auswirkungen hat es aber nicht gehabt, denn ein echo $DISPLAY (direkt an der Konsole vom RPI) liefert nur eine leere Ausgabe zurück. Hab ich's an der falschen Stelle eingebaut? Oder falsch notiert?

    Lg

    Günther

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

    • Offizieller Beitrag

    Ich hatte kurzfristig auch schon den Gedanken, ob es vllt sinnvoll ist, einen extra Benutzer anzulegen, der sich automatisch einloggt und dessen Shell das chronometer-script ist. Wäre das evtl eine Option?

    Du wirst lachen, aber das schrieb ich schon imBeitrag #15. Den hatte ich aber gelöscht, weil Du schon im Beitrag vorher... während ich noch schrieb. :D

    Habe den jetzt mal wiederhergestellt.

    • Offizieller Beitrag

    Auf die schnelle... Der User heißt hier brot. Mir fallen keine besseren Namen ein und udo war zu nahe an sudo. :shy:

    User erstellen mit: sudo adduser brot

    brot der Gruppe sudo hinzufügen:sudo usermod -aG sudo brot

    Wechseln zu brot: sudo su brot

    Als brot 'automatisch ins CLI booten' einstellen: sudo raspi-config

    wieder zu pi werden: exit

    brot aus der Gruppe sudo werfen: sudo deluser brot sudo

  • Auf die schnelle...

    Was soll ich sagen... It works! ... Naja fast zumindest.

    Fast deshalb, weil pihole -c aus ./bashrc aufgerufen, nach dem root passwort fragt. Das macht der User pi nicht, wenn ich als pi@ pihole -c aufrufe.

    Krieg ich dem neuen User - hier: pi2 - das auch noch beigbracht?

    Lg

    Günther

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

  • Hast Du die .bashrc als pi2 oder als pi bearbeitet?

    Als pi2 bearbeitet. Die Datei gehört doch auch pi2, so war mein Gedankengang)

    Die Ausgabe ergibt:

    258200 4 -rw-r--r-- 1 pi2 pi2 3536 Apr 1 15:16 /home/pi2/.bashrc

    User pi2 ist in der primären Gruppe pi2, sonst in keiner weiteren.

    Die ./bashrc ist original, bis auf die letzte Zeile:

    Lg

    Günther

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

    • Offizieller Beitrag

    Pfff! :conf: Schwer zu sagen an welcher Gruppe es hängt. Ich würde pauschal mal auf adm tippen.

    sudo usermod -aG adm pi2

    Dann kämen noch ein paar andere in Frage, in denen pi ist.

    Code
    :~ $ groups
    pi adm dialout cdrom sudo audio video plugdev games users input netdev lpadmin gpio i2c spi

    Die Gruppe sudo würde ich vermeiden und pi natürlich auch.


    //Edit

    Hier eine Übersicht: https://wiki.debian.org/SystemGroups

  • Schwer zu sagen an welcher Gruppe es hängt.

    Ich hab die genannten alle einzeln duchprobiert. Wollte natürlich sowenig wie möglich Rechte dem User pi2 zugestehen. Deshalb einzeln, was natürlich etwas gedauert hat.

    Gebracht hat es am Ende nichts, denn es wird nach wie vor nach dem root passwort gefragt.

    Hab ich mich zwischendurch eigentlich für Deine Engelsgedund schon einmal bedankt? Nun, an dieser Stelle tu ich es hiermit. Ich find's echt toll, wie Du Dich da reinkniest.

    Lg

    Günther

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

  • Ergänzung.

    Ich hab mal aus pihole den Abschnitt herausgesucht, wo vermutlich die sudo Abbrüfung erfolgt. Vielleicht hilft das weiter

    Code
    # Must be root to use this tool
    if [[ ! $EUID -eq 0 ]];then
      if [[ -x "$(command -v sudo)" ]]; then
        exec sudo bash "$0" "$@"
        exit $?
      else
        echo -e "  ${CROSS} sudo is needed to run pihole commands.  Please run this script as root or install sudo."
        exit 1
      fi
    fi

    1. Raspberry Pi 4B / 4GB / Orig.Netzteil. (Linux 11 / Linux 6.1.21-v8+ auf aarch64)
    2. Raspberry Pi 3B+ 1GB / Orig.Netzteil. (Linux 11 / 6.1.21-v7+ auf armv7l)

    • Offizieller Beitrag

    Kann es denn nicht mal einfach sein! :shy::lol:

    Ok, dann setz den User pi2 wieder in die Gruppe sudo und in ändere in der /home/pi2/.bashrc die Zeile in sudo pihole -c. Bzw. lass den Eintrag in der .bashrc erstmal so. Vielleicht reicht das schon

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!