2017-09-14 4 views
0

Est-il possible de vérifier si l'affichage (moniteur) fonctionne ou non et d'importer ces données dans le code? Je suppose qu'il y a des astuces ou des périphériques de ligne de commande qui pourraient «laisser échapper» des informations à ce sujet. En utilisant Linux.Vérifier en permanence si l'affichage fonctionne sous Linux

+0

Quelque chose comme 'xrandr | grep connecté'? – rodrigo

+0

Merci beaucoup! Ça fait l'affaire :) – Levi

+0

Glad it helps. J'ai ajouté une réponse plus longue, donc vous pouvez l'accepter, si vous en avez envie. ;-) – rodrigo

Répondre

0

Vous pouvez utiliser l'extension X11 XRandR (résolution X et la rotation ou quelque chose comme ça).

Vous pouvez voir l'état des affichages de sortie avec la commande xrandr. Dans mon PC par exemple vous obtenez:

$ xrandr | grep connected 
DVI-I-0 disconnected (normal left inverted right x axis y axis) 
DVI-I-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm 
.... 

Les noms des sorties sont bien sûr spécifiques à l'appareil.

Si vous souhaitez accéder aux données d'un programme C, l'extension Xrandr est assez facile à programmer. Ce code exemple imprimera l'état de connexion de toutes les sorties (vérification d'erreur omis):

#include <X11/Xlib.h> 
#include <X11/extensions/Xrandr.h> 
#include <stdio.h> 

int main() 
{ 
    Display *dsp = XOpenDisplay(NULL); 
    Window root = XRootWindow(dsp, 0); 
    XRRScreenResources *sres = XRRGetScreenResources(dsp, root); 
    printf("N outputs %d\n", sres->noutput); 
    for (int i = 0; i < sres->noutput; ++i) 
    { 
     XRROutputInfo *info = XRRGetOutputInfo(dsp, sres, sres->outputs[i]); 
     printf(" %d: '%s' %s\n", i, info->name, info->connection == RR_Connected ? "connected" : ""); 
     XRRFreeOutputInfo(info); 

    } 
    XRRFreeScreenResources(sres); 
    XCloseDisplay(dsp); 
    return 0; 
} 

Si vous souhaitez recevoir une notification en temps réel des changements que vous pouvez utiliser l'événement XRROutputChangeNotifyEvent X, mais ce sera un un peu plus compliqué: vous aurez besoin d'une boucle d'événement ou utilisez une boîte à outils de widget et accrochez le gestionnaire d'événement X ...