如何确定LCD监视器是否从Linux命令行打开
在Linux中,如何判断计算机的监视器是否从命令行打开/关闭?我传统上认为监视器是只输出的设备,但我注意到Gnome监视器首选项对话框有一个“检测监视器”功能。这是否可以用来确定监视器是否实际关闭?您可能需要查看监视器的输出如何确定LCD监视器是否从Linux命令行打开,linux,shell,command-line,Linux,Shell,Command Line,在Linux中,如何判断计算机的监视器是否从命令行打开/关闭?我传统上认为监视器是只输出的设备,但我注意到Gnome监视器首选项对话框有一个“检测监视器”功能。这是否可以用来确定监视器是否实际关闭?您可能需要查看监视器的输出 $ xset -q 我不确定它是否能正常工作,但我认为“Monitor is(on | off)”一行应该会告诉您答案。如果您的视频驱动程序支持此扩展,您可以使用xrandr命令行实用程序获取一些信息。VESA DDC连接是一个可用于查询显示器是否存在的连接 而userl
$ xset -q
我不确定它是否能正常工作,但我认为“Monitor is(on | off)”一行应该会告诉您答案。如果您的视频驱动程序支持此扩展,您可以使用xrandr命令行实用程序获取一些信息。VESA DDC连接是一个可用于查询显示器是否存在的连接 而userland程序可以直接与监视器通信,其代码如下所示: 请注意以下内容:
control0xe1:+/1/1[SAM:电源控制(0-off/1-on)]
一个有趣的问题是,您的显示器是否返回该数据段,如果不返回,如果当前关闭,它是否会响应。使用xset时,它总是返回 xset:无法打开显示“” 但是,“xset dpms force off”和“xset dpms force off”命令实际上可以关闭和打开监视器。我正在使用这里概述的脚本- 从中,以下是从链接中获取的代码,以防有一天它会关闭:
#!/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
并非所有监控器都支持vesa DDC。如果你使用码头,事情可能会变得更复杂 另一方面,有一种方法可以通过监视内核/udev事件来检查是否检测到您的操作。 为此,对于Fedora和RHEL,键入以下命令:
sudo udevadm monitor --property
它将显示它检测到的每个内核和udev事件。
由此,您可以尝试插入/拔下显示器数据电缆;插拔显示器电源线;按下电源按钮,切换待机/开启状态
如果操作后没有生成输出,则系统无法检测到它。
xset-q
是树莓pi的一种方法。检查回复是否包含“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;
}
首先,找到要检查的显示器的名称:
xrandr -q
然后将“THE-MONITOR”更改为正确的名称:
#!/bin/sh
is_on="`xrandr -q | grep -A 1 'THE-MONITOR' | tail -1 | sed 's/[^\*]//g';`";
管道:
列出所有监视器李>xrandr-q
过滤为两行,一行包含显示器名称,另一行是连续的行,如果显示器打开,该行旁边会有一个“*”李>grep-A 1“THE-MONITOR”
丢弃第一行李>tail-1
过滤掉除“*”之外的所有内容李>sed的//[^\*]//g'
#!/bin/bash
is_on="`xrandr | grep -A 1 'DVI-I-1' | tail -1 | sed 's/[^\*]//g';`";
if [ "$is_on" ]
then
xrandr --output DVI-I-1 --off
else
xrandr --output DVI-I-1 --auto --left-of HDMI-0
fi
echo'快!如果您看到以下内容,请按一个键:-)”
虽然从技术上讲不是“从命令行”,但有一个python脚本可以很好地完成这项任务,直到我关闭显示器时,显示器仍处于打开状态。这可能只是显示显示器是否已插入。我不认为有办法知道它是否真的打开了。如果它已插入,操作系统将假定它已打开。Gnome可能只是在显示器插入时检测,而不是在显示器打开/关闭时检测。我想唯一的尝试方法是键入上一个命令,拔下显示器,点击回车键,重新插入显示器,然后看看上面写的是什么。我不能在笔记本电脑上测试这个b/c。“即使我关掉它,显示器还是开着”-你怎么知道?当它检测到你打开显示器进行检查时,它可能足够聪明,可以返回并更改输出。现在我只需要弄清楚当你关上门时冰箱的灯是否真的熄灭了。使用来自另一个终端的ssh,它的监视器没有关闭?即使显示器关闭,VESA DDC控制器也必须通电。它似乎给我提供了与我从xset获得的相同的错误读数。确实如此。甚至可以从命令行打开和关闭监视器。ddcci现在是ddccontrol:正如Eren所说,它可以,您甚至可以使用ddccontrol-r 0xe1-w 0
在我的情况下,当监视器打开并连接时,ddccontrol会出错(抱怨监视器不受支持),但ddccontrol在未连接或关闭时处于静默状态。仍然在寻找一种方法来确定显示器(TV)是否在另一个输入上。但这可能超出了可行的范围。另外,要在Ubuntu12.04下运行它,请看这里:你可能需要做一个sudo modprobe i2c dev
来让它工作如果你愿意花一些时间在它上面,那么你可以开始查看i2cdetect和i2cdump,并探测所有已寻址的内容(可能有风险?),然后将结果输出到一个文本文件,然后进行一些更改,如输入选择。。。然后再次输出结果,然后做一个diff,您可能能够识别字节的含义…问题是确定不这样做
#!/bin/bash
is_on="`xrandr | grep -A 1 'DVI-I-1' | tail -1 | sed 's/[^\*]//g';`";
if [ "$is_on" ]
then
xrandr --output DVI-I-1 --off
else
xrandr --output DVI-I-1 --auto --left-of HDMI-0
fi