Как определить, включен ли ЖК-монитор из командной строки Linux - PullRequest
20 голосов
/ 08 августа 2010

Как узнать, включены ли мониторы компьютера из командной строки в Linux?Я традиционно считал мониторы устройствами, предназначенными только для вывода, но я заметил, что в диалоговом окне «Настройки монитора» в Gnome есть функция «Обнаружение монитора».Можно ли это обобщить, чтобы определить, физически ли выключен монитор?

Ответы [ 7 ]

13 голосов
/ 11 августа 2010

Соединение VESA DDC представляет собой соединение I2C , которое можно использовать для запроса о наличии монитора.

Linux предоставляет устройство I2C , и пользовательские программы могутнапрямую связывайтесь с монитором с помощью кода, такого как http://jaffar.cs.msu.su/oleg/ddcci/

Обратите внимание на это ниже: 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]

Интересный вопрос заключается в том, возвращает ли ваш монитор, чточасть данных, и если нет, то отвечает ли она вообще, если она в данный момент выключена.

11 голосов
/ 21 апреля 2013

С systembash.com , вот код, взятый по ссылке, на случай, если он когда-нибудь будет недоступен:

#!/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
5 голосов
/ 08 августа 2010

Вы можете получить некоторую информацию, используя утилиту командной строки xrandr, если ваш видеодрайвер поддерживает это расширение.

3 голосов
/ 03 июля 2013

Не все мониторы поддерживают vesa DDC. Все может стать еще сложнее, если вы используете док.

С другой стороны, есть способ проверить, обнаруживаются ли ваши действия, отслеживая события ядра / udev. Для этого для Fedora и RHEL введите следующую команду:

sudo udevadm monitor --property

Он отобразит все обнаруженные события ядра и udev. Из этого вы можете попробовать подключить / отключить кабель данных монитора; подключите / отключите кабель питания монитора; переключите режим ожидания в положение «включено», нажав кнопку питания.

Если после действия не генерируется никакого вывода, ваша система не может его обнаружить.

2 голосов
/ 10 июня 2012

При использовании xset он всегда возвращает xset: невозможно открыть дисплей ""

Однако команды "xset dpms force off" и "xset dpms force off" фактически выключают и включают мой монитор.Я использую сценарий, изложенный здесь -

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

1 голос
/ 19 февраля 2016

xset -q - это путь к малиновому пи. Проверка того, содержит ли ответ «Монитор включен», является отличным способом использования булавки gpio для отключения подсветки ЖК-дисплея;

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;
 }
1 голос
/ 08 августа 2010

Вы можете посмотреть на вывод

$ xset -q

Я не уверен, что это будет работать, но я думаю, что строка "Монитор (вкл. / Выкл.)" Должна дать вам ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...