Was sagt denn das syslog zum Shutdown? Steht da irgendwas, warum der abbricht?
Lars
Was sagt denn das syslog zum Shutdown? Steht da irgendwas, warum der abbricht?
Lars
Hallo Lars,
das ist ja das selttsame. Die letzte Meldung im Log zum Shutdown lautet
Dannach erscheint dort nichts mehr zum Thema und der VDR versucht weiterhin, natürlich ohne Erfolg, ale fünf Minuten herunterzufahren.
Der Inhalt meiner S.90-custom sieht so aus
Gruß
Joachim
Beim Booten oder beim Aufwachen aus dem S3? Hast du das "task" auch drin?
"task" ist immer dann nötig, wenn der Upstart-Job keinen Daemon, sondern ein "endlich laufendes" Programm startet (darf auch mehrere Minuten dauern).
# CEC
#
# Fernseher und Verstärker über CEC anschalten
#
description "vdr-cec: TV on"
start on started vdr
task
script
`/usr/bin/vdr-dbus-send /Shutdown shutdown.ManualStart`| grep true
if [ $? = 1 ]; then
echo 'on 0' | /usr/bin/cec-client -s
sleep 500
echo 'as' | /usr/bin/cec-client -s
fi
end script
Alles anzeigen
Das "env enabled=1" scheint auch überflüssig, da es in deinem Job nicht ausgewertet wird. Wird wohl ein Überbleibsel von wayne's Script sein?
Wird der vdr denn beim Aufwachen neu gestartet? Das syslog von so einem Vorgang wäre hilfreich.
Lars.
Ist nur ne Vermutung von mir, aber könnte es sein das es funktioniert wenn du den Pfad mit angibst?
MegaX
Danke für die vielen Antworten. Leider hilft es alles nix.
mini73:
Leider hilft auch task und end scriptnix. So wird der Fernseher weder beim Resume noch beim regulären Booten eingeschaltet.
Auch beim resume wird der VDR gestartet:
MegaX:
Ne, der Pfad hilft hier nichts. Der Aufruf wird ja auch ausgeführt und der Fernseher abgeschaltet. Das Problem ist ja, dass der Suspend/Shutdown danach nicht weiterläuft.
Ich hab' auch mal (nur zur Sicherheit) einfach nur "sleep 10" in dei S90.custom geschrieben und alles andere auskommentiert. Das funktioniert (soll heissen, der suspend/shutdown läuft weiter).
Das heisst, es liegt eindeutig an cec-client.
Gruß
Joachim
OK. Wer testet kann auch was erfahren. Der Upstart-Job wird ausgeführt (andere Befehle funktionieren), nur der cec-client Aufruf funktioniert nicht. Wahrscheiclich wird er vom falschen User ausgeführt.Warum der allerdings schon in der laten Form des Upsatrt-Skripts funktioniert hat (und ich habe Zeugen :D) kann ich echt nicht sagen.
OK. Wer testet kann auch was erfahren. Der Upstart-Job wird ausgeführt (andere Befehle funktionieren), nur der cec-client Aufruf funktioniert nicht. Wahrscheiclich wird er vom falschen User ausgeführt.Warum der allerdings schon in der laten Form des Upsatrt-Skripts funktioniert hat (und ich habe Zeugen :D) kann ich echt nicht sagen.
Wenn der CEC-Adapter erst später aktiv wird, dann kann der Skript sehr wohl funktionieren, aber ins Leere gehen.
Gerald
Moin,
Wie wird denn der Adapter aktiviert? Gibt es ein udev Event dafür? Dann muss man das in die Upstart-Bedingung mit einbauen. Wie man da udev Events abfragt, weiß ich aber gerade nicht. Bei Upstart 1.8 gibt es da glaube ich eine bridge, aber ob die bei 1.6 (precise Standard) auch aktiv ist, weiß ich nicht. Hab auch gerade nicht viel Zeit, das zu suchen.
Lars.
Moin!
Hier der Abschnitt über udev im Upstart Cookbook:
http://upstart.ubuntu.com/cookbook/#upstart-udev-bridge
Auf meinem Testsystem hab ich Upstart 1.8, da hab ich auch die upstart-udev-bridge. Ob die bei dir auch läuft, siehst du daran, ob es einen entsprechenden Upstart-Job gibt:
Interessant wäre wahrscheinlich sowas wie usb-device-added bzw. usb-device-changed. Aber wie da auch zu lesen ist, muss der Adapter zum Zeitpunkt dieses Events noch nicht vollständig verfügbar sein. Aber das lässt sich dann vielleicht mit einem sleep im Script lösen.
Poste doch mal die Ausgabe von
udevadm info --name=/dev/pfad/zum/cec-adapter --query=all
udevadm info --name=/dev/pfad/zum/cec-adapter --query=all --attribute-walk
damit ich sehe, was für Attribute das Ding hat. Am interessantesten sind wahrscheinlich vendor, serial usw.
Dann ließe sich der Upstart-Job erweitern um:
Ob das changed-Event aber auch während des Betriebs irgendwann auftritt, weiß ich nicht, dann würde der Task noch mal gestartet werden. Aber das ist vermutlich nicht weiter wild, denn entweder ist der TV dann schon an oder er wird gar nicht erst angeschaltet.
Lars.
Hallo mini73,
Aber bitteschön:
Die upstart-udev-bridge guibt es im stable yaVDR auch.
udevadm info --name=/dev/ttyACM0--query=all
P: /devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/tty/ttyACM0
N: ttyACM0
S: serial/by-id/usb-2548_1001-if00
S: serial/by-path/pci-0000:00:1d.1-usb-0:1:1.0
E: DEVLINKS=/dev/serial/by-id/usb-2548_1001-if00 /dev/serial/by-path/pci-0000:00:1d.1-usb-0:1:1.0
E: DEVNAME=/dev/ttyACM0
E: DEVPATH=/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/tty/ttyACM0
E: ID_BUS=usb
E: ID_MODEL=1001
E: ID_MODEL_ENC=1001
E: ID_MODEL_ID=1001
E: ID_PATH=pci-0000:00:1d.1-usb-0:1:1.0
E: ID_PATH_TAG=pci-0000_00_1d_1-usb-0_1_1_0
E: ID_REVISION=1000
E: ID_SERIAL=2548_1001
E: ID_TYPE=generic
E: ID_USB_DRIVER=cdc_acm
E: ID_USB_INTERFACES=:020201:0a0000:
E: ID_USB_INTERFACE_NUM=00
E: ID_VENDOR=2548
E: ID_VENDOR_ENC=2548
E: ID_VENDOR_ID=2548
E: MAJOR=166
E: MINOR=0
E: SUBSYSTEM=tty
E: UDEV_LOG=3
E: USEC_INITIALIZED=9540036
Alles anzeigen
und
udevadm info --name=/dev/ttyACM0--query=all --attribute-walk
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/tty/ttyACM0':
KERNEL=="ttyACM0"
SUBSYSTEM=="tty"
DRIVER==""
looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0':
KERNELS=="3-1:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="cdc_acm"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bNumEndpoints}=="01"
ATTRS{bInterfaceClass}=="02"
ATTRS{bInterfaceSubClass}=="02"
ATTRS{bInterfaceProtocol}=="01"
ATTRS{supports_autosuspend}=="1"
ATTRS{bmCapabilities}=="6"
looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb3/3-1':
KERNELS=="3-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 2"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="80"
ATTRS{bMaxPower}==" 10mA"
ATTRS{urbnum}=="29"
ATTRS{idVendor}=="2548"
ATTRS{idProduct}=="1001"
ATTRS{bcdDevice}=="1000"
ATTRS{bDeviceClass}=="02"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="32"
ATTRS{speed}=="12"
ATTRS{busnum}=="3"
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{version}==" 2.00"
ATTRS{maxchild}=="0"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
looking at parent device '/devices/pci0000:00/0000:00:1d.1/usb3':
KERNELS=="usb3"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{configuration}==""
ATTRS{bNumInterfaces}==" 1"
ATTRS{bConfigurationValue}=="1"
ATTRS{bmAttributes}=="e0"
ATTRS{bMaxPower}==" 0mA"
ATTRS{urbnum}=="82"
ATTRS{idVendor}=="1d6b"
ATTRS{idProduct}=="0001"
ATTRS{bcdDevice}=="0302"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bNumConfigurations}=="1"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{speed}=="12"
ATTRS{busnum}=="3"
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{version}==" 1.10"
ATTRS{maxchild}=="2"
ATTRS{quirks}=="0x0"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{authorized}=="1"
ATTRS{manufacturer}=="Linux 3.2.0-48-generic uhci_hcd"
ATTRS{product}=="UHCI Host Controller"
ATTRS{serial}=="0000:00:1d.1"
ATTRS{authorized_default}=="1"
looking at parent device '/devices/pci0000:00/0000:00:1d.1':
KERNELS=="0000:00:1d.1"
SUBSYSTEMS=="pci"
DRIVERS=="uhci_hcd"
ATTRS{vendor}=="0x8086"
ATTRS{device}=="0x27c9"
ATTRS{subsystem_vendor}=="0x1849"
ATTRS{subsystem_device}=="0x27c9"
ATTRS{class}=="0x0c0300"
ATTRS{irq}=="19"
ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003"
ATTRS{local_cpulist}=="0-1"
ATTRS{numa_node}=="-1"
ATTRS{dma_mask_bits}=="32"
ATTRS{consistent_dma_mask_bits}=="32"
ATTRS{enable}=="1"
ATTRS{broken_parity_status}=="0"
ATTRS{msi_bus}==""
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
Alles anzeigen
Ich versuch mal was damit zu basteln.
Gruß
Joachim
Moin!
Ich würde wahrscheinlich einfache Upstart-Jobs erstellen, die nur einen Eintrag im syslog machen, z.B.:
task
start on started vdr and usb-device-added ID_VENDOR_ID=2548 ID_MODEL_ID=1001
script
/usr/bin/env | /usr/bin/logger -t usb-device-added
end script
und dann noch einen für usb-device-changed, um zu sehen, welche von denen in welcher Reihenfolge gefeuert werden.
Wahrscheinlich wird's das added-Event mit ID-Einträgen gar nicht geben, sondern nur das changed-Event. Könnte sein, dass die ID-Felder bei added noch gar nicht existieren und deshalb der Filter nicht funktioniert.
Sonst einfach nur "start on started vdr and usb-device-added", dann bekommt man aber für alle angeschlossenen USB-Geräte einen Eintrag.
Lars.
OK. Weiteres rumprobieren hat folgendes erbracht:
Der Startzeitpunkt des Upstartjob ist (noch) nicht das Problem. Wenn ich start on started vdr angebe startet der Upstartjob ja auch bei sudo restart vdr.Das der Job startet habe ich überprüft. Selbst bei laufendem System mit gerade erfolgreich manuell getestetem cec-client wird aber der der Befehl nicht ausgeführt. Ich habe dann den ganzen Block um den dbus2vdr und cec-client in ein Script in /usr/bin ausgelagert und dieses vom Upstartjob afrufen lasen. Zur Kontrolle habe ich im Upstart-Job und dem Script jeweils einen Touch-Befehl mitgegeben um zu testen ob sie wirklich aufgerufen werden und Befehle ausgeführt werden. Resultat wieder: Upstart-Job läuft, touch wird ausgeführt, aber das Skript nicht gestartet (und auch der touch-Befehl darin natürlich nicht).
Wieder zurück zur Upstart-Anleitung. Irgendwas stimmt da gar nicht.
Bei einem "restart vdr" werden aber nicht die udev-Events ausgelöst. Die müssten aber kommen, wenn du bei laufendem vdr das Ding aus- und wieder einstöpselst.
Ansonsten sind auch logger-Aufrufe hilfreich, ist quasi printf-Debugging. Ausgaben mit "echo" findest du sonst auch unter /var/log/upstart/<jobname>.log. Syslog finde ich persönlich aber praktischer.
Lars.
Das "task" hast du aber schon drin, oder? Das ist wichtig (meiner Meinung nach).
http://upstart.ubuntu.com/cookbook/#task
Aber ich stimme dir zu, Upstart ist nicht einfach zu erlernen... Ich bin da auch weit weg von "Guru", ich rate mit dir mit.
Lars.
Funktioniert das bei dir?
task
start on started vdr
script
python - <<END
import dbus
from subprocess import call
bus = dbus.SystemBus()
Shutdown = bus.get_object('de.tvdr.vdr', '/Shutdown')
manual = Shutdown.ManualStart(dbus_interface = 'de.tvdr.vdr.shutdown')
if manual:
call("echo 'on 0' | /usr/bin/cec-client -s", shell=True)
END
end script
Alles anzeigen
Lars.
Hallo Lars,
Bei einem "restart vdr" werden aber nicht die udev-Events ausgelöst. Die müssten aber kommen, wenn du bei laufendem vdr das Ding aus- und wieder einstöpselst.
In meiner Testversion stand ja nur noch start on started vdr und die Funktion des cec-client abe ich zuvor "per Hand" getstet.
Das "task" hast du aber schon drin, oder? Das ist wichtig (meiner Meinung nach).
Ja, hatte ich drin.
Funktioniert das bei dir?
PythonAlles anzeigentask start on started vdr script python - <<END import dbus from subprocess import call bus = dbus.SystemBus() Shutdown = bus.get_object('de.tvdr.vdr', '/Shutdown') manual = Shutdown.ManualStart(dbus_interface = 'de.tvdr.vdr.shutdown') if manual: call("echo 'on 0' | /usr/bin/cec-client -s", shell=True) END end script
So. Jetzt ist es passiert! Jetzt hast Du es getan!! Jetzt musst Du mir erklären, warum ein Python-Script da funktioniert und ein BASH-Script das das selbe macht nicht.
Dein Script funktioniert bisher in allen Lebenslagen (Restart vdr, reboot, resume). Ob die dbus-Abfrage immer richtig funktioniert (Wenn Start per Timer) muß ich noch ausprobieren.
Vielen, vielen Dank für Deine Hilfe!
Ich markiere den Thread jetzt erst mal als "gelöst" und mache wegen des Problems mit der S.90-custom vileicht einen neuen auf.
Gruß
Joachim
Moin,
Schön, dass es funktioniert. Ich hab aber keine Ahnung, warum ein Shellscript nicht geht.
Aber die dbus2vdr-Abfragen sind sowieso viel schöner in Python...
Vielleicht komme ich heute Abend auch noch mal dazu, eine Shell-Variante auszuprobieren, keine Ahnung, ob mir da eine passende Erklärung einfällt.
Lars.
Hallo,
funktioniert wirklich super. Was muss man denn da noch eintragen, damit
beim Shutdown der TV auch wieder automatisch ausgeschaltet wird?
Danke
Dirk
Hi..
na am besten in:
root@yavdr1:/usr/share/vdr/shutdown-hooks# cat /etc/vdr/shutdown-hooks/S90.custom
#
# Custom VDR Shutdown Hook
# -------------------------
#
# Here you can place any commands, you want to be executed when VDR wants
# to shutdown.
#
# * To abort the shutdown, exit with an errorlevel <> 0.
#
# * If you want a message to be displayed on the OSD when aborting a shutdown,
# then write to stdout:
#
# ABORT_MESSAGE=<message to display>
#
# * If you want to defer the shutdown, write to stdout:
#
# TRY_AGAIN=<minutes to wait before next shutdown request>
#
# * To overwrite the command that will be executed to shutdown the machine
# after all shutdown hooks have been processed, write to stdout:
#
# SHUTDOWNCMD=<new shutdown command>
#
# i.e.:
#
# echo "ABORT_MESSAGE=\"I do not want to shutdown now!\"" ; exit 1
#
TV_power_off
root@yavdr1:/usr/share/vdr/shutdown-hooks#
Alles anzeigen
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!