如何确定液晶显示器是否从Linux命令行打开

你如何判断一台电脑的显示器是否从Linux的命令行开启/closures? 我一直以来都把显示器看作是输出设备,但是我注意到Gnome Monitor Preferences对话框有一个“检测监视器”function。 这可以通用来确定显示器是否被closures?

Solutions Collecting From Web of "如何确定液晶显示器是否从Linux命令行打开"

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] 

一个有趣的问题是,你的显示器是否返回这一块数据,如果没有,它是否响应,如果它是目前关闭。

来自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 

如果您的视频驱动程序支持此扩展名,则可以使用xrandr命令行实用程序获取一些信息。

并非所有显示器都支持vesa DDC。 如果你使用码头,事情可能会变得更加复杂。

另一方面,有一种方法可以通过监视kernel / udev事件来检查您的操作是否被检测到。 为此,对于Fedora和RHEL,输入以下命令:

 sudo udevadm monitor --property 

它将显示它检测到的每个内核和udev事件。 从这个,你可以尝试插拔显示器的数据线; 插拔显示器电源线; 按电源按钮切换待机/开机状态。

如果操作后没有生成输出,则系统无法检测到它。

当使用xset时,它总是返回xset:无法打开显示“”

但是,“xset dpms强制关闭”和“xset dpms强制关闭”命令实际上关闭和打开我的显示器。 我正在使用这里概述的脚本 –

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

xset -q是树莓派的方法。 检查回复是否包含“Monitor is On”是使用gpio引脚关闭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; } 

你可能想看看输出

 $ xset -q 

我不确定它是否会起作用,但我认为“Monitor is(on | off)”应该告诉你答案。