Comment déterminer si le moniteur LCD est activé à partir de la ligne de commande Linux

Comment savoir si les écrans 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 dialog Préférences de Gnome Monitor comporte une fonction “détecter le moniteur”. Cela peut-il être généralisé pour déterminer si un moniteur est physiquement désactivé?

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

Linux expose le périphérique I2C et les programmes utilisateur peuvent communiquer directement avec le moniteur avec du code tel que celui sur http://jaffar.cs.msu.su/oleg/ddcci/

Notez ceci 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 : 0x50@/dev/i2c-2 Plug and Play ID: SAM00BA Input type: Analog Using ddc/ci : 0x37@/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 votre moniteur renvoie ou non cette donnée et, dans la négative, si elle répond si elle est actuellement désactivée.

Sur systembash.com , voici le code extrait du lien, au cas où il serait en panne 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 

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.

Tous les moniteurs ne prennent pas en charge vesa DDC. La chose pourrait devenir encore plus compliquée si vous utilisez un quai.

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, tapez la commande suivante:

 sudo udevadm monitor --property 

Il affichera tous les événements kernel et udev détectés. De cela, vous pouvez essayer de twigr / détwigr le câble de données du moniteur; twigz / détwigz le câble d’alimentation du moniteur; activez ou désactivez les états 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 le détecter.

Lorsque vous utilisez xset, il retourne toujours xset: impossible d’ouvrir display “”

Cependant, les commandes «xset dpms force off» et «xset dpms force off» désactivent et rallument mon moniteur. J’utilise le script décrit ici –

http://systembash.com/content/how-to-turn-off-your-monitor-via-command-line-in-ubuntu/

Vous voudrez peut-être regarder la sortie de

 $ xset -q 

Je ne suis pas sûr que cela fonctionnera mais je pense que la ligne “Monitor est (on | off)” devrait vous dire la réponse.

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 Ssortingng runOSCommand(Ssortingng command){ Ssortingng s = null; Ssortingng ssortingng = ""; 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); ssortingng += s; } p.waitFor(); // System.out.println ("exit: " + p.exitValue()); p.destroy(); } catch (Exception e) {} return ssortingng; }