Aus Script kein Zugriff auf Display :0

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Forum,
    ich habe ein kleines Script geschrieben bei dem ich mir auf dem X-Server ein Bild ausgeben lasse:
    os.system("xli -display :0 Datei")
    Führe ich das Script als root aus läuft es.
    Starte ich es in der rc.local mit "/usr/bin/python3 var/www/callmon/callmon.py & "
    bekomme ich einen Fehler "Can´t open Display :0"
    Starte ich mit "os.system("xli -display :1 Datei")" geht es. Display :1 ist der VLC Server.
    Also ich starte mein Script in der rc.local als Root oder ? Und root darf Display :0 nutzen ?

    Hätte jemand eine Idee ?

    Gruß

    Frank

  • /etc/rc.local wird früher ausgeführt als die Desktop-Umgebung (LXDE) und somit kann ein Programm für die grafische Ausgabe zu dem Zeitpunkt noch nicht dargestellt werden. Guck dir dazu mal die Autostart-Möglichkeit in > diesem Beitrag < an.

  • der Zugriff auf das Display :0 läuft erst später nicht wären des Bootvorgangs da wird nur das Script geladen. Was mir grade aufgefallen ist das ich per ssh Client (Windows) auch keinen Zugriff auf das Display :0 bekommen. Versuch doch mal xli - Display :0 auszuführen, da scheint es doch ein Rechteproblem zu geben.

  • Hallo,

    hat zwar nicht direkt was mit dem Problem zu tun, aber warum `os.system("xli -display :0 Datei")`? Erstens gilt der Weg als stark suboptimal - wenn externe Aufrufe, dann mit dem `subprocess` Modul. Und zweitens brauchst du dafür so wie so keine externen Aufruf, wenn du das mit der `show()` Funktion auf aus `Image`-Klasse des Pillow-Moduls machen würdest.

    Gruß, noisefloor


  • Erstens gilt der Weg als stark suboptimal - wenn externe Aufrufe, dann mit dem `subprocess` Modul. Und zweitens brauchst du dafür so wie so keine externen Aufruf, wenn du das mit der `show()` Funktion auf aus `Image`-Klasse des Pillow-Moduls machen würdest.

    Ja der Einwand ist mehr als berechtigt, vor allem weil der Prozess ja wieder beendet werden muss, und das wäre bei mir dann mit Killall .
    Ich habe bisher `Show´ nur in Verbindung mit statischen Aufrufen benutzt. Hier ist es jedoch eine Variable also ( "%s.jpg" % cover ) da bekomme ich den Aufruf nicht, hin ich bekomme immer ein "Syntax error" Das wird sicher gehen nur habe ich es noch nicht gefunden.

    Einmal editiert, zuletzt von firstfacility (1. September 2015 um 10:31)

  • Hallo,

    entweder baust du den String vorher zusammen oder du benutzt die `format()` Methode von Strings. Letzteres ist der neuere und IMHO bessere Weg:

    Python
    >>> from PIL import Image
    >>> mein_bild = "%s.JPG" % "P1050795"
    >>> mein_bild
    'P1050795.JPG'
    >>> im = Image.open(mein_bild)
    >>> im.show()
    >>>
    >>> im2 = Image.open('{}.JPG'.format('P1050795'))
    >>> im2.show()
    >>>

    Gruß, noisefloor

Jetzt mitmachen!

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