Russian Qt Forum
Ноябрь 25, 2024, 04:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] libxrandr: изменение параметров подключенных мониторов  (Прочитано 3580 раз)
FluffyMan2000
Гость
« : Март 03, 2013, 11:36 »

Пишу приложение на C++/Qt со следующим функционалом: установить разрешение и ориентацию для монитора. все ок работает, написал. однако стала задача расширить функционал и включить поддержку двух мониторов.
что именно надо:
1) определить подключенные мониторы
2) установить для каждого свое разрешение
3) установить для каждого свою ориентацию

подскажите как это сделать
« Последнее редактирование: Март 06, 2013, 11:20 от FluffyMan2000 » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #1 : Март 04, 2013, 22:08 »

я когда-то давно разбирался с xrandr, но не помню совершенно ничего. Помню только, что исходники утилиты xrandr значительно помогают, если разобраться в этой вермишели.
Записан
FluffyMan2000
Гость
« Ответ #2 : Март 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
« Последнее редактирование: Март 05, 2013, 10:00 от FluffyMan2000 » Записан
FluffyMan2000
Гость
« Ответ #3 : Март 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++;
            }
        }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.098 секунд. Запросов: 22.