Difference between revisions of "Xorg RandR 1.2"

From ThinkWiki
Jump to: navigation, search
(Notes from xserver-xorg-video-intel.readme)
m (Questions: some answers)
Line 222: Line 222:
 
== Questions ==
 
== Questions ==
  
What if xrandr -q doesn't report multiple screens and both the LVDS and TMDS-1 are stuck in cloned mode?
+
1. What if xrandr -q doesn't report multiple screens and both the LVDS and TMDS-1 are stuck in cloned mode?
  
 
{{cmduser| xrandr -q }}
 
{{cmduser| xrandr -q }}
Line 238: Line 238:
  
  
Is the 2048x2048 a unfixable limitation for 945GM chipsets or can a BIOs patch help?
+
2 Is the 2048x2048 a unfixable limitation for 945GM chipsets or can a BIOs patch help?
 +
Yes this is practically unfixable for 945GM. As subsequent Intel chipsets do not have this problem it is unlikely that the work-arounds required in the intel driver will be implemented. See discussions on xorg mailing list.
  
What is meant by "to configure two non-ovelapping monitors of 1600x1200 and 1024x768 the only option is to stack them verticaly in the virtual pane."   
+
3 What is meant by "to configure two non-ovelapping monitors of 1600x1200 and 1024x768 the only option is to stack them verticaly in the virtual pane."   
 
By my math 1600+1024>2048 so does't this violate the 2048x2048 limitation?  What happens when the limitation is violated? (Error message, ignores setting, something else?)
 
By my math 1600+1024>2048 so does't this violate the 2048x2048 limitation?  What happens when the limitation is violated? (Error message, ignores setting, something else?)
 +
 +
1600 wide plus 1200 wide is 2800. Therefore if you want your external monitor to the right or left of the laptop screen and do not want windows on one screen to also appear in part on the other screen the total width of the virtual screen needs to be 2800. If the laptop screen is to the top or bottom of the extenal screen (move mouse off top/bottom of one screen to move to the other) then we need 1200 plus 768, so a virtual screen of 1968 x 1600 will do. The problem with this arrangement is to get the Gnome menu bar in a useable position.
 +
  
 
Shouldn't there be a way to get the version number of xrandr itself?  My ~# xrandr --version command reports "Server reports RandR version 1.2" but for me commands such as "xrandr --output LVDS --auto" return the usage and the -q option looks different.
 
Shouldn't there be a way to get the version number of xrandr itself?  My ~# xrandr --version command reports "Server reports RandR version 1.2" but for me commands such as "xrandr --output LVDS --auto" return the usage and the -q option looks different.
 
  
 
== References ==
 
== References ==

Revision as of 13:19, 27 August 2007

FIXME
This page will cover use of Xorg 7.3 with RandR version 1.2 based on testing the forthcoming Ubuntu 'Gutsy' (7.10) release with a Thinkpad R60e (Intel 946GM graphics chip). As the release stabilises so should this page transform from a lab notebook to a fully written-up howto.

Overview

X RandR is used to set the size, orientation and reflection of the screen display outputs.

xrandr is the command line interface to the RandR X extension. As usual with X good documentation is hard to find, to start somewhere try

   $ xrandr --help
   $ man xrandr
   $ man intel

xorg.conf

Start testing with a default configuration. Connect the external display to the VGA port, turn on that display, boot and run (as root)

   # dpkg-reconfigure -phigh xserver-xorg

The resulting /etc/X11/xorg.conf should include something like

   Section "Device"
       Identifier	"Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
       Driver		"intel"
       BusID		"PCI:0:2:0"
   EndSection
   Section "Monitor"
       Identifier	"Generic Monitor"
       Option		"DPMS"
   EndSection
   Section "Screen"
       Identifier	"Default Screen"
       Device		"Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller"
       Monitor		"Generic Monitor"
       DefaultDepth	24
   ...
       SubSection "Display"
           Depth		24
           Modes		"1600x1200" "1280x1024" "1024x768" "800x600" "640x480"
           # BUT ADD A VIRTUAL LINE
           Virtual              2048 2048
       EndSubSection
   EndSection
   Section "ServerLayout"
       Identifier	"Default Layout"
       Screen		"Default Screen"
       InputDevice	"Generic Keyboard"
       InputDevice	"Configured Mouse"
       InputDevice     "stylus"	"SendCoreEvents"
       InputDevice     "cursor"	"SendCoreEvents"
       InputDevice     "eraser"	"SendCoreEvents"
       InputDevice	"Synaptics Touchpad"
   EndSection

after creating a clean Xorg.conf restart X and logon

You will probably find you have a display only on the external VGA screen at its default max resolution.

Using $ xrandr

Open a terminal window to use the command line: 'Applications:Accessories:Terminal'

Hint:
First look at the 'help' and 'man' pages.
  $ xrandr --help
  $ man xrandr

To query what we have $ xrandr -v

   Server reports RandR version 1.2

$ xrandr -q

 Screen 0: minimum 320 x 200, current 1024 x 768, maximum 1600 x 1600
 VGA connected (normal left inverted right)
     1600x1200      60.0 +   59.9  
     1280x1024      75.0     59.9  
     1152x864       74.8  
     1024x768       75.1     60.0  
     800x600        75.0     60.3  
     640x480        75.0     60.0  
     720x400        70.1  
 LVDS connected 1024x768+0+0 (normal left inverted right) 304mm x 228mm
     1024x768       60.0*+   50.0  
     800x600        60.3  
     640x480        60.0     59.9  
 TV disconnected (normal left inverted right)

$ xrandr -v tells us more

$ xrandr --output LVDS --auto gets two screens but both at 1600x1200 cloned

$ xrandr --output LVDS --mode 1024x768 --output VGA --off gets laptop only at 1024x768

$ xrandr --output VGA --right-of LVDS --mode 1600x1200

   xrandr: screen cannot be larger than 1600x1600 (desired size 2624x1200)

$ xrandr --output VGA --mode 1600x1200 --pos 0x400 creates two screens with the laptop screen at bottom of the 1600x1600 window

$ xrandr --output LVDS --mode 1024x768 --pos 0x400 moves laptop screen to top of window, so both share same top line (which is where I prefer my menu bar)

So, the story so far

2007-07-25: xrandr enables dynamic resizing of screens, switching both external and laptop screens on and off, and the applications windows can be dragged from one screen to the other. None of this requires configuring anything special for /etc/X11/xorg.conf. Downside: the virtual screen is not big enough at at 1600x1600 to permit a 1024x768 laptop and a 1600x1200 external monitor screen to be used in a non-overlapped arrangement, something that is possible doing it the old way.

Reboot with VGA disconnected, 1024x768 ok but connecting Dell 1600FP does not detect modes above 1024x768, is this just a problem with this monitor? logoff, gdm now shows clone screen at 1600x1200. logon now only 1600x1200 on VGA and LVDS is off. from various mailing lists etc

2007-08-19: Add a Virtual xdim ydim to your Subsection Display, Depth 24 section just below the Modes line. Choose xdim and ydim so that the lagest non-overlapping configuration you wish to use fits. In my case this is: 1024x768 (LVDS) + 1280x1024 (VGA) => Virtual 2304 1024.

Restart X and run xrandr --output VGA --mode 1280x1024 --left-of LVDS.

2007-08-26 Ubuntu Gutsy Gibbon Tribe 5 release plus some subsequent updates.

The good news: a Graphical Configuration Tool, bad news: it dosn't work too well. If installing from a tribe 5 CD then this will be found in the menu: 'System: Administration: Screens and Graphics'. If you have been upgrading from earlier releases you may need to install from 'Applications: Add/Remove: System Tools'

Ubuntu 7.10t5 Screen Config

This provides a dialogue to set the default screen, and a secondary screen as either a mirror of screen 1 or an extended screen. At the moment this is far from stable and changing settings causes modifications to the xorg.conf that will cause X to fail. This issue is not confined to the Thinkpad R60e, testing with a Toshiba U300 produces similar results.

Notes from xserver-xorg-video-intel.readme

Known Limitations - No support for "zaphod mode" dualhead. This is the mode in which two Device sections are placed in the config file, and doesn't support DRI or many other features. Instead, only "MergedFB-style" dualhead is supported. - No support for X Screens larger than 2048 pixels in either direction before the 965. This reflects hardware limitations in the x direction on those older chips, and limits dualhead functionality. It may be possible to extend the limit vertically on these older chips. - i855 XV may cause hangs. This was present in the previous release, and no workaround is known. - SDVO TV-out cards not supported. This should be fixed in the next release. - Gray output with integrated TV-out and PAL TVs. - EXA support unstable on i845. - Some GM965 systems, such as the Thinkpad T61, probe the TV as being connected even when no output connector is available. This results in the gnome-panel issue noted below.


Why are there errors after applying 2:1.9.94-1ubuntu4 from https://launchpad.net/ubuntu/+source/xserver-xorg-video-intel/. xrandr -q now returns:

 X Error of failed request:  BadRequest (invalid request code or no such operation)
   Major opcode of failed request:  152 (RANDR)
   Minor opcode of failed request:  6 ()
   Serial number of failed request:  9
  Current serial number in output stream:  9


Common issues not caused by the driver - Font sizes (DPI) are wrong. Some displays incorrectly report their physical size, which is harmless on most OSes that always assume 96dpi displays. This can be fixed through quirks for specific monitors in the X Server, and the output of xrandr --prop along with a physical measurement of the screen size in a bug report against the server can help get that fixed. - gnome-panel is located in the middle of the screen. gnome-panel places itself within head #0's boundaries, which doesn't work well with a second head covering the same area as head #0 but larger. - Older resolution-changing applications have poor results in multihead systems. Previous extensions such as RandR 1.1 exposed only a single output to client programs, and those requests map poorly to multi-head systems. Currently, those requests map to just one of the outputs in the RandR 1.2 environment, and those applications need to be updated to RandR 1.2 API when available for better results.

Notes from various sources

Virtual size of 2048x2048 is the maximum for the Intel 945. So to configure two non-ovelapping monitors of 1600x1200 and 1024x768 the only option is to stack them verticaly in the virtual pane.

updated Xorg.conf should:

drop dual Device/Screen/Monitor sections from

drop MonitorLayout option and Screen lines from the remaining Device section

drop dual Screen lines from the ServerLayout section

drop RightOf/LeftOf indication to the remaining Screen line in ServerLayout section

add a "Virtual 2048 2048" line in SubSection "Display" to create a large virtual screen where physical monitor will be placed (note that boards < i945 will disable DRI if you use more than 2048 in one direction)

use xrandr --output VGA --right-of LVDS to place you VGA screen on the right of your internal LCD (see xrandr manpage for details)

FreeDesktop.org 2007-June 025469 FreeDesktop.org 2007-June 025484 FreeDesktop.org 2007-July 026340

the 3D engine has an 11 bit coordinate space at one point making it impossible to draw to areas beyond 2048x2048. At another point, it has a stride limit of 8192 bytes, so you can't even draw to a subset of a larger frame buffer.

One more bit in both of these registers would have solved the problem for pretty much any supportable monitor configuration (the chip can only support two single-channel DVI outputs at the most; 1920 is the widest size supported at single-channel speeds).

For multiple monitors, the driver could allocate multiple frame buffers and step through them one at a time with appropriate clipping. It would be icky, but could be made to work.

Of course, the latest hardware (965G/965GM) has plenty of coordinate space, which does tend to reduce the odds that someone will get excited enough to go fix the driver for older chips.

The Gnome menu bar lands on Xinerama Screen 0 at this point, which isn't currently something that you can set through RandR. On Intel the allocation to Screen 0 is determined by CRTC order and LVDS only runs on screen 1.

FreeDesktop.org 2007-June 026053


 VGA    Analog VGA output
 LVDS   Laptop panel
 TV     Integrated TV output
 TMDS-1 First DVI SDVO output
 TMDS-2 Second DVI SDVO output
 SDVO and DVO TV outputs are not supported by the driver at this time.

Questions

1. What if xrandr -q doesn't report multiple screens and both the LVDS and TMDS-1 are stuck in cloned mode?

$ xrandr -q

SZ:    Pixels          Physical       Refresh
0   1400 x 1050   ( 520mm x 520mm )  *60  
1   1024 x 768    ( 520mm x 520mm )   60  
2    800 x 600    ( 520mm x 520mm )   60  
3    640 x 480    ( 520mm x 520mm )   60  
4   2048 x 2048   ( 520mm x 520mm )   60  

Current rotation - normal Current reflection - none Rotations possible - normal left inverted right Reflections possible - none


2 Is the 2048x2048 a unfixable limitation for 945GM chipsets or can a BIOs patch help?

Yes this is practically unfixable for 945GM. As subsequent Intel chipsets do not have this problem it is unlikely that the work-arounds required in the intel driver will be implemented. See discussions on xorg mailing list.

3 What is meant by "to configure two non-ovelapping monitors of 1600x1200 and 1024x768 the only option is to stack them verticaly in the virtual pane." By my math 1600+1024>2048 so does't this violate the 2048x2048 limitation? What happens when the limitation is violated? (Error message, ignores setting, something else?)

1600 wide plus 1200 wide is 2800. Therefore if you want your external monitor to the right or left of the laptop screen and do not want windows on one screen to also appear in part on the other screen the total width of the virtual screen needs to be 2800. If the laptop screen is to the top or bottom of the extenal screen (move mouse off top/bottom of one screen to move to the other) then we need 1200 plus 768, so a virtual screen of 1968 x 1600 will do. The problem with this arrangement is to get the Gnome menu bar in a useable position.


Shouldn't there be a way to get the version number of xrandr itself? My ~# xrandr --version command reports "Server reports RandR version 1.2" but for me commands such as "xrandr --output LVDS --auto" return the usage and the -q option looks different.

References

Version 7.10 (Gutsy) of Ubuntu includes support for Xorg 7.3 with RandR 1.2 Xorg 7.3

For versions of Ubuntu prior to 7.10 see Installing Ubuntu on a ThinkPad R60e for an Xorg.conf suitable for use with more than one screen

RandR extension is currently under development see: Xorg Developer Conference 2007 and X RandR v1.2.


FreeDesktop.org mailing list FreeDesktop.org Xorg archive


Useful page to supplement the minimal documentation How video cards work

xserver-xorg-core and xserver-xorg-video-intel might cause some trouble but also brings nice features.

Seamless Monitor Hotplugging with X Windows

Ubuntu source

Linux Graphics Drivers from Intel

ATI Radeon randr-1.2 git tree

blog post with xrandr-1.2 commands and photos. Narrative is in polish.