J'écris une application Linux qui utilise PYQT4 pour l'interface graphique et qui ne sera utilisée que lors des sessions distantes de Donc, parfois, il peut arriver qu'un utilisateur oubliera d'exécuter ssh em> avec x paramètres de transfert ou x expéditeur sera indisponible pour une raison quelconque. Dans ce cas, l'application se bloque mal (malheureusement, je suis forcée d'utiliser une ancienne bibliothèque C ++ en enveloppée dans Python et désactive complètement la session en cours de l'utilisateur si l'application se bloque). P>
Je ne peux pas utiliser autre chose d'autre, alors mon idée est de vérifier si X Transfert est disponible avant de charger cette bibliothèque. Cependant, je n'ai aucune idée de comment faire ça. P>
J'utilise habituellement xclock pour vérifier si ma session dispose d'un transfert de transmission X, mais que l'utilisation de XClock sonne comme une solution de contournement. P>
ajouté fort>
( ssh -xy em> / vnc em>). < / p>
Si possible, j'aimerais utiliser une autre manière que de créer une fenêtre pyqt vide et d'attraper une exception. P>
4 Réponses :
Vérifiez que la variable $ afficheur code> est définie - S'ils n'utilisaient pas
ssh -x code>, il sera vide (au lieu de contenir quelque chose comme < Code> localhost: 10 code>). p>
C'est exagéré ce que je cherchais, propre et simple, merci.
Que se passe-t-il s'ils utilisent ssh -x code> mais n'ont pas de serveur X en cours d'exécution? De mes tests occasionnels, il semble que
$ Afficher code> ne soit pas défini, mais est-ce de manière fiable?
Comme mentionné précédemment, vous pouvez vérifier la variable d'environnement d'affichage:
import os import socket def tcp_connect_to_display(): # get the display from the environment display_env = os.environ['DISPLAY'] # parse the display string display_host, display_num = display_env.split(':') display_num_major, display_num_minor = display_num.split('.') # calculate the port number display_port = 6000 + int(display_num_major) # attempt a TCP connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: sock.connect((display_host, display_port)) except socket.error: return False finally: sock.close() return True
Je me souviendrai de cette solution, peut-être qu'elle sera utile à l'avenir merci.
Semblable à votre solution XClock, j'aime exécuter xdpyinfo et voir s'il renvoie une erreur. P>
C'est génial car il sort avec zéro si le client n'a pas eu d'exécution X-Server (une chose commune pour les utilisateurs de Windows qui oublient de démarrer Xming). Je vais l'utiliser dans un script Bash, merci.
X-Server peut être vérifié avec tkinter em> comme dans l'exemple suivant (mais il devrait y avoir une manière similaire avec pyqt4 em>): Ceci vérifiera $ Afficher code> paramètre, processus X-Server et associé
xhost code> autorisation (mais utilise tkinter em> au lieu de pyqt4 < / em>). p> p>