2017-09-14 39 views
0

是否有可能检查显示器(显示器)是否正常工作并将该数据导入代码?我认为有一些命令行技巧或设备可能会泄露关于它的信息。使用Linux。不断检查显示器是否在Linux上工作

+0

像'xrandr | grep connected'? – rodrigo

+0

非常感谢!这就是诀窍:) – Levi

+0

很高兴帮助。我已经添加了更长的答案,所以如果你喜欢,你可以接受它。 ;-) – rodrigo

回答

0

您可以使用X11扩展XRandRX分辨率和旋转或类似的东西)。

您可以通过命令xrandr查看输出显示的状态。在我的电脑中,例如:

$ xrandr | grep connected 
DVI-I-0 disconnected (normal left inverted right x axis y axis) 
DVI-I-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 531mm x 299mm 
.... 

当然,输出的名称是特定于设备的。

如果您想访问C程序中的数据,Xrandr扩展程序很容易编程。此示例代码将打印所有的输出(检查省略错误)连接状态:

#include <X11/Xlib.h> 
#include <X11/extensions/Xrandr.h> 
#include <stdio.h> 

int main() 
{ 
    Display *dsp = XOpenDisplay(NULL); 
    Window root = XRootWindow(dsp, 0); 
    XRRScreenResources *sres = XRRGetScreenResources(dsp, root); 
    printf("N outputs %d\n", sres->noutput); 
    for (int i = 0; i < sres->noutput; ++i) 
    { 
     XRROutputInfo *info = XRRGetOutputInfo(dsp, sres, sres->outputs[i]); 
     printf(" %d: '%s' %s\n", i, info->name, info->connection == RR_Connected ? "connected" : ""); 
     XRRFreeOutputInfo(info); 

    } 
    XRRFreeScreenResources(sres); 
    XCloseDisplay(dsp); 
    return 0; 
} 

如果你想要得到的,你可以使用XRROutputChangeNotifyEvent X事件的变化实时通知,但是这将是一个有点复杂:你将需要一个事件循环或使用一个小工具工具包,并钩住X事件处理程序......