VU startet Befehl auf anderer Box?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • VU startet Befehl auf anderer Box?

      Hallo,


      ich möchte mit meiner Vu Solo2 einen Befehl auf einer anderer Box bzw meinem RaspberryPi ausführen.
      Wie stelle ich so etwas an?

      Dieser Befehl soll eigentlich nur mein Ambilight, was von dem RaspberryPi gesteuert wird ab und wieder anschalten gegebenenfalls neustarten.
      Das non Plus Ultra wäre noch eine Status Ausgabe, ob der Ambilight Dienst läuft oder nicht.

      Am "schönsten" wäre ein Ambilight Eintrag im Hauptmenü von der Vu Solo2.

      Hier sind die Befehle, die ich ausführen möchte:

      Ambilight starten

      Quellcode

      1. /etc/init.d/hyperion start


      Ambilight beenden

      Quellcode

      1. killall hyperiond


      Ambilight neustarten

      Quellcode

      1. /etc/init.d/hyperion restart


      Ambilight Status

      Quellcode

      1. service hyperion status



      Gruß
    • Mit ssh:

      Quellcode

      1. ssh user@HOST 'command'


      Um das auch ohne Passwortabfrage zu erledigen, musst du den authorized_key des Clients auf dem Ziel-Host ablegen, in /~/.ssh/authorized_keys
      Das wurde hier schon x-mal beschrieben, einfach mal suchen.
    • Hallo,


      ich mache das so mit der Fernbedienung.

      Die Befehle kann ich auch mit Putty ausführen, nur muss ich das Passwort vom Pi eingeben.
      Nach deiner Antwort wollte ich den Key vom Pi auf meiner Solo2 in den von dir angegebenen Ort hinterlegen aber leider ist der auf der Solo2 nicht vorhanden.
    • Nein, genau anders rum.

      Das hast du oben auch geschrieben. Du wolltest den Key vom PI in der Solo eingeben.

      Wenn du das anders rum willst, dann entsprechend anders herum. Also von der Solo2 auf den PI.

      Grad keine VU zur Hand, ob default auch ssh-copy-id dabei ist. Könntest du mal testen.
    • Ich meinte den Private_Key, mit den ich mich auf dem Pi anmelden muss.

      Und mein Problem ist, dass ich den Ort auf der Solo2 nicht finde wo dieser hineinkopiert wird, dass diese sich mit dem Private_Key auf dem Pi einloggt.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Straight121 ()

    • Die Anleitung ist für ein "echtes" SSH gedacht; mit dem Dropbear-SSH funktioniert's fast genauso, aber doch etwas anders.

      Wie ich das mache (Zugriff von Solo2 auf Pi):

      Step 0: Auf Solo2 einloggen und folgendes im Home ausführen:
      Step 1: Auf der Solo2 Verzeichnis für Keys anlegen: "mkdir .ssh"
      Step 2: Auf der Solo2 ein Private/Public-Key-Paar erzeugen: "dropbearkey -t rsa -f .ssh/id_rsa -s 1024"
      Step 3: Public-Key-Part kopieren: "dropbearkey -y -f .ssh/id_rsa" - der Public-Key-Part ist die komplette Zeile mit "ssh-rsa" und geht bis zur Email-Adresse (wird evtl. über zwei Zeilen angezeigt).
      Step 4: Diesen Key trägst du auf dem Pi in die Datei ~/.ssh/authorized_keys ein.
      Step 5: Jetzt kannst du dich von der Solo2 auf den Pi ohne Passswort einloggen: "ssh -i /home/root/.ssh/id_rsa pi@raspi" - das -i braucht das Dropbear-SSH. Ist leider so.
      Step 6: Remote-Befehl ausführen: "ssh -i /home/root/.ssh/id_rsa pi@raspi ls"
      Diskutiere nie mit einem Idioten. Er zieht dich auf sein Niveau runter und schlägt dich mit seiner Erfahrung.
    • So habe es nun geschafft alles einzurichten D:

      Wenn ich den Remote-Befehl von der Solo2 auf dem RPi mit SSH ausführe klappt alles einwandfrei.
      Allerdings wenn ich mit dem Menüeintrag diesen Befehl ausfüge, erhalte ich einen E2 spinner und muss E2 neustarten.

      Das ist der Befehl.

      Quellcode

      1. ssh -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop


      So sieht die Plugin.py aus:

      Quellcode

      1. from Plugins.Plugin import PluginDescriptor
      2. import os
      3. Comnd = "ssh -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"
      4. pname = _("Ambilight")
      5. def cmd(menuid, **kwargs):
      6. if menuid == "mainmenu":
      7. return [(pname, runcmd, "other", 1)]
      8. return []
      9. def runcmd(session,**kwargs):
      10. os.system(Comnd)
      11. def Plugins(path,**kwargs):
      12. mm = PluginDescriptor(name=pname, where = PluginDescriptor.WHERE_MENU, fnc = cmd)
      13. list = []
      14. list.append(mm)
      15. return list
      Alles anzeigen


      Was kann ich noch machen?

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Straight121 ()

    • würde meinen, die automatische Anmeldung funktioniert nicht mit "root@192.168.178.40" und ssh bleibt im Hintergrund offen.
      schalte mal den Debug-Modus in VTI 9.0.2 ein und schau nach, was ssh ausgibt.

      Bei mir sieht das so aus.

      Quellcode

      1. 22:29:55.205 [e2-python] action -> OkCancelActions ok
      2. 22:29:55.206 [e2-python] ssh -i /home/root/.ssh/id_rsa root@192.168.178.2 service hyperion stop
      3. Host '192.168.178.2' is not in the trusted hosts file.
      4. (ecdsa-sha2-nistp256 fingerprint md5 24:4a:f7:82:77:57:90:5c:56:48:05:b1:26:0f:94:de)
      5. Do you want to continue connecting? (y/n) 22:29:57.999 [e2-core] main thread is non-idle! display spinner!
      6. 22:29:59.313 [e2-core] [eEPGCache] abort non avail schedule other reading
      7. 22:29:59.316 [e2-core] [eEPGCache] abort non avail viasat reading


      spinner bekommst weg über

      Quellcode

      1. root@vusolo2:/# ps x | grep ssh
      2. 28233 ? S 0:00 ssh -i /home/root/.ssh/id_rsa root@192.168.178.2 service hyperion stop
      3. 28274 pts/0 S+ 0:00 grep ssh
      4. root@vusolo2:/# kill 28233


      --------------------------------------------------------------------------------------------------------------------------

      EDIT:
      Wenn das in der Console angezeigt werden soll, dann so:
      cmd.jpg

      plugin.py

      Quellcode

      1. from Plugins.Plugin import PluginDescriptor
      2. from Screens.Console import Console
      3. import os
      4. Comnd = "ssh -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"
      5. pname = _("Ambilight")
      6. def cmd(menuid, **kwargs):
      7. if menuid == "mainmenu":
      8. return [(pname, runcmd, "other", 1)]
      9. return []
      10. def runcmd(session,**kwargs):
      11. print Comnd
      12. session.open(Console,_("Command..."),[Comnd])
      13. # os.system(Comnd)
      14. def Plugins(path,**kwargs):
      15. mm = PluginDescriptor(name=pname, where = PluginDescriptor.WHERE_MENU, fnc = cmd)
      16. list = []
      17. list.append(mm)
      18. return list
      Alles anzeigen
      Rechtschreibfehler sind beabsichtigt, sie fördern ein genaueres Lesen
      Debug Log aktivieren Putty Telnet Screenshots erstellen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hajeku123 ()

    • Hallo,


      ich erhalte die gleiche Meldung.
      Was ist denn die trusted host file?
      Muss man da eventuell den PC 192.168.178.40 eintragen?

      Finde es nur seltsam, dass der Befehl über Putty/SSH funktioniert.
      Dateien
    • ändere mal

      Comnd = "ssh -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"

      in

      Comnd = "ssh -y -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"
      Rechtschreibfehler sind beabsichtigt, sie fördern ein genaueres Lesen
      Debug Log aktivieren Putty Telnet Screenshots erstellen
    • Ist ja super, es funktioniert :)
      Vielen Dank hajeku D:


      Was genau bedeutet denn das -y?


      Ist es eigentlich möglich ein Menü im Hauptmenu zu erstellen? (Wie zum Beispiel "VTi")
      Ich hatte noch 2 weitere Befehle für mein Hyperion.


      Hier ist der jetzige Code:

      Quellcode

      1. from Plugins.Plugin import PluginDescriptor
      2. import os
      3. Comnd = "ssh -y -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"
      4. pname = _("Ambilight beenden")
      5. def cmd(menuid, **kwargs):
      6. if menuid == "mainmenu":
      7. return [(pname, runcmd, "other", 1)]
      8. return []
      9. def runcmd(session,**kwargs):
      10. os.system(Comnd)
      11. def Plugins(path,**kwargs):
      12. mm = PluginDescriptor(name=pname, where = PluginDescriptor.WHERE_MENU, fnc = cmd)
      13. list = []
      14. list.append(mm)
      15. return list
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Straight121 ()

    • ssh = Hilfe

      Quellcode

      1. root@vusolo2:/# ssh -h
      2. Dropbear SSH client v2014.66 https://matt.ucc.asn.au/dropbear/dropbear.html
      3. Usage: ssh [options] [user@]host[/port][,[user@]host/port],...] [command]
      4. -p <remoteport>
      5. -l <username>
      6. -t Allocate a pty
      7. -T Don't allocate a pty
      8. -N Don't run a remote command
      9. -f Run in background after auth
      10. -y Always accept remote host key if unknown
      11. -y -y Don't perform any remote host key checking (caution)
      12. -s Request a subsystem (use by external sftp)
      13. -i <identityfile> (multiple allowed)
      14. -A Enable agent auth forwarding
      15. -L <[listenaddress:]listenport:remotehost:remoteport> Local port forwarding
      16. -g Allow remote hosts to connect to forwarded ports
      17. -R <[listenaddress:]listenport:remotehost:remoteport> Remote port forwarding
      18. -W <receive_window_buffer> (default 24576, larger may be faster, max 1MB)
      19. -K <keepalive> (0 is never, default 0)
      20. -I <idle_timeout> (0 is never, default 0)
      21. -B <endhost:endport> Netcat-alike forwarding
      22. -J <proxy_program> Use program pipe rather than TCP connection
      23. -c <cipher list> Specify preferred ciphers ('-c help' to list options)
      24. -m <MAC list> Specify preferred MACs for packet verification (or '-m help')
      25. -V Version
      26. root@vusolo2:/#
      Alles anzeigen




      zum Menü - schau mal in den Spoiler


      Spoiler anzeigen
      plugin.py

      Python-Quellcode

      1. from Components.MenuList import MenuList
      2. from Plugins.Plugin import PluginDescriptor
      3. from Screens.Screen import Screen
      4. from Components.ActionMap import ActionMap
      5. from Components.Label import Label
      6. import os
      7. Comnd = "Commnd"
      8. pname = _("Commnd")
      9. def cmd(menuid, **kwargs):
      10. if menuid == "mainmenu":
      11. return [(pname, runcmd, "Commnd", 1)]
      12. return []
      13. def runcmd(session,**kwargs):
      14. session.open(MyMenu)
      15. def Plugins(path,**kwargs):
      16. list = []
      17. list.append(PluginDescriptor(name=pname, where = PluginDescriptor.WHERE_MENU, fnc = cmd))
      18. return list
      19. def log(word):
      20. print "[Commnd] " + word
      21. class MyMenu(Screen):
      22. skin = """
      23. <screen name="Command" title="Command" position="center,center" size="1280,720" backgroundColor="#00000000" >
      24. <widget source="session.VideoPicture" render="Pig" position="810,65" size="450,245" zPosition="8" backgroundColor="unff000000" />
      25. <widget source="" render="Label" position="0,0" size="1280,40" backgroundColor="blue" transparent="0" zPosition="1" font="Regular; 35" valign="center" halign="left" foregroundColor="white" />
      26. <widget source="global.CurrentTime" render="Label" position="1150,5" size="120,45" font="Regular; 38" halign="right" backgroundColor="background" transparent="1" foregroundColor="white">
      27. <convert type="ClockToText">Default</convert>
      28. </widget>
      29. <widget source="global.CurrentTime" render="Label" position="780,10" size="370,26" font="Regular; 22" halign="right" backgroundColor="background" transparent="1" foregroundColor="white">
      30. <convert type="ClockToText">Format:%A, %d. %B %Y</convert>
      31. </widget>
      32. <widget source="Title" render="Label" position="10,4" size="1280,40" backgroundColor="background" transparent="1" zPosition="1" font="Regular; 35" valign="center" halign="left" foregroundColor="white" />
      33. <widget name="key_red" position="99,680" size="265,30" zPosition="1" font="Regular;22" halign="left" foregroundColor="#00ffffff" transparent="0" />
      34. <widget name="key_green" position="411,680" size="165,30" zPosition="1" font="Regular;22" halign="left" foregroundColor="#00ffffff" transparent="0" />
      35. <ePixmap position="59,684" size="25,25" zPosition="-1" pixmap="/usr/share/enigma2/skin_default/buttons/button_red.png" alphatest="on" />
      36. <ePixmap position="374,684" size="25,25" zPosition="-1" pixmap="/usr/share/enigma2/skin_default/buttons/button_green.png" alphatest="on" />
      37. <widget name="myMenu" position="10,50" size="700,600" font="Regular; 22" foregroundColorSelected="#00000000" backgroundColorSelected="#0079A6FF" />
      38. </screen>"""
      39. def __init__(self, session, args = 0):
      40. Screen.__init__(self, session)
      41. list = []
      42. list.append((_("Ambilight beenden"),"ssh -y -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"))
      43. list.append((_("List Filesystem"),"ls -l /"))
      44. Screen.__init__(self, session)
      45. self["myMenu"] = MenuList(list)
      46. self["key_red"] = Label(_("Abbruch"))
      47. self["key_green"] = Label(_("OK"))
      48. self["setupActions"] = ActionMap([ "ColorActions", "SetupActions" ],
      49. {
      50. "green": self.go,
      51. "red": self.close,
      52. "cancel": self.close,
      53. "ok": self.go,
      54. }, -1)
      55. def go(self):
      56. cmd=self["myMenu"].l.getCurrentSelection()[1]
      57. os.system(cmd)
      58. self.close()
      Alles anzeigen

      Rechtschreibfehler sind beabsichtigt, sie fördern ein genaueres Lesen
      Debug Log aktivieren Putty Telnet Screenshots erstellen
    • Dieser Code verursacht einen Lila-Screen.

      Fehler war


      Quellcode

      1. "backgroundColor="unff000000"



      Musste geändert werden in

      Quellcode

      1. backgroundColor="#00000000"


      Jetzt funktioniert es aber. :thumbsup:

      Ist es nicht möglich so ein Menü wie bei "Standby / Neustart" oder "Einstellungen"?
      Das jetzige Menü sieht ein wenig eigenartig aus.


      Es sieht jetzt wie auf dem Bild aus, nur das alles schwarz ist und keine Transparenz.
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Straight121 ()

    • pass das doch nach deinen eigenen Wünsche farblich an.
      Nimm Paint.NET, dann kannst du die Farbwerte einfach rauskopieren und im Skin-Bereich von plugin.py eintragen.

      oder machst es so.

      Spoiler anzeigen

      Python-Quellcode

      1. from Components.MenuList import MenuList
      2. from Plugins.Plugin import PluginDescriptor
      3. from Screens.Screen import Screen
      4. from Components.ActionMap import ActionMap
      5. from Components.Label import Label
      6. from Components.Sources.StaticText import StaticText
      7. import os
      8. Comnd = "Commnd"
      9. pname = _("Commnd")
      10. def cmd(menuid, **kwargs):
      11. if menuid == "mainmenu":
      12. return [(pname, runcmd, "Commnd", 1)]
      13. return []
      14. def runcmd(session,**kwargs):
      15. session.open(MyMenu)
      16. def Plugins(path,**kwargs):
      17. list = []
      18. list.append(PluginDescriptor(name=pname, where = PluginDescriptor.WHERE_MENU, fnc = cmd))
      19. return list
      20. def log(word):
      21. print "[Commnd] " + word
      22. class MyMenu(Screen):
      23. skin = """
      24. <screen position="center,center" size="600,420" title="Command">
      25. <widget name="myMenu" position="10,5" size="580,330" scrollbarMode="showOnDemand" />
      26. <ePixmap pixmap="skin_default/buttons/red.png" position="20,370" size="140,40" alphatest="on" />
      27. <ePixmap pixmap="skin_default/buttons/green.png" position="170,370" size="140,40" alphatest="on" />
      28. <widget source="key_red" render="Label" position="20,370" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
      29. <widget source="key_green" render="Label" position="170,370" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
      30. </screen>"""
      31. def __init__(self, session, args = 0):
      32. Screen.__init__(self, session)
      33. list = []
      34. list.append((_("Ambilight beenden"),"ssh -y -i /home/root/.ssh/id_rsa root@192.168.178.40 service hyperion stop"))
      35. list.append((_("List Filesystem"),"ls -l /"))
      36. Screen.__init__(self, session)
      37. self["myMenu"] = MenuList(list)
      38. self["key_red"] = StaticText(_("Cancel"))
      39. self["key_green"] = StaticText(_("Ok"))
      40. self["setupActions"] = ActionMap([ "ColorActions", "SetupActions" ],
      41. {
      42. "green": self.go,
      43. "red": self.close,
      44. "cancel": self.close,
      45. "ok": self.go,
      46. }, -1)
      47. def go(self):
      48. cmd=self["myMenu"].l.getCurrentSelection()[1]
      49. os.system(cmd)
      50. self.close()
      Alles anzeigen
      Rechtschreibfehler sind beabsichtigt, sie fördern ein genaueres Lesen
      Debug Log aktivieren Putty Telnet Screenshots erstellen