2010-08-08 4 views
19

Comment savoir si les moniteurs d'un ordinateur sont activés/désactivés depuis la ligne de commande sous Linux? J'ai toujours considéré les moniteurs comme des périphériques de sortie uniquement, mais j'ai remarqué que la boîte de dialogue Gnome Monitor Preferences (Préférences du moniteur Gnome) possède une fonction de détection de moniteur. Cela peut-il être généralisé pour déterminer si un moniteur est physiquement éteint?Comment déterminer si le moniteur LCD est activé à partir de la ligne de commande Linux

+26

'echo 'Rapide!Appuyez sur une touche si vous voyez ceci :-) '' – paxdiablo

+0

Bien que techniquement pas "à partir de la ligne de commande", il y a un script python [Sur cette question SO] (http://stackoverflow.com/questions/10400236/how-to- observer-changements-dans-connecté-moniteurs-via-xlib) qui fait l'affaire bien – Barton

Répondre

1

Vous pouvez regarder la sortie de

$ xset -q 

Je ne sais pas si cela va fonctionner, mais je pense que la ligne « Monitor est (on | off) » devrait vous dire la réponse.

+2

Toujours me donne 'Monitor is On' même quand je l'éteins. – Thomas

+2

Cela pourrait juste montrer si le moniteur est branché ou non. Je ne pense pas qu'il existe un moyen de voir si c'est activé. S'il est branché, l'OS suppose qu'il est allumé. Gnome détecte probablement le moniteur lorsqu'il est branché et non lorsqu'il est allumé/éteint. Je suppose que la seule façon d'essayer cela est de taper la commande précédente, débranchez votre moniteur, appuyez sur Entrée, branchez le moniteur et voir ce qu'il dit. Je ne peux pas tester ce b/c je suis sur un ordinateur portable. – avacariu

+4

"Le moniteur reste allumé même lorsque je l'éteins" - comment pouvez-vous le dire? Peut-être qu'il est assez intelligent pour revenir en arrière et modifier la sortie quand il détecte que vous avez allumé votre moniteur pour vérifier. Maintenant, je dois juste savoir si la lumière du réfrigérateur _really_ s'éteint lorsque vous fermez la porte. – paxdiablo

5

Vous pouvez obtenir des informations à l'aide de l'utilitaire de ligne de commande xrandr, si votre pilote vidéo prend en charge cette extension.

+3

Il semble me donner la même fausse lecture que je reçois de xset. – Cerin

13

La connexion VESA DDC est une connexion I2C qui peut être utilisée pour interroger la présence du moniteur.

Linux exposes the I2C device et les programmes userland peuvent communiquer directement avec le moniteur avec le code tel que celui en http://jaffar.cs.msu.su/oleg/ddcci/

Avis ce ci-dessous: Control 0xe1: +/1/1 [SAM: Power control (0 - off/1 - on)]

# ddcci-tool /dev/i2c-2 -e -c -d 


ddcci-tool version 0.03 

Reading EDID : [email protected]/dev/i2c-2 
    Plug and Play ID: SAM00BA 
    Input type: Analog 

Using ddc/ci : [email protected]/dev/i2c-2 

Capabilities: 
(type(LCD)vcp(04 05 10 12 60(1 3) B0(1 2) B6 C6 C8 C9 D6(1 4) DC(1 2 3 4) DF)) 

Controls (valid/current/max): 
Control 0x04: +/0/1 [Reset Factory Defaults] 
Control 0x05: +/0/1 [SAM: Reset Brightness and Contrast] 
Control 0x06: +/0/1 [Reset Factory Geometry] 
Control 0x08: +/0/1 [Reset Factory Default Color] 
Control 0x0e: +/60/120 [SAM: Image Lock Coarse] 
Control 0x10: +/0/100 [Brightness] 
Control 0x12: +/50/100 [Contrast] 
Control 0x16: +/8/16 [Red Video Gain] 
Control 0x18: +/8/16 [Green Video Gain] 
Control 0x1a: +/8/16 [Blue Video Gain] 
Control 0x1e: +/0/2 [SAM: Auto Size Center] 
Control 0x20: +/50/100 [Horizontal Position] 
Control 0x30: +/25/54 [Vertical Position] 
Control 0x3e: +/39/50 [SAM: Image Lock Fine] 
Control 0x60: +/1/3 [Input Source Select] 
Control 0x62: +/0/100 [Audio Speaker Volume Adjust] 
Control 0x6c: +/140/255 [Red Video Black Level] 
Control 0x6e: +/127/255 [Green Video Black Level] 
Control 0x70: +/121/255 [Blue Video Black Level] 
Control 0xb0: +/0/2 [Settings] 
Control 0xb6: +/3/8 [???] 
Control 0xc6: +/1/1 [???] 
Control 0xc8: +/5/16 [???] 
Control 0xc9: +/1/0 [???] 
Control 0xca: +/2/2 [On Screen Display] 
Control 0xcc: +/2/11 [SAM: On Screen Display Language] 
Control 0xd6: +/1/4 [SAM: DPMS control (1 - on/4 - stby)] 
Control 0xdc: +/4/4 [SAM: MagicBright (1 - text/2 - internet/3 - entertain/4 - custom)] 
Control 0xdf: +/512/0 [VCP Version] 
Control 0xe0: +/0/2 [SAM: Color preset (0 - normal/1 - warm/2 - cool)] 
Control 0xe1: +/1/1 [SAM: Power control (0 - off/1 - on)] 
Control 0xe2: +/0/1 [???] 
Control 0xed: +/108/255 [SAM: Red Video Black Level] 
Control 0xee: +/101/255 [SAM: Green Video Black Level] 
Control 0xef: +/103/255 [SAM: Blue Video Black Level] 

Une question intéressante est de savoir si oui ou non votre moniteur retourne ce morceau de données, et si ce n'est pas le cas, si elle répond à tous si elle est actuellement désactivée.

+2

C'est le cas. Il est même possible d'allumer et d'éteindre votre moniteur depuis la ligne de commande. –

+2

ddcci est maintenant ddccontrol: http://sourceforge.net/projects/ddccontrol/ Comme Eren l'a dit, c'est le cas, et vous pouvez même le faire vous-même avec 'ddccontrol -r 0xe1 -w 0' – domen

+0

Pour mon cas, les erreurs ddccontrol out (se plaint que le moniteur n'est pas pris en charge) lorsque le moniteur est allumé et connecté, mais ddccontrol est silencieux lorsqu'il n'est pas connecté ou éteint. Toujours à la recherche d'une méthode pour déterminer si le moniteur (TV) est sur une autre entrée cependant. Mais c'est probablement au-delà de ce qui est faisable. Aussi, pour que cela fonctionne sous Ubuntu 12.04 voir ici: http://www.techytalk.info/ubuntu/ddccontrol/ et vous avez probablement besoin de faire un sudo modprobe i2c-dev pour le faire fonctionner –

8

De systembash.com, voici le code pris à partir du lien, dans le cas où il sera en baisse un jour:

#!/bin/bash 
export DISPLAY=:0.0 

if [ $# -eq 0 ]; then 
    echo usage: $(basename $0) "on|off|status" 
    exit 1 
fi 

if [ $1 = "off" ]; then 
    echo -en "Turning monitor off..." 
    xset dpms force off 
    echo -en "done.\nCheck:" 
    xset -q|grep "Monitor is" 
elif [ $1 = "on" ]; then 
    echo -en "Turning monitor on..." 
    xset dpms force on 
    echo -en "done.\nCheck:" 
    xset -q|grep "Monitor is" 
elif [ $1 = "status" ]; then 
    xset -q|sed -ne 's/^[ ]*Monitor is //p' 
else 
    echo usage: $(basename $0) "on|off|status" 
fi 
3

Tous les moniteurs VESA DDC. La chose pourrait devenir encore plus compliquée si vous utilisez un dock. D'autre part, il existe un moyen de vérifier si vos actions sont détectées en surveillant les événements kernel/udev. Pour ce faire, pour Fedora et RHEL, commande type:

sudo udevadm monitor --property 

Il permet d'afficher tous les événements du noyau et udev il a détecté. De cela, vous pouvez essayer de brancher/débrancher le câble de données du moniteur; branchez/débranchez le câble d'alimentation du moniteur; basculer les états stand-by/on en appuyant sur le bouton d'alimentation.

Si aucune sortie n'est générée après une action, votre système ne peut pas la détecter.

1

xset -q est la voie à suivre pour un pi de framboise. Une vérification pour voir si la réponse contient 'Monitor is On' est un excellent moyen d'utiliser une broche gpio pour éteindre un rétroéclairage LCD;

if(runOSCommand("xset -q").contains("Monitor is On")){ 
      System.out.println("Monitor is On"); 
      if screenLight.isHigh()) { 
       screenLight.low(); 
      } 
     }else{ 
      System.out.println("Monitor is Off"); 
      if (screenLight.isLow()) { 
       screenLight.high(); 
      } 
     } 


    public static String runOSCommand(String command){ 
    String s = null; 
    String string = ""; 
    Process p; 
    try { 
     p = Runtime.getRuntime().exec(command); 
     BufferedReader br = new BufferedReader(
      new InputStreamReader(p.getInputStream())); 
     while ((s = br.readLine()) != null){ 
//   System.out.println("line: " + s); 
      string += s; 
     } 
     p.waitFor(); 
//   System.out.println ("exit: " + p.exitValue()); 
     p.destroy(); 
    } catch (Exception e) {} 
    return string; 
} 
Questions connexes