Python Script,Daemon,PyGTK and X.org

hackernick | Παρ, 04/04/2008 - 07:38 | 2' | 6
Εχω φτιάξει ενα πρόγραμμα το οποίο εκκινέίται μέσω ενος init.d script κατα την εκκίνηση του υπολογιστή. Όμως αυτό κατα τη διάρκεια εκτέλεσης του εκτελέι ένα python script με γραφική διεπαφή(PyGTK). Όμως επειδή αυτό καλείται απο το tty0(η τελος πάντων απο γραμμή εντολών χωρις x server να τρέχει στο τερματικό) από οπου γίνετα και η αρχική εκτέλεση δεν εκτελείται με output αυτο

Traceback (most recent call last):
  File "/usr/share/boinccs/python/idle.py", line 4, in <module>
    import gtk
  File "/usr/lib/python2.5/site-packages/gtk-2.0/gtk/__init__.py", line 79, in <module>
    _init()
  File "/usr/lib/python2.5/site-packages/gtk-2.0/gtk/__init__.py", line 67, in _init
    _gtk.init_check()
RuntimeError: could not open display

Φυσική αν το εκτελέσω σε bash μέσα απο το γραφικό περιβάλλον εκτελείται κανονικά.
Καμία ιδέα για να λειτουργήσει?

 

Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

Νομίζω ότι απλά δεν μπορείς να το έχεις στα init.d, γιατί εσύ θες να βλέπεις ένα γραφικό παράθυρο, άρα να έχεις γραφικό περιβάλλον, άρα νομίζω θες να το βάλεις στην εκκίνηση του Χ ή του Gnome ή του KDE ή ότι άλλο έχεις.
Εδώ γράφει πως γίνεται αυτό:
Πως κάνω μια εφαρμογή να ξεκινά αυτόματα;

Εκτός κι αν κάνω λάθος, και θες να τρέξεις το σκριπτ ντε και καλά από terminal χωρίς X. Τότε ...δεν ξέρω, να άλλαζες τον κωδικα του Python script ώστε να μην καλεί το Python interface?

Στην εκκίνηση δεν τρέχει το python script. Τρέχει ενα άλλο πρόγραμμα. Αλλα κατα τη διάρκεια εκτελεσης του αυτό μπορεί να καλέσει ενα python script (αυτό μπορει να γίνει μια φορά, την επόμενη όχι- δεν ειναι ενα script που θέλω να τρέχει κάθε φορα που ξεκινά ο υπολογιστής). Είναι σίγουρο ότι οταν το πρόγραμμα μου θα καλέσει το script θα τρέχει X server στο tty7. Με λίγα λόγια θέλω να το καλώ απο το tty0 και να τρέχει στο tty7 (οπού τρέχει και ο Χ)

Στις περισσότερες εφαρμογές υπάρχει η παράμετρος -display :X, για να ορίζεις σε ποιο display να εμφανίζεται το παράθυρο. Δεν ξέρω όμως αν και πως γίνεται αυτό μέσα από ένα python script. Μπορεί αυτό να ναι κάτι εύκολο, μπορεί και όχι.

Το έφτιαξα. Αρκούσε να επιτρέψω στον X server να δέχεται tcp συνδέσεις και να κάνω export την $DISPLAY (:0.0).

Μπορείς σε παρακαλώ να γράψεις πως επέτρεψες στο X να δέχεται tcp connections γιατί μπορεί να ενδιαφέρει και άλλους αργότερα το κολπάκι σου;

Το έκανα με τα (γραφικά )εργαλεία που δίνει το fedora αλλα βρήκα αλλο και πιο ασφαλές κολπάκι. Ορίζουμε πάλι την $DISPLAY και αυτή τη φορά αντιγράφουμε το .Xauthority στον κατάλογο του χρήστη απο τον οποίο θα τρέξουμε το πρόγραμμα απο αυτον που έχει κανει login. πχ αν θέλουμε να τρέξουμε ως root απο απο κάποια κονσόλα δινουμε cp /home/user_logged_on/.Xauthority /root/ και export DISPLAY=:0 .