Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定LCD监视器是否从Linux命令行打开_Linux_Shell_Command Line - Fatal编程技术网

如何确定LCD监视器是否从Linux命令行打开

如何确定LCD监视器是否从Linux命令行打开,linux,shell,command-line,Linux,Shell,Command Line,在Linux中,如何判断计算机的监视器是否从命令行打开/关闭?我传统上认为监视器是只输出的设备,但我注意到Gnome监视器首选项对话框有一个“检测监视器”功能。这是否可以用来确定监视器是否实际关闭?您可能需要查看监视器的输出 $ xset -q 我不确定它是否能正常工作,但我认为“Monitor is(on | off)”一行应该会告诉您答案。如果您的视频驱动程序支持此扩展,您可以使用xrandr命令行实用程序获取一些信息。VESA DDC连接是一个可用于查询显示器是否存在的连接 而userl

在Linux中,如何判断计算机的监视器是否从命令行打开/关闭?我传统上认为监视器是只输出的设备,但我注意到Gnome监视器首选项对话框有一个“检测监视器”功能。这是否可以用来确定监视器是否实际关闭?

您可能需要查看监视器的输出

$ 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'
    过滤掉除“*”之外的所有内容
现在“$is_on”是一个布尔字符串,表示为“*”或空

这只在您的首选模式位于模式列表的顶部时才起作用,这是非常常见的

打开和关闭的整个脚本:

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