2017-09-14 3 views
0

ディスプレイ(モニタ)が動作しているかどうかをチェックし、そのデータをコードにインポートする可能性はありますか?私は、コマンドラインのトリックや、それに関する情報を漏らす可能性のあるデバイスがあると仮定します。 Linuxを使う。Linuxでディスプレイが動作しているかどうかを常に確認しています

+0

'xrandr | grep connected'? – rodrigo

+0

多くの感謝!それはトリックを行います:) – Levi

+0

喜んでそれが助けた。私は長い答えを加えました。あなたが好きなら、それを受け入れることができます。 ;-) – rodrigo

答えて

0

XRandRX解像度と回転など)を使用することができます。

出力表示のステータスは、コマンドxrandrで確認できます。たとえば、私のPCでは、次のようになります。

$ 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拡張子でプログラムするのは簡単です。あなたはXRROutputChangeNotifyEvent Xイベントを使用することができ、変更のリアルタイム通知を取得したい場合は

#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; 
} 

が、それは次のようになります。このサンプルコードは、すべての出力(エラーチェックを省略)の接続状態を表示しますもう少し複雑です:あなたはイベントループが必要ですか、またはウィジェットツールキットを使用し、Xイベントハンドラをフックしてください。

関連する問題