[1] MLD-5.x / Development / Initskripte - Reihenfolge festlegen?
 

Offline cle

  • Newbie
  • *
  • Posts: 40
    • View Profile
Initskripte - Reihenfolge festlegen?
« on: January 15, 2017, 16:57:25 »
Hi,

ich kämpfe gerade ein wenig damit, ein Skript an der richtigen Stelle starten zu lassen. Grund ist, dass man die Helligkeit des Pearl-Display's beim Ausschalten mit dem showpic Befehl auf 0 setzen sollte, falls man keine hellgraue Notbeleuchtung benötigt.
Zumindest bei mir hat auch das Anzeigen von Timern nicht funktioniert, weil das graphlcd-Skript zwar nach 'vdr' gestartet wird, zu diesem Zeitpunkt vdr aber noch nicht vollständig gestoppt ist und dann das graphlcd-Plugin die Anzeige wieder überschreibt.
Das funktioniert mit den Skripten unten im Prinzip nun ordentlich. Wenn die Timer aber nicht angezeigt werden sollen, bekomme ich wieder Probleme mit 'graphlcd-base',  das beim Runterfahren ja auch irgendwelche Grafiken auf das Display zeichnet.
Die Fragen also:
after und before im init-Abschnitt sind ja noch ganz verständlich, wobei after beim Stoppen before zu sein schein ;)
Unter priority kann ich mir auch noch was vorstellen (gibt's nur 0, 5 und 9?)
Wie aber kann ich feststellen, ob ein Skript bereits abgearbeitet ist oder noch läuft. Evtl. haben die 'wait'-Ordner was damit zu tun?
Ich hoffe, jemand kann mir da helfen.

Gruß
Alex


pearl:
Code: [Select]
#!/bin/sh

. /etc/init.d/rc.functions

NAME=${0##*/}
TIMERFILE=/etc/vdr/timers.conf

case "$1" in
        start)
;;
stop)
if ( [ "$GRAPHLCD_TYP" == "ax206dpf" ] ) && ( [ "$GRAPHLCD_SHOW_TIMERS" != "1" ] || [ ! -s "$TIMERFILE" ] ); then
echo "Blanking Pearl Display"
#
/usr/bin/showpic -d ax206dpf -b 0 dummypic &>/dev/null
#
fi
;;
init)
stop=1      # enable stop section
priority=9
before=graphlcd-base   # init scripts that should be started after this
;;
*)
echo "Usage: $0 {start | stop}" >&2
exit 1
esac
 

graphlcd:
Code: [Select]
#!/bin/sh
. /etc/init.d/rc.functions
TEXTDOMAIN="vdr-plugin-graphlcd-graphlcd"

case "$1" in
start)
;;
stop)
if [ "$GRAPHLCD_SHOW_TIMERS" == "1" ]; then
echo "Show timers on graphlcd"
if [ -e "/usr/bin/perl" ]; then
graphlcd-showtimer
else
. /etc/rc.shutdown
showtext -c /etc/graphlcd.conf -i ${GRAPHLCD_TYP:+-d $GRAPHLCD_TYP} -e iso8859-0 -f fnt:/etc/vdr/plugins/graphlcd/fonts/f12bn.fnt "Next Timer:" "$(test "$utctime" \> "0" && date '+%a %m. %b %Y  %H:%M' @$utctime || echo $(gt 'none'))" "$filename"
fi
fi
;;
init)
stop=1
before=xorg
after=pearl
priority=9
;;
*)
echo "Usage $0 {start | stop}" >&2
exit 1
esac

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20160
    • View Profile
    • ClausMuus.de
Initskripte - Reihenfolge festlegen?
« Reply #1 on: January 15, 2017, 23:31:54 »
Hi,

dafür gibt es die before und after regeln. Die priority (0-9 möglich) wird nur genutzt, um besonders frühe oder späte Aktionen auszuführen. Wird keine Priority angegeben, ist die Voreinstellung 0.
z.B. sorft after=vdr dafür, dass der Start des script erst dann ausgeführt wird, wenn das vdr init Script abgearbeitet ist, also nachdem der VDR läuft. Gleiches gilt in umgekehrter Reihenfolge für das herunterfahren. Also nicht nur die priority wird beim herunterfahren umgekehrt, sondern auch before und after.

Claus
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 5.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 12TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline cle

  • Newbie
  • *
  • Posts: 40
    • View Profile
Initskripte - Reihenfolge festlegen?
« Reply #2 on: January 16, 2017, 18:13:30 »
Hi,

Danke für die Antwort.
So jetzt habe ich mir die ursprünglichen Dateien wieder in's Verzeichnis kopiert und nochmal von vorne angefangen.

Zunächst mal mit ausgewähltem 'show next timers':

- mit den Originaldateien werden - wie schon geschrieben -  keine Timer auf dem Display angezeigt, weil der vdr erst nach dem Ausführen des graphlcd-Skriptes gestoppt wird.
Code: [Select]
System going down now.
Activating WOL
Show timers on graphlcd:
Stopping VDR

- das 'before' und 'after' habe ich mir nochmal angeschaut, da waren meine Ganglien scheinbar etwas verknotet. Mit 'before=vdr' wird graphlcd zum richtigen Zeitpunkt ausgeführt und die Timer werden auf dem Display angezeigt.
- mit den entsprechenden Einträgen wird auch mein eigenes Skript richtig gestartet und schaltet den Schirm auf schwarz, sobald kein Timer anliegt

Soweit so gut. Haarig wird's aber, wenn 'show next timers' abgewählt wird.
Dann wird mit der Option before="graphlcd graphlcd-base" mein Skript zwar nach graphlcd-base gestartet, aber nicht auf dessen Beendigung gewartet,

Code: [Select]
System going down now.
Stopping graphlcd-base
Activating WOL
Stopping VDR
Store sound settings:
Blanking Pearl Display (before=graphlcd graphlcd-base)
  Waiting for xorg
Stopping xorg

im syslog sieht das dann so aus ('dummypic' stammt von meinem Skript):

Code: [Select]
Jan 16 17:06:05 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte02.glcd' loaded.
Jan 16 17:06:06 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:06:06 (MLD) user.warn kernel: [   99.520224] usb 4-5: usbfs: process 3914 (showpic) did not claim interface 0 before use
Jan 16 17:06:06 (MLD) user.warn kernel: [   99.520253] usb 4-5: usbfs: process 3914 (showpic) did not claim interface 0 before use
Jan 16 17:06:06 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte05.glcd' loaded.
Jan 16 17:06:07 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:06:07 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte05.glcd' loaded.
Jan 16 17:06:07 (MLD) user.warn kernel: [  100.699145] usb 4-5: usbfs: process 4016 (showpic) did not claim interface 0 before use
Jan 16 17:06:07 (MLD) user.warn kernel: [  100.699175] usb 4-5: usbfs: process 4016 (showpic) did not claim interface 0 before use
Jan 16 17:06:08 (MLD) user.err vdr: video/vdpau: can't destroy output surface: An invalid handle value was provided.
Jan 16 17:06:08 (MLD) user.info kernel: [  101.573388] vdr[1198]: segfault at 7fe17542de30 ip 00007fe17542de30 sp 00007fe172e4c678 error 14 in libnsl-2.19.so[7fe1765d2000+15000]
Jan 16 17:06:09 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:06:09 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte05.glcd' loaded.
Jan 16 17:06:10 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:06:10 (MLD) user.err showpic: glcdgraphics: Couldn't load 'dummypic': showpic: UnableToOpenBlob `dummypic': No such file or directory @ error/blob.c/OpenBlob/2709 (cExtFormatFile::LoadScaled)
Jan 16 17:06:11 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:06:11 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte08.glcd' loaded.
Jan 16 17:06:13 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:06:13 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte09.glcd' loaded.
Jan 16 17:06:15 (MLD) syslog.info syslogd exiting

Wenn ich zusätzlich priority=9 eintrage, dann wird mein Skript scheinbar zum Schluss ausgeführt, tatsächlich bleibt auf dem Schirm aber eines der Bootstep-Bilder stehen. Im Syslog ist dazu nichts Auffälliges zu finden, allerdings fehlt hier der Eintrag des letzten Bildes starte09.lcd.

Code: [Select]
Jan 16 17:18:58 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:18:58 (MLD) user.debug showpic: glcdgraphics: image '/etc/graphlcd/240x128/starte08.glcd' loaded.
Jan 16 17:19:00 (MLD) user.info showpic: ax206dpf: AX206DPF initialized (320x240).
Jan 16 17:19:00 (MLD) user.err showpic: glcdgraphics: Couldn't load 'dummypic': showpic: UnableToOpenBlob `dummypic': No such file or directory @ error/blob.c/OpenBlob/2709 (cExtFormatFile::LoadScaled)
Jan 16 17:19:00 (MLD) syslog.info syslogd exiting

Noch eine Idee?
Eine Möglichkeit wäre natürlich die entsprechende Zeilen in graphlcd-base zu übernehmen.

Es wär auch schön, wenn es eine zusätzliche Option geben würde, ob die Bootsteps auf dem Display angezeigt werden. Ich habe nichts gegen Pinguine im Allgemeinen, aber auf dem Pearl sieht die Grafik nicht wirklich prickelnd aus (siehe Anhang) und durch den langsamen Bildwechsel ist der Ausschaltvorgang auch nicht unbedingt vorzeigbar.

Gruß
Alex

Hier noch die beiden Dateien

graphlcd
Code: [Select]
#!/bin/sh
. /etc/init.d/rc.functions
TEXTDOMAIN="vdr-plugin-graphlcd-graphlcd"

case "$1" in
start)
;;
stop)
if [ "$GRAPHLCD_SHOW_TIMERS" = "1" ]; then
echo "Show timers on graphlcd (before=vdr)"
if [ -e "/usr/bin/perl" ]; then
graphlcd-showtimer
else
. /etc/rc.shutdown
showtext -c /etc/graphlcd.conf -i ${GRAPHLCD_TYP:+-d $GRAPHLCD_TYP} -e iso8859-0 -f fnt:/etc/vdr/plugins/graphlcd/fonts/f12bn.fnt "Next Timer:" "$(test "$utctime" \> "0" && date '+%a %m. %b %Y  %H:%M' @$utctime || echo $(gt 'none'))" "$filename"
fi
fi
;;
init)
stop=1
before=vdr
;;
*)
echo "Usage $0 {start | stop}" >&2
exit 1
esac

pearl
Code: [Select]
#!/bin/sh

. /etc/init.d/rc.functions

NAME=${0##*/}
TIMERFILE=/etc/vdr/timers.conf

case "$1" in
        start)
;;
stop)
if ( [ "$GRAPHLCD_TYP" == "ax206dpf" ] ) && ( [ "$GRAPHLCD_SHOW_TIMERS" != "1" ] || [ ! -s "$TIMERFILE" ] ); then
echo "Blanking Pearl Display"
#
/usr/bin/showpic -d ax206dpf -b 0 dummypic &>/dev/null
#
fi
;;
init)
stop=1 
before="graphlcd graphlcd-base"
priority=9
;;
*)
echo "Usage: $0 {start | stop}" >&2
exit 1
esac

Offline Christian

  • MLD-Developer
  • Expert Member
  • ******
  • Posts: 1531
    • View Profile
    • http://www.minidvblinux.de
Initskripte - Reihenfolge festlegen?
« Reply #3 on: January 16, 2017, 19:07:06 »
Sieht bei mir genau so aus und ich habe die glcd Dateien durch hübsche png Dateien getauscht :) ...

Man sollte beim perl addon das Script erweitern und die Dateien ersetzen.

Ein todo für den bugtracker
__________________________________________

"...ich schreibe 80% meiner Beiträge aus dem Kopf ... bitte nicht schlagen wenn mal ein Path nicht passt :) ..."

MFG Christian

Nokia Sat DBox2 + Multicam

Hardware VDR: ASUS E35M1-I Deluxe, 4GB RAM, ATI 6XXX onboard, TT S2-6400 FF, Samsung 500GB 2,5"


Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20160
    • View Profile
    • ClausMuus.de
Initskripte - Reihenfolge festlegen?
« Reply #4 on: January 16, 2017, 21:57:26 »
Im graphlcd-base wird das Animations-Script im Hintergrund gestartet. Das läuft so lange, bis das System ganz herunter gefahren ist.

Bleibt das Display aus auch wenn nach dem Abschalten noch ein weiteres Animations-Bild angezeigt wird, oder springt das dann wieder an?

Würde es reichen bessere Bilder mit dem aktuellen MLD Logo zu haben? Oder willst Du die Power-off Animation auf jeden Fall abschaltbar haben?

@Christian,
Hast Du die Bilder mit MLD Logo? kannst Du die in's Paket packen? Die aktuellen sind ja schon seit Jahren veraltet.
Ich könnte auch ein kleines Script schreiben, das welche für alle Auflösungen auf Basis unseres Logos erstellt. Sowas ist ja recht einfach.

Claus
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 5.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 12TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline cle

  • Newbie
  • *
  • Posts: 40
    • View Profile
Initskripte - Reihenfolge festlegen?
« Reply #5 on: January 17, 2017, 11:53:46 »
Quote
Im graphlcd-base wird das Animations-Script im Hintergrund gestartet. Das läuft so lange, bis das System ganz herunter gefahren ist.

Naja, deswegen fragte ich ja  ;)  (aber mit meinem Vorschlag unten könnte sich das erledigt haben)

Quote
Bleibt das Display aus auch wenn nach dem Abschalten noch ein weiteres Animations-Bild angezeigt wird, oder springt das dann wieder an?


Gut das hätte ich wahrscheinlich erklären müssen. Das Pearl-Display kann man in dem Sinne nicht ausschalten. Solange Saft auf der USB-Buchse ist - und bei meiner Kiste ist das auch im ausgeschalteten Zustand so - wird das zuletzt geladene Bild angezeigt. "Ausschalten" lässt sich das Ding nur dadurch, dass du die Helligkeit auf 0 setzt. Deswegen ja der ganze Aufwand.

Quote
Würde es reichen bessere Bilder mit dem aktuellen MLD Logo zu haben? Oder willst Du die Power-off Animation auf jeden Fall abschaltbar haben?

Naja, es sollte ja nicht für mich, sondern für möglichst alle User zufriedenstellend funktionieren.
Mich nervt es halt, wenn im Zimmer so ein hellgraues Rechteck unmotiviert vor sich hinleuchtet. Andere möchten vielleicht stattdessen lieber ein Bild von ihrem Hamster angezeigt bekommen.
Ich habe auch absolut keine Ahnung, wie sich die ganze Angelegenheit auf anderen Displays verhält.

Ich persönlich würde folgenden Vorschlag machen:

- Statt einer Boot-Animation wird lediglich eine statische Boot-Grafik angezeigt. Mal ehrlich, wer legt isch schon mit der Lupe bewaffnet vor ein wenige Quadratzentimeter großes Display und kontrolliert, ob sich da Punkte von links nach rechts bewegen. Auf dem TV macht das schon eher Sinn.
D.h. alles, was mit bootsteps zu tun hat fliegt aus dem graphlcd-base raus, sodass im Endeffekt nur noch die zwei Zeilen übrigbleiben, die die Boot-Grafik (MLD-Logo) anzeigen. Beschleunigt den Bootvorgang wieder ein Stück ;)
Das wird dann als Erstmögliches beim Start bzw. beim Stop direkt nach vdr ausgeführt und zwar, was Starten und Ausschalten aneinander anpasst, egal ob Timer vorhanden sind oder nicht.

- Beim Runterfahren übernimmt dann ein an letztmöglicher Stelle ausgeführtes Skript die Anzeige der Grafik, die auf dem ausgeschalteten PC angezeigt werden soll. Das wäre dann entweder abgedunkeltes Schwarz oder (Luxsvariante) ein ausgewähltes Bild von der Schwiegermutter, oder im Fall von 'show timers' eben den nächsten timer oder - falls keiner vorhanden - dunkles Schwarz oder ein ausgewähles Bild. Wieder die Luxusvariante: Statt den Timer als Text auf das Display zu schreiben, könnte man eine entsprechende Grafik nehmen (Zifferblatt z.B.) und mit convert den Text drüberlegen. 

Wie gesagt, nur ein Vorschlag.

Gruß
Alex

P.S. Ist es eigentlich richtig, dass für das Pearl-Display eine Auflösung von 240x128 gewählt wird, obwohl es der Teiber mit 320x240 initialisiert?   

[1] MLD-5.x / Development / Initskripte - Reihenfolge festlegen?
 



Users Online Users Online

0 Members and 1 Guest are viewing this topic.