は、ここでのxrandrする例呼び出しです:のxrandrは、Cプログラミング
$ xrandr --output LVDS --mode 1680x1050 --pos 0x0 --rotate normal --output S-video --off --output DVI-0 --mode 1024x768 --pos 1680x104 --rotate normal
は、その呼び出しが成功しているシステムについて考えてみて。異なる解像度で動作する2つの画面(LVDSとDVI-0)があります。 DVI-0の1つが真ん中に置かれています。
この情報をCプログラムでどのように取得できますか? xrandrソースコードを確認しましたが、読みにくく、--pos値を照会する明白な方法がありません(編集:それは素人の感謝の気持ちで、隠されています)。
私はXGetWindowPropertyを使って_NET_WORKAREAに尋ねることができますが、私が見た限りでは、スクリーンの位置は教えてくれません。それらのすべてを含む理想的な矩形のサイズです。
xrandrコードの他の調査の後、このコードは解決策を進めるようです。 しかし、私は確信していません、行2940のxrandr.cは、crtc_infoが利用できないと仮定しています。私はまだ解決策と位置を得るために他の方法を欠場する。
#include <stdio.h> #include <X11/extensions/Xrandr.h> int main() { Display *disp; XRRScreenResources *screen; XRROutputInfo *info; XRRCrtcInfo *crtc_info; int iscres; int icrtc; disp = XOpenDisplay(0); screen = XRRGetScreenResources (disp, DefaultRootWindow(disp)); for (iscres = screen->noutput; iscres > 0;) { --iscres; info = XRRGetOutputInfo (disp, screen, screen->outputs[iscres]); if (info->connection == RR_Connected) { for (icrtc = info->ncrtc; icrtc > 0;) { --icrtc; crtc_info = XRRGetCrtcInfo (disp, screen, screen->crtcs[icrtc]); fprintf(stderr, "==> %dx%d+%dx%d\n", crtc_info->x, crtc_info->y, crtc_info->width, crtc_info->height); XRRFreeCrtcInfo(crtc_info); } } XRRFreeOutputInfo (info); } XRRFreeScreenResources(screen); return 0; }
こんにちは、私は思っていたライブラリをリンクする-lX11 -lXrandrでコンパイルしますか?または、より良い方法を見つけたら? – yatg
私はxrandrが利用できない場合にこれとxinermaの組み合わせを使用すると考えました:http://stackoverflow.com/a/836376/5062337 – yatg