Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: FluffyMan2000 от Март 03, 2013, 11:36



Название: [РЕШЕНО] libxrandr: изменение параметров подключенных мониторов
Отправлено: FluffyMan2000 от Март 03, 2013, 11:36
Пишу приложение на C++/Qt со следующим функционалом: установить разрешение и ориентацию для монитора. все ок работает, написал. однако стала задача расширить функционал и включить поддержку двух мониторов.
что именно надо:
1) определить подключенные мониторы
2) установить для каждого свое разрешение
3) установить для каждого свою ориентацию

подскажите как это сделать


Название: Re: libxrandr: изменение параметров подключенных мониторов
Отправлено: Alex Custov от Март 04, 2013, 22:08
я когда-то давно разбирался с xrandr, но не помню совершенно ничего. Помню только, что исходники утилиты xrandr значительно помогают, если разобраться в этой вермишели.


Название: Re: libxrandr: изменение параметров подключенных мониторов
Отправлено: FluffyMan2000 от Март 05, 2013, 08:57
я вот исходник нашел. но разбираюсь в нем уже третий день. абсолютно ничего пока не понимаю. единственное, чего добился, так это вывести имена подключенных мониторов таким образом
Код:
     dpy = XOpenDisplay(0);
    root = RootWindow(dpy, 0);
    conf = XRRGetScreenInfo(dpy, root);

    XRRScreenResources *sr = XRRGetScreenResourcesCurrent(dpy, root);
    RROutput *outputs = sr->outputs;

    for (int i = 0; i < sr->noutput; i++)
    {
        XRROutputInfo *xroi = XRRGetOutputInfo(dpy, sr, outputs[i]);

        //Screen *sod = ScreenOfDisplay(dpy, 0); // virtual screen structure

        qDebug() << xroi->name << " " << xroi->mm_width << " " << xroi->mm_height;
    }

    XCloseDisplay(dpy);

может быть у Вас проявятся флэшбэки и Вы вспомните чтото? :)

Исходник прикрепил. посмотрите пожалуйста. очень помощь нужна в этом коде разобраться. я в СИ не разбираюсь, как и в процедурном программировании.

свою программу, работающую с одним монитором, написал по этому мануалу http://www.opengl.org/wiki/Programming_OpenGL_in_Linux:_Changing_the_Screen_Resolution (http://www.opengl.org/wiki/Programming_OpenGL_in_Linux:_Changing_the_Screen_Resolution)


Название: Re: libxrandr: изменение параметров подключенных мониторов
Отправлено: FluffyMan2000 от Март 06, 2013, 11:20
решено. изменить положение, ориентацию и режим (из списка определившихся разрешений) можно так:
Код:
XRROutputInfo *output_first_info = XRRGetOutputInfo(dpy, sr, sr->outputs[X]);
XRRSetCrtcConfig(dpy, sr, output_first_info->crtc, CurrentTime, XM, YM, sr->modes[M].id, R, &sr->outputs[X], 1);

где X - номер монитора, параметры которого меняем
XM, YM - координаты расположения в виртуальном экране
M - номер режима

получить список всех известных режимов для каждого из подключенных мониторов можно так:
Код:
        int jj = 0;
        for (int i = 0; i < sr->noutput; i++)
        {
            XRROutputInfo *output_info = XRRGetOutputInfo (dpy, sr, sr->outputs[i]);
            XRRCrtcInfo *crtc_info = XRRGetCrtcInfo(dpy, sr, output_info->crtc);

            for (int j = jj; j < output_info->nmode; j++)
            {
                qDebug() << output_info->name << sr->modes[j].name << j;

                jj++;
            }
        }