Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

#14 oyranos-monitor and xinerama VCGT second monitor not working

closed-fixed
5
2008-12-19
2008-05-01
Hal Engel
No

After more testing I am finding that invoking oyranos-monitor does not update the video card gamma table correctly for the non-primary monitor on my dual monitor xinerama system. That is the primary monitor will get the corrected gamma table but the second monitor does not.

$ xprop -root | grep EDID
$ xprop -root | grep ICC_PROFILE

Shows that both the EDID and ICC_PROFILE atoms are correctly set for both monitors after running oyranos-monitor. So the only issue is with correctly setting the video card gamma table(s). Using dispwin or xcalib directly to load the gamma table for the second monitor using the same profile works.

I am using the last version of oyranos 0.1.8.x from the downloads area. If there is any specific tests or information you would like please let me know.

Discussion

  • Hal Engel
    Hal Engel
    2008-05-01

    Logged In: YES
    user_id=1052244
    Originator: YES

    I just downloaded, built and tested oyranos git. It has the same issue.

     
    • assigned_to: nobody --> beku
     
  • Logged In: YES
    user_id=634841
    Originator: NO

    Do you have setup two real screens or just one big screen with Xinerama enabled?
    As the XVidMode API works on screens there is only updatig over different screens
    possible.

     
  • Logged In: NO

    There are two screens. I can run xcalib against the second screen and it updates the LUT. So it appears to me that oyranos-monitor is incorrectly calling xcalib (IE. passing something that is not correct) when it tries to update the LUT on the second device. I have git from a few days ago installed and I will test it again to make sure the problem still exists.

    In order to create calibrations, using either LProf or ArgyllCMS, for the second screen the second screen must be accessible and have a working XVidMode API. In addition making the Qt call QDesktopWidget::numScreens() on this machine returns 2 and making calls to QDesktopWidget::screenGeometry() for screens 0 and 1 returns different geometries. So I know for sure I am not dealing with a single virtual screen.

    A long time ago I was using nvidia twinview and it would present the screens as a single virtual screen. With twinview calling QDesktopWidget::numScreens would return 1 and updating the LUT and other XVidMode API calls would only work for the primary device (IE. trying to do so for the second device would result in X11 error messages). A long time ago (perhaps two years ago) I changed the configuration to Xinerama (by by twinview) which has two physical screens that can both be accessed via XVidMode API including making LUT updates.

     
  • Logged In: NO

    There are two screens. I can run xcalib against the second screen and it updates the LUT. So it appears to me that oyranos-monitor is incorrectly calling xcalib (IE. passing something that is not correct) when it tries to update the LUT on the second device. I have git from a few days ago installed and I will test it again to make sure the problem still exists.

    In order to create calibrations, using either LProf or ArgyllCMS, for the second screen the second screen must be accessible and have a working XVidMode API. In addition making the Qt call QDesktopWidget::numScreens() on this machine returns 2 and making calls to QDesktopWidget::screenGeometry() for screens 0 and 1 returns different geometries. So I know for sure I am not dealing with a single virtual screen.

    A long time ago I was using nvidia twinview and it would present the screens as a single virtual screen. With twinview calling QDesktopWidget::numScreens would return 1 and updating the LUT and other XVidMode API calls would only work for the primary device (IE. trying to do so for the second device would result in X11 error messages). A long time ago (perhaps two years ago) I changed the configuration to Xinerama (by by twinview) which has two physical screens that can both be accessed via XVidMode API including making LUT updates.

     
  • Logged In: NO

    Just an update to let you know that I tested a copy from git that is about 3 days old at this point and it is still not setting the video card gamma table for the second monitor.

    I should add that not only does xcalib work on the second monitor when called from the command line but so does dispwin. In addition the video card gamma code in LProf works with both of my monitors. If I run a recent version of iccexamin it also shows that I have different VCGT's for each monitor.

     
  • Logged In: NO

    I had a look at the code where this is happening in oyranos_monitor.c in fuction oyActivateMonitorProfile_ at line 970.

    if(ScreenCount( display ) > 1 || oyMonitor_screen_( disp ) == 0)
    error = system(text);

    For the second monitor ScreenCount( display ) returns 1 and oyMonitor_screen_( disp ) also returns 1 so the if evaluates to false and the system() call is not executed. I changed this to:

    if(ScreenCount( display ) > 0 || oyMonitor_screen_( disp ) == 0)
    error = system(text);

    And it started working on my xinerama system. I am not sure if this is really correct but perhaps this is enough info for you to fix this bug.

    Hal

     
  • Logged In: YES
    user_id=634841
    Originator: NO

    I have included a check for the non real second screen case,
    where a monitor is only visible in Xinerama and not as
    screen. Hope this is more sensible to your configuration.
    Thanks for your investigation.

     
  • release v0.1.9 includes the fix

     
    • status: open --> closed-fixed