2010-08-08 12 views
19

¿Cómo sabe si los monitores de una computadora se encienden/apagan desde la línea de comandos en Linux? Tradicionalmente, he pensado en los monitores como dispositivos de solo salida, pero me he dado cuenta de que el cuadro de diálogo Preferencias del monitor Gnome tiene una función de "detectar monitor". ¿Se puede generalizar para determinar si un monitor está físicamente apagado?Cómo determinar si el monitor LCD está encendido desde la línea de comandos de Linux

+26

'echo '¡Rápido!Presione una tecla si ve esto :-) '' – paxdiablo

+0

Aunque técnicamente no es '' desde la línea de comandos '', hay una secuencia de comandos de python [Sobre esta pregunta de SO] (http://stackoverflow.com/questions/10400236/how-to- observe-cambia-en-conectado-monitores-a-xlib) que hace el truco muy bien – Barton

Respuesta

1

Es posible que desee ver en la salida del

$ xset -q 

No estoy seguro de si va a trabajar, pero creo que la línea de "Monitor es (on | off)" debería decir la respuesta.

+2

Aún me da 'Monitor is On 'incluso cuando lo apago. – Thomas

+2

Eso podría mostrar si el monitor está enchufado o no. No creo que haya una manera de ver si realmente está encendido. Si está conectado, el sistema operativo asume que está encendido. Gnome probablemente solo detecta el monitor cuando está conectado, no cuando está encendido/apagado. Supongo que la única forma de probar esto es escribir el comando anterior, desenchufar el monitor, presionar enter, conectar el monitor y ver lo que dice. No puedo probar este b/c estoy en una computadora portátil. – avacariu

+4

"Todavía me da Monitor está encendido incluso cuando lo apago" - ¿Cómo puede saberlo? Tal vez sea lo suficientemente inteligente como para volver atrás y cambiar la salida cuando detecta que ha activado el monitor para verificar. Ahora solo tengo que averiguar si la luz del refrigerador se apaga realmente cuando cierra la puerta. – paxdiablo

5

Puede obtener información utilizando la utilidad de línea de comandos xrandr, si su controlador de video admite esta extensión.

+3

Parece que me da la misma lectura falsa que recibo de xset. – Cerin

13

La conexión VESA DDC es una conexión I2C que se puede utilizar para consultar la presencia del monitor.

Linux exposes the I2C device y programas de espacio de usuario pueden comunicarse directamente con el monitor con código como el que es http://jaffar.cs.msu.su/oleg/ddcci/

cuenta de esto a continuación: 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] 

Una cuestión interesante es si o no su monitor vuelve ese pedazo de datos, y si no, si responde en absoluto si está actualmente desactivado.

+2

Lo hace. Incluso es posible encender y apagar el monitor desde la línea de comando. –

+2

ddcci ahora es ddccontrol: http://sourceforge.net/projects/ddccontrol/ Como dijo Eren, lo hace, e incluso puede hacerlo usted mismo con 'ddccontrol -r 0xe1 -w 0' – domen

+0

Para mi caso, los errores de ddccontrol salen (se queja de que el monitor no es compatible) cuando el monitor está encendido y conectado, pero ddccontrol está en silencio cuando no está conectado o apagado. Todavía está buscando un método para determinar si el monitor (TV) está en otra entrada. Pero eso es probablemente más allá de lo que es factible. Además, para ejecutar esto bajo Ubuntu 12.04 ver aquí: http://www.techytalk.info/ubuntu/ddccontrol/ y probablemente necesites hacer un 'sudo modprobe i2c-dev' para que funcione –

8

De systembash.com, aquí está el código tomado del enlace, en caso de que disminuirá alrededor del día:

#!/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

No todos los monitores soportan VESA DDC. La cosa puede complicarse aún más si usa un muelle.

Por otro lado, hay una manera de comprobar si sus acciones se detectan mediante la supervisión de los eventos kernel/udev. Para hacer esto, para Fedora y RHEL, el tipo siguiente comando:

sudo udevadm monitor --property 

se mostrará cada núcleo y udev eventos que detecte. A partir de eso, puede probar conectar/desconectar el cable de datos del monitor; enchufe/desenchufe el cable de alimentación del monitor; alternar los estados de espera/encendido presionando el botón de encendido.

Si no se genera ninguna salida después de una acción, entonces su sistema no puede detectarla.

1

xset -q es el camino a seguir para una pi frambuesa. Una verificación para ver si la respuesta contiene 'Monitor está activado' es una gran manera de usar un pin gpio para apagar una luz de fondo de la pantalla 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; 
} 
Cuestiones relacionadas