randrproto.txt revision ea1d6981
117ca54c3Smrg The X Resize, Rotate and Reflect Extension 217ca54c3Smrg Version 1.6.0 317ca54c3Smrg 2017-04-01 417ca54c3Smrg 517ca54c3Smrg Jim Gettys 617ca54c3Smrg Jim.Gettys@hp.com 717ca54c3Smrg Cambridge Research Laboratory 817ca54c3Smrg HP Labs 917ca54c3Smrg Hewlett Packard Company 1017ca54c3Smrg 1117ca54c3Smrg Keith Packard 1217ca54c3Smrg keithp@keithp.com 1317ca54c3Smrg 1417ca54c3Smrg1. Introduction 1517ca54c3Smrg 1617ca54c3SmrgThe X Resize, Rotate and Reflect Extension, called RandR for short, 1717ca54c3Smrgbrings the ability to resize, rotate and reflect the root window of a 1817ca54c3Smrgscreen. It is based on the X Resize and Rotate Extension as specified 1917ca54c3Smrgin the Proceedings of the 2001 Usenix Technical Conference [RANDR]. 2017ca54c3Smrg 2117ca54c3SmrgRandR as implemented and integrated into the X server differs in 2217ca54c3Smrgone substantial fashion from the design discussed in that paper: that 2317ca54c3Smrgis, RandR 1.0 does not implement the depth switching described in that 2417ca54c3Smrgdocument, and the support described for that in the protocol in that 2517ca54c3Smrgdocument and in the implementation has been removed from the 2617ca54c3Smrgprotocol described here, as it has been overtaken by events. 2717ca54c3Smrg 2817ca54c3SmrgThese events include: 2917ca54c3Smrg ► Modern toolkits (in this case, GTK+ 2.x) have progressed to the point 3017ca54c3Smrg of implementing migration between screens of arbitrary depths 3117ca54c3Smrg ► The continued advance of Moore's law has made limited amounts of VRAM 3217ca54c3Smrg less of an issue, reducing the pressure to implement depth switching 3317ca54c3Smrg on laptops or desktop systems 3417ca54c3Smrg ► The continued decline of legacy toolkits whose design would have 3517ca54c3Smrg required depth switching to support migration 3617ca54c3Smrg ► The lack of depth switching implementation experience in the 3717ca54c3Smrg intervening time, due to events beyond our control 3817ca54c3Smrg 3917ca54c3SmrgAdditionally, the requirement to support depth switching might 4017ca54c3Smrgcomplicate other re-engineering of the device independent part of the 4117ca54c3SmrgX server that is currently being contemplated. 4217ca54c3Smrg 4317ca54c3SmrgRather than further delaying RandR's widespread deployment for a feature 4417ca54c3Smrglong wanted by the community (resizing of screens, particularly on laptops), 4517ca54c3Smrgor the deployment of a protocol design that might be flawed due to lack of 4617ca54c3Smrgimplementation experience, we decided to remove depth switching from the 4717ca54c3Smrgprotocol. It may be implemented at a later time if resources and 4817ca54c3Smrginterests permit as a revision to the protocol described here, which will 4917ca54c3Smrgremain a stable base for applications. The protocol described here has been 5017ca54c3Smrgimplemented in the main X.org server, and more fully in the hw/kdrive 5117ca54c3Smrgimplementation in the distribution, which fully implements resizing, 5217ca54c3Smrgrotation and reflection. 5317ca54c3Smrg 5417ca54c3Smrg1.2 Introduction to version 1.2 of the extension 5517ca54c3Smrg 5617ca54c3SmrgOne of the significant limitations found in version 1.1 of the RandR 5717ca54c3Smrgprotocol was the inability to deal with the Xinerama model where multiple 5817ca54c3Smrgmonitors display portions of a common underlying screen. In this environment, 5917ca54c3Smrgzero or more video outputs are associated with each CRT controller which 6017ca54c3Smrgdefines both a set of video timings and a 'viewport' within the larger 6117ca54c3Smrgscreen. This viewport is independent of the overall size of the screen, and 6217ca54c3Smrgmay be located anywhere within the screen. 6317ca54c3Smrg 6417ca54c3SmrgThe effect is to decouple the reported size of the screen from the size 6517ca54c3Smrgpresented by each video output, and to permit multiple outputs to present 6617ca54c3Smrginformation for a single screen. 6717ca54c3Smrg 6817ca54c3SmrgTo extend RandR for this model, we separate out the output, CRTC and screen 6917ca54c3Smrgconfiguration information and permit them to be configured separately. For 7017ca54c3Smrgcompatibility with the 1.1 version of the protocol, we make the 1.1 requests 7117ca54c3Smrgsimultaneously affect both the screen and the (presumably sole) CRTC and 7217ca54c3Smrgoutput. The set of available outputs are presented with UTF-8 encoded names 7317ca54c3Smrgand may be connected to CRTCs as permitted by the underlying hardware. CRTC 7417ca54c3Smrgconfiguration is now done with full mode information instead of just size 7517ca54c3Smrgand refresh rate, and these modes have names. These names also use UTF-8 7617ca54c3Smrgencoding. New modes may also be added by the user. 7717ca54c3Smrg 7817ca54c3SmrgAdditional requests and events are provided for this new functionality. 7917ca54c3Smrg 8017ca54c3Smrg ┌────────────────────────────────┬──────────┐ 8117ca54c3Smrg ┏━━━━━━━┳───────────────┐ ╔════════╗ ╔════════╗ 8217ca54c3Smrg ┃ 1 ┃ │ ║ A ║ ║ B ║ 8317ca54c3Smrg ┃ ┏━━━╋━━━━━━━━━━━━━━━┫ ║ ║ ║ ║ 8417ca54c3Smrg ┣━━━╋━━━┛ ┃ ╚════════╝ ╚════════╝ 8517ca54c3Smrg │ ┃ 2 ┃─────────────────┐ 8617ca54c3Smrg │ ┃ ┃ ╔═══════════════════╗ 8717ca54c3Smrg │ ┃ ┃ ║ ║ 8817ca54c3Smrg │ ┗━━━━━━━━━━━━━━━━━━━┫ ║ C ║ 8917ca54c3Smrg └───────────────────────┘ ║ ║ 9017ca54c3Smrg ┌──────┐ ┏━━━━┓ ╔══════╗ ║ ║ 9117ca54c3Smrg │screen│ ┃CRTC┃ ║output║ ╚═══════════════════╝ 9217ca54c3Smrg └──────┘ ┗━━━━┛ ╚══════╝ 9317ca54c3Smrg 9417ca54c3SmrgIn this picture, the screen is covered (incompletely) by two CRTCs. CRTC1 9517ca54c3Smrgis connected to two outputs, A and B. CRTC2 is connected to output C. 9617ca54c3SmrgOutputs A and B will present exactly the same region of the screen using 9717ca54c3Smrgthe same mode line. Output C will present a different (larger) region of 9817ca54c3Smrgthe screen using a different mode line. 9917ca54c3Smrg 10017ca54c3SmrgRandR provides information about each available CRTC and output; the 10117ca54c3Smrgconnection between CRTC and output is under application control, although 10217ca54c3Smrgthe hardware will probably impose restrictions on the possible 10317ca54c3Smrgconfigurations. The protocol doesn't try to describe these restrictions, 10417ca54c3Smrginstead it provides a mechanism to find out what combinations are supported. 10517ca54c3Smrg 10617ca54c3Smrg1.3 Introduction to version 1.3 of the extension 10717ca54c3Smrg 10817ca54c3SmrgVersion 1.3 builds on the changes made with version 1.2 and adds some new 10917ca54c3Smrgcapabilities without fundamentally changing the extension again. The 11017ca54c3Smrgfollowing features are added in this version: 11117ca54c3Smrg 11217ca54c3Smrg • Projective Transforms. The implementation work for general rotation 11317ca54c3Smrg support made it trivial to add full projective transformations. These 11417ca54c3Smrg can be used to scale the screen up/down as well as perform projector 11517ca54c3Smrg keystone correct or other effects. 11617ca54c3Smrg 11717ca54c3Smrg • Panning. It was removed with RandR 1.2 because the old semantics didn't 11817ca54c3Smrg fit any longer. With RandR 1.3 panning can be specified per crtc. 11917ca54c3Smrg 12017ca54c3Smrg1.4 Introduction to version 1.4 of the extension 12117ca54c3Smrg 12217ca54c3SmrgVersion 1.4 adds an optional Border property. 12317ca54c3Smrg 12417ca54c3Smrg • An optional Border property. This property allows a client to 12517ca54c3Smrg specify that the viewport of the CRTC is smaller than the active 12617ca54c3Smrg display region described its mode. This is useful, for example, 12717ca54c3Smrg for compensating for the overscan behavior of certain 12817ca54c3Smrg televisions. 12917ca54c3Smrg 13017ca54c3SmrgVersion 1.4 adds a new object called a provider object. A provider object 13117ca54c3Smrgrepresents a GPU or virtual device providing services to the X server. 13217ca54c3SmrgProviders have a set of abilities and a set of possible roles. 13317ca54c3Smrg 13417ca54c3SmrgProvider objects are used to control multi-GPU systems. Provider roles can 13517ca54c3Smrgbe dynamically configured to provide support for: 13617ca54c3Smrg 13717ca54c3Smrg 1) Output slaving: plug in a USB device, but have its output rendered 13817ca54c3Smrg using the main GPU. On some dual-GPU laptops, the second GPU isn't 13917ca54c3Smrg connected to the LVDS panel, so we need to use the first GPU as an output 14017ca54c3Smrg slave for the second GPU. 14117ca54c3Smrg 14217ca54c3Smrg 2) offload - For dual-GPU laptops, allow direct rendered applications to be run 14317ca54c3Smrg on the second GPU and display on the first GPU. 14417ca54c3Smrg 14517ca54c3Smrg 3) GPU switching - Allow switching between two GPUs as the main screen 14617ca54c3Smrg renderer. 14717ca54c3Smrg 14817ca54c3Smrg 4) multiple GPU rendering - This replaces Xinerama. 14917ca54c3Smrg 15017ca54c3Smrg1.5. Introduction to version 1.5 of the extension 15117ca54c3Smrg 15217ca54c3SmrgVersion 1.5 adds an optional TILE property to outputs. 15317ca54c3Smrg 15417ca54c3Smrg • An optional TILE property. 15517ca54c3Smrg This property is used to denote individual tiles in a tiled monitor 15617ca54c3Smrg configuration, as exposed via DisplayID v1.3. 15717ca54c3Smrg 15817ca54c3SmrgVersion 1.5 adds monitors 15917ca54c3Smrg 16017ca54c3Smrg • A 'Monitor' is a rectangular subset of the screen which represents 16117ca54c3Smrg a coherent collection of pixels presented to the user. 16217ca54c3Smrg 16317ca54c3Smrg • Each Monitor is associated with a list of outputs (which may be 16417ca54c3Smrg empty). 16517ca54c3Smrg 16617ca54c3Smrg • When clients define monitors, the associated outputs are removed from 16717ca54c3Smrg existing Monitors. If removing the output causes the list for that 16817ca54c3Smrg monitor to become empty, that monitor will be deleted. 16917ca54c3Smrg 17017ca54c3Smrg • For active CRTCs that have no output associated with any 17117ca54c3Smrg client-defined Monitor, one server-defined monitor will 17217ca54c3Smrg automatically be defined of the first Output associated with them. 17317ca54c3Smrg 17417ca54c3Smrg • When defining a monitor, setting the geometry to all zeros will 17517ca54c3Smrg cause that monitor to dynamically track the bounding box of the 17617ca54c3Smrg active outputs associated with them 17717ca54c3Smrg 17817ca54c3SmrgThis new object separates the physical configuration of the hardware 17917ca54c3Smrgfrom the logical subsets of the screen that applications should 18017ca54c3Smrgconsider as single viewable areas. 18117ca54c3Smrg 18217ca54c3Smrg1.5.1. Relationship between Monitors and Xinerama 18317ca54c3Smrg 18417ca54c3SmrgXinerama's information now comes from the Monitors instead of directly 18517ca54c3Smrgfrom the CRTCs. The Monitor marked as Primary will be listed first. 18617ca54c3Smrg 18717ca54c3Smrg1.5.2. Clarification of Output lifetimes 18817ca54c3Smrg 18917ca54c3SmrgWith dynamic connectors being a possibility with the introduction of 19017ca54c3SmrgDisplayPort multistream (MST), a lot of RandR clients can't handle the 19117ca54c3SmrgXID BadMatch when a RandR output disappears. This is to clarify that 19217ca54c3Smrggoing forward the X server will not remove outputs dynamically, 19317ca54c3Smrgjust mark them as disconnected. 19417ca54c3Smrg 19517ca54c3Smrg1.6. Introduction to version 1.6 of the extension 19617ca54c3Smrg 19717ca54c3SmrgVersion 1.6 adds resource leasing and non desktop output management. 19817ca54c3Smrg 19917ca54c3Smrg • A “Lease” is a collection of crtcs and outputs which are made 20017ca54c3Smrg available to a client for direct access via kernel KMS and DRM 20117ca54c3Smrg APIs. This is done by passing a suitable file descriptor back to 20217ca54c3Smrg the client which has access to those resources. While leased, those 20317ca54c3Smrg resources aren't used by the X server. 20417ca54c3Smrg 20517ca54c3Smrg • A “non-desktop” output is a device which should not normally be 20617ca54c3Smrg considered as part of the desktop environment. Head-mounted 20717ca54c3Smrg displays and the Apple "Touch Bar" are examples of such 20817ca54c3Smrg devices. A desktop environment should be able to discover which 20917ca54c3Smrg outputs are connected to such devices and, by default, not present 21017ca54c3Smrg normal desktop applications on them. This is done by having 21117ca54c3Smrg RRGetOutputInfo report such devices as Disconnected while reporting 21217ca54c3Smrg all other information about the device correctly. 21317ca54c3Smrg 21417ca54c3Smrg1.99 Acknowledgments 21517ca54c3Smrg 21617ca54c3SmrgOur thanks to the contributors to the design found on the xpert mailing 21717ca54c3Smrglist, in particular: 21817ca54c3Smrg 21917ca54c3SmrgAlan Hourihane for work on the early implementation 22017ca54c3SmrgAndrew C. Aitchison for help with the XFree86 DDX implementation 22117ca54c3SmrgAndy Ritger for early questions about how mergefb/Xinerama work with RandR 22217ca54c3SmrgCarl Worth for editing the specification and Usenix paper 22317ca54c3SmrgDavid Dawes for XFree86 DDX integration work 22417ca54c3SmrgThomas Winischhofer for the hardware-accelerated SiS rotation implementation 22517ca54c3SmrgMatthew Tippett and Kevin Martin for splitting outputs and CRTCs to more 22617ca54c3Smrgfully expose what video hardware can do 22717ca54c3SmrgDave Airlie for the 1.4.0 protocol changes and for working through the 22817ca54c3Smrgimplications of MST monitors and encouraging the introduction of the 22917ca54c3Smrg'Monitor' concept. 23017ca54c3Smrg 23117ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 23217ca54c3Smrg 23317ca54c3Smrg2. Screen change model 23417ca54c3Smrg 23517ca54c3SmrgScreens may change dynamically, either under control of this extension, or 23617ca54c3Smrgdue to external events. Examples include: monitors being swapped, pressing a 23717ca54c3Smrgbutton to switch from internal display to an external monitor on a laptop, 23817ca54c3Smrgor, eventually, the hotplug of a display card entirely on buses such as 23917ca54c3SmrgCardbus or Express Card which permit hot-swap (which will require other work 24017ca54c3Smrgin addition to this extension). 24117ca54c3Smrg 24217ca54c3SmrgSince the screen configuration is dynamic and asynchronous to the client and 24317ca54c3Smrgmay change at any time RandR provides mechanisms to ensure that your clients 24417ca54c3Smrgview is up to date with the configuration possibilities of the moment and 24517ca54c3Smrgenforces applications that wish to control the configuration to prove that 24617ca54c3Smrgtheir information is up to date before honoring requests to change the 24717ca54c3Smrgscreen configuration (by requiring a timestamp on the request). 24817ca54c3Smrg 24917ca54c3SmrgInterested applications are notified whenever the screen configuration 25017ca54c3Smrgchanges, providing the current size of the screen and subpixel order (see 25117ca54c3Smrgthe Render extension [RENDER]), to enable proper rendering of subpixel 25217ca54c3Smrgdecimated client text to continue, along with a time stamp of the 25317ca54c3Smrgconfiguration change. A client must refresh its knowledge of the screen 25417ca54c3Smrgconfiguration before attempting to change the configuration after a 25517ca54c3Smrgnotification, or the request will fail. 25617ca54c3Smrg 25717ca54c3SmrgTo avoid multiplicative explosion between orientation, reflection and sizes, 25817ca54c3Smrgthe sizes are only those sizes in the normal (0) rotation. 25917ca54c3Smrg 26017ca54c3SmrgRotation and reflection and how they interact can be confusing. In Randr, 26117ca54c3Smrgthe coordinate system is rotated in a counter-clockwise direction relative 26217ca54c3Smrgto the normal orientation. Reflection is along the window system coordinate 26317ca54c3Smrgsystem, not the physical screen X and Y axis, so that rotation and 26417ca54c3Smrgreflection do not interact. The other way to consider reflection is to is 26517ca54c3Smrgspecified in the "normal" orientation, before rotation, if you find the 26617ca54c3Smrgother way confusing. 26717ca54c3Smrg 26817ca54c3SmrgWe expect that most clients and toolkits will be oblivious to changes to the 26917ca54c3Smrgscreen structure, as they generally use the values in the connections Display 27017ca54c3Smrgstructure directly. By toolkits updating the values on the fly, we believe 27117ca54c3Smrgpop-up menus and other pop up windows will position themselves correctly in 27217ca54c3Smrgthe face of screen configuration changes (the issue is ensuring that pop-ups 27317ca54c3Smrgare visible on the reconfigured screen). 27417ca54c3Smrg 27517ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 27617ca54c3Smrg 27717ca54c3Smrg3. Data Types 27817ca54c3Smrg 27917ca54c3SmrgThe subpixel order and transform data types are shared with the Render 28017ca54c3Smrgextension, and are documented there. 28117ca54c3Smrg 28217ca54c3SmrgThe only datatype defined in the original extension is the screen size, 28317ca54c3Smrgdefined in the normal (0 degree) orientation. Several more are added 28417ca54c3Smrgin later revisions. 28517ca54c3Smrg 28617ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 28717ca54c3Smrg 28817ca54c3Smrg4. Errors 28917ca54c3Smrg 29017ca54c3SmrgErrors are sent using core X error reports. 29117ca54c3Smrg 29217ca54c3SmrgOutput 29317ca54c3Smrg A value for an OUTPUT argument does not name a defined OUTPUT. 29417ca54c3SmrgCRTC 29517ca54c3Smrg A value for a CRTC argument does not name a defined CRTC. 29617ca54c3SmrgMode 29717ca54c3Smrg A value for a MODE argument does not name a defined MODE. 29817ca54c3SmrgProvider 29917ca54c3Smrg A value for a PROVIDER argument does not name a defined PROVIDER. 30017ca54c3SmrgLease 30117ca54c3Smrg A value for a LEASE argument does not name a defined LEASE 30217ca54c3Smrg 30317ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 30417ca54c3Smrg 30517ca54c3Smrg5. Protocol Types 30617ca54c3Smrg 30717ca54c3SmrgRRCONFIGSTATUS { Success 30817ca54c3Smrg InvalidConfigTime 30917ca54c3Smrg InvalidTime 31017ca54c3Smrg Failed } 31117ca54c3Smrg 31217ca54c3Smrg A value of type RRCONFIGSTATUS returned when manipulating the output 31317ca54c3Smrg configuration or querying information from the server that has some 31417ca54c3Smrg time-dependency. 31517ca54c3Smrg 31617ca54c3Smrg InvalidConfigTime indicates that the supplied configuration 31717ca54c3Smrg timestamp does not match the current X server configuration 31817ca54c3Smrg timestamp. Usually this means that the output configuration has 31917ca54c3Smrg changed since the timestamp was received by the application. 32017ca54c3Smrg 32117ca54c3Smrg InvalidTime indicates that the supplied output reconfiguration time 32217ca54c3Smrg is earlier than the most recent output reconfiguration request. 32317ca54c3Smrg Generally this indicates that another application has reconfigured 32417ca54c3Smrg the output using a later timestamp. 32517ca54c3Smrg 32617ca54c3Smrg Failed is returned whenever the operation is unsuccessful for some 32717ca54c3Smrg other reason. This generally indicates that the requested output 32817ca54c3Smrg configuration is unsupported by the hardware. The goal is to make 32917ca54c3Smrg these limitations expressed by the protocol, but when that isn't 33017ca54c3Smrg possible it is correct to return this error value. If, as a 33117ca54c3Smrg implementer, you find this error code required, please submit the 33217ca54c3Smrg hardware constraints that exist so that a future version of the 33317ca54c3Smrg extension can correctly capture the configuration constraints in 33417ca54c3Smrg your system. 33517ca54c3Smrg 33617ca54c3SmrgROTATION { Rotate_0 33717ca54c3Smrg Rotate_90 33817ca54c3Smrg Rotate_180 33917ca54c3Smrg Rotate_270 34017ca54c3Smrg Reflect_X 34117ca54c3Smrg Reflect_Y } 34217ca54c3Smrg 34317ca54c3Smrg These values are used both to indicate a set of allowed rotations 34417ca54c3Smrg and reflections as well as to indicate a specific rotation and 34517ca54c3Smrg reflection combination. 34617ca54c3Smrg 34717ca54c3SmrgRRSELECTMASK { RRScreenChangeNotifyMask 34817ca54c3Smrg RRCrtcChangeNotifyMask (New in version 1.2) 34917ca54c3Smrg RROutputChangeNotifyMask (New in version 1.2) 35017ca54c3Smrg RROutputPropertyNotifyMask (New in version 1.2) 35117ca54c3Smrg RRProviderChangeNotifyMask (New in version 1.4) 35217ca54c3Smrg RRProviderPropertyNotifyMask (New in version 1.4) 35317ca54c3Smrg RRResourceChangeNotifyMask (New in version 1.4) } 35417ca54c3Smrg 35517ca54c3SmrgSIZEID { CARD16 } 35617ca54c3Smrg 35717ca54c3SmrgMODE { XID or None } 35817ca54c3Smrg 35917ca54c3SmrgCRTC { XID } 36017ca54c3Smrg 36117ca54c3SmrgOUTPUT { XID } 36217ca54c3Smrg 36317ca54c3SmrgCONNECTION { Connected, Disconnected, UnknownConnection } 36417ca54c3Smrg 36517ca54c3Smrg This value provides an indication of whether an output is actually 36617ca54c3Smrg connected to a monitor or other presentation device. 36717ca54c3Smrg 36817ca54c3Smrg 36917ca54c3SmrgSCREENSIZE [ widthInPixels, heightInPixels: CARD16 37017ca54c3Smrg widthInMillimeters, heightInMillimeters: CARD16 ] 37117ca54c3Smrg 37217ca54c3SmrgMODEFLAG { HSyncPositive 37317ca54c3Smrg HSyncNegative 37417ca54c3Smrg VSyncPositive 37517ca54c3Smrg VSyncNegative 37617ca54c3Smrg Interlace 37717ca54c3Smrg DoubleScan 37817ca54c3Smrg CSync 37917ca54c3Smrg CSyncPositive 38017ca54c3Smrg CSyncNegative 38117ca54c3Smrg HSkewPresent 38217ca54c3Smrg BCast 38317ca54c3Smrg PixelMultiplex 38417ca54c3Smrg DoubleClock 38517ca54c3Smrg ClockDivideBy2 } 38617ca54c3Smrg 38717ca54c3SmrgMODEINFO [ id: MODE 38817ca54c3Smrg name: STRING 38917ca54c3Smrg width, height: CARD16 39017ca54c3Smrg dotClock: CARD32 39117ca54c3Smrg hSyncStart, hSyncEnd, hTotal, hSkew: CARD16 39217ca54c3Smrg vSyncStart, vSyncEnd, vTotal: CARD16 39317ca54c3Smrg modeFlags: SETofMODEFLAG ] 39417ca54c3Smrg 39517ca54c3SmrgREFRESH [ rates: LISTofCARD16 ] 39617ca54c3Smrg 39717ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 39817ca54c3Smrg 39917ca54c3Smrg5.1 Data Types defined by the Render extension 40017ca54c3Smrg 40117ca54c3SmrgThese data types use the Render extension definitions; they are shown here 40217ca54c3Smrgonly for convenience: 40317ca54c3Smrg 40417ca54c3SmrgSUBPIXELORDER { SubPixelUnknown 40517ca54c3Smrg SubPixelHorizontalRGB 40617ca54c3Smrg SubPixelHorizontalBGR 40717ca54c3Smrg SubPixelVerticalRGB 40817ca54c3Smrg SubPixelVerticalBGR 40917ca54c3Smrg SubPixelNone } 41017ca54c3Smrg 41117ca54c3SmrgFIXED 32-bit value (top 16 are integer portion, bottom 16 are fraction) 41217ca54c3Smrg 41317ca54c3SmrgTRANSFORM [ 41417ca54c3Smrg p11, p12, p13: FIXED 41517ca54c3Smrg p21, p22, p23: FIXED 41617ca54c3Smrg p31, p32, p33: FIXED 41717ca54c3Smrg ] 41817ca54c3Smrg 41917ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 42017ca54c3Smrg 42117ca54c3Smrg5.5. Protocol Types added in version 1.4 of the extension 42217ca54c3Smrg 42317ca54c3SmrgPROVIDER { XID } 42417ca54c3Smrg 42517ca54c3SmrgPROVIDER_CAPS { SourceOutput, SinkOutput, SourceOffload, SinkOffload } 42617ca54c3Smrg Capabilities for this provider: 42717ca54c3Smrg SourceOutput: This device can source output buffers. 42817ca54c3Smrg SinkOutput: This device can sink output buffers. 42917ca54c3Smrg SourceOffload: This device can source offload buffers. 43017ca54c3Smrg SinkOffload: This device can sink offload buffers. 43117ca54c3Smrg 43217ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 43317ca54c3Smrg 43417ca54c3Smrg5.6. Protocol Types added in version 1.5 of the extension 43517ca54c3Smrg 43617ca54c3SmrgMONITORINFO { name: ATOM 43717ca54c3Smrg primary: BOOL 43817ca54c3Smrg automatic: BOOL 43917ca54c3Smrg x: INT16 44017ca54c3Smrg y: INT16 44117ca54c3Smrg width: CARD16 44217ca54c3Smrg height: CARD16 44317ca54c3Smrg width-in-millimeters: CARD32 44417ca54c3Smrg height-in-millimeters: CARD32 44517ca54c3Smrg outputs: LISTofOUTPUT } 44617ca54c3Smrg 44717ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 44817ca54c3Smrg 44917ca54c3Smrg5.7. Protocol Types added in version 1.6 of the extension 45017ca54c3Smrg 45117ca54c3SmrgLEASE { XID } 45217ca54c3Smrg 45317ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 45417ca54c3Smrg 45517ca54c3Smrg6. Extension Initialization 45617ca54c3Smrg 45717ca54c3SmrgThe name of this extension is "RANDR". 45817ca54c3Smrg 45917ca54c3Smrg┌─── 46017ca54c3Smrg RRQueryVersion 46117ca54c3Smrg client-major-version: CARD32 46217ca54c3Smrg client-minor-version: CARD32 46317ca54c3Smrg ▶ 46417ca54c3Smrg major-version: CARD32 46517ca54c3Smrg minor-version: CARD32 46617ca54c3Smrg└─── 46717ca54c3Smrg 46817ca54c3Smrg The client sends the highest supported version to the server 46917ca54c3Smrg and the server sends the highest version it supports, but no 47017ca54c3Smrg higher than the requested version. Major versions changes can 47117ca54c3Smrg introduce incompatibilities in existing functionality, minor 47217ca54c3Smrg version changes introduce only backward compatible changes. 47317ca54c3Smrg It is the clients responsibility to ensure that the server 47417ca54c3Smrg supports a version which is compatible with its expectations. 47517ca54c3Smrg 47617ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 47717ca54c3Smrg 47817ca54c3Smrg7. Extension Requests 47917ca54c3Smrg 48017ca54c3Smrg┌─── 48117ca54c3Smrg RRSelectInput 48217ca54c3Smrg window: WINDOW 48317ca54c3Smrg enable: SETofRRSELECTMASK 48417ca54c3Smrg└─── 48517ca54c3Smrg Errors: Window, Value 48617ca54c3Smrg 48717ca54c3Smrg If 'enable' is RRScreenChangeNotifyMask, RRScreenChangeNotify events 48817ca54c3Smrg will be sent when the screen configuration changes, either from 48917ca54c3Smrg this protocol extension, or due to detected external screen 49017ca54c3Smrg configuration changes. RRScreenChangeNotify may also be sent when 49117ca54c3Smrg this request executes if the screen configuration has changed since 49217ca54c3Smrg the client connected, to avoid race conditions. 49317ca54c3Smrg 49417ca54c3Smrg New for version 1.2: 49517ca54c3Smrg 49617ca54c3Smrg If 'enable' contains RRCrtcChangeNotifyMask, RRCrtcChangeNotify events 49717ca54c3Smrg will be sent when the configuration for a CRTC associated with the 49817ca54c3Smrg screen changes, either through this protocol extension or due to 49917ca54c3Smrg detected external changes. RRCrtcChangeNotify may also be sent when 50017ca54c3Smrg this request executes if the CRTC configuration has changed since 50117ca54c3Smrg the client connected, to avoid race conditions. 50217ca54c3Smrg 50317ca54c3Smrg If 'enable' contains RROutputChangeNotifyMask, RROutputChangeNotify 50417ca54c3Smrg events will be sent when the configuration for an output associated with 50517ca54c3Smrg the screen changes, either through this protocol extension or due to 50617ca54c3Smrg detected external changes. RROutputChangeNotify may also be sent when 50717ca54c3Smrg this request executes if the output configuration has changed since the 50817ca54c3Smrg client connected, to avoid race conditions. 50917ca54c3Smrg 51017ca54c3Smrg If 'enable' contains RROutputPropertyNotifyMask, 51117ca54c3Smrg RROutputPropertyNotify events will be sent when properties change on 51217ca54c3Smrg this output. 51317ca54c3Smrg 51417ca54c3Smrg New for version 1.4: 51517ca54c3Smrg 51617ca54c3Smrg If 'enable' contains RRProviderChangeNotifyMask, 51717ca54c3Smrg RRProviderChangeNotify events will be sent whenever the role for a 51817ca54c3Smrg provider object has changed. 51917ca54c3Smrg 52017ca54c3Smrg If 'enable' contains RRProviderPropertyNotifyMask, 52117ca54c3Smrg RRProviderPropertyNotify events will be sent when properties change 52217ca54c3Smrg on a provider object. 52317ca54c3Smrg 52417ca54c3Smrg If 'enable' contains RRResourceChangeNotifyMask, 52517ca54c3Smrg RRResourceChangeNotify events will be sent whenever the set of 52617ca54c3Smrg available RandR resources associated with the screen has changed. 52717ca54c3Smrg 52817ca54c3Smrg┌─── 52917ca54c3Smrg RRSetScreenConfig 53017ca54c3Smrg window: WINDOW 53117ca54c3Smrg timestamp: TIMESTAMP 53217ca54c3Smrg config-timestamp: TIMESTAMP 53317ca54c3Smrg size-id: SIZEID 53417ca54c3Smrg rotation: ROTATION 53517ca54c3Smrg rate: CARD16 53617ca54c3Smrg ▶ 53717ca54c3Smrg status: RRCONFIGSTATUS 53817ca54c3Smrg new-timestamp: TIMESTAMP 53917ca54c3Smrg config-timestamp: TIMESTAMP 54017ca54c3Smrg root: WINDOW 54117ca54c3Smrg subpixelOrder: SUBPIXELORDER 54217ca54c3Smrg└─── 54317ca54c3Smrg Errors: Value, Match 54417ca54c3Smrg 54517ca54c3Smrg If 'timestamp' is less than the time when the configuration was last 54617ca54c3Smrg successfully set, the request is ignored and InvalidTime returned in 54717ca54c3Smrg status. 54817ca54c3Smrg 54917ca54c3Smrg If 'config-timestamp' is not equal to when the server's screen 55017ca54c3Smrg configurations last changed, the request is ignored and 55117ca54c3Smrg InvalidConfigTime returned in status. This could occur if the 55217ca54c3Smrg screen changed since you last made a RRGetScreenInfo request, 55317ca54c3Smrg perhaps by a different piece of display hardware being installed. 55417ca54c3Smrg Rather than allowing an incorrect call to be executed based on stale 55517ca54c3Smrg data, the server will ignore the request. 55617ca54c3Smrg 55717ca54c3Smrg 'rate' contains the desired refresh rate. If it is zero, the server 55817ca54c3Smrg selects an appropriate rate. 55917ca54c3Smrg 56017ca54c3Smrg This request may fail for other indeterminate reasons, in which case 56117ca54c3Smrg 'status' will be set to Failed and no configuration change will be 56217ca54c3Smrg made. 56317ca54c3Smrg 56417ca54c3Smrg This request sets the screen to the specified size, rate, rotation 56517ca54c3Smrg and reflection. 56617ca54c3Smrg 56717ca54c3Smrg When this request succeeds, 'status' contains Success and the 56817ca54c3Smrg requested changes to configuration will have been made. 56917ca54c3Smrg 57017ca54c3Smrg 'new-time-stamp' contains the time at which this request was 57117ca54c3Smrg executed. 57217ca54c3Smrg 57317ca54c3Smrg 'config-timestamp' contains the time when the possible screen 57417ca54c3Smrg configurations were last changed. 57517ca54c3Smrg 57617ca54c3Smrg 'root' contains the root window for the screen indicated by the 57717ca54c3Smrg window. 57817ca54c3Smrg 57917ca54c3Smrg 'subpixelOrder' contains the resulting subpixel order of the screen 58017ca54c3Smrg to allow correct subpixel rendering. 58117ca54c3Smrg 58217ca54c3Smrg Value errors are generated when 'rotation', 'rate' or 'size-id' 58317ca54c3Smrg are invalid. 58417ca54c3Smrg 58517ca54c3Smrg┌─── 58617ca54c3Smrg RRGetScreenInfo 58717ca54c3Smrg window: WINDOW 58817ca54c3Smrg ▶ 58917ca54c3Smrg rotations: SETofROTATION 59017ca54c3Smrg root: WINDOW 59117ca54c3Smrg timestamp: TIMESTAMP 59217ca54c3Smrg config-timestamp: TIMESTAMP 59317ca54c3Smrg size-id: SIZEID 59417ca54c3Smrg rotation: ROTATION 59517ca54c3Smrg rate: CARD16 59617ca54c3Smrg sizes: LISTofSCREENSIZE 59717ca54c3Smrg refresh: LISTofREFRESH 59817ca54c3Smrg└─── 59917ca54c3Smrg 60017ca54c3Smrg Errors: Window 60117ca54c3Smrg 60217ca54c3Smrg RRGetScreenInfo returns information about the current and available 60317ca54c3Smrg configurations for the screen associated with 'window'. 60417ca54c3Smrg 60517ca54c3Smrg 'rotations' contains the set of rotations and reflections supported 60617ca54c3Smrg by the screen. 60717ca54c3Smrg 60817ca54c3Smrg 'root' is the root window of the screen. 60917ca54c3Smrg 61017ca54c3Smrg 'config-timestamp' indicates when the screen configuration 61117ca54c3Smrg information last changed: requests to set the screen will fail 61217ca54c3Smrg unless the timestamp indicates that the information the client 61317ca54c3Smrg is using is up to date, to ensure clients can be well behaved 61417ca54c3Smrg in the face of race conditions. 61517ca54c3Smrg 61617ca54c3Smrg 'timestamp' indicates when the configuration was last set. 61717ca54c3Smrg 61817ca54c3Smrg 'size-id' indicates which size is active. 61917ca54c3Smrg 62017ca54c3Smrg 'rate' is the current refresh rate. This is zero when the refresh 62117ca54c3Smrg rate is unknown or on devices for which refresh is not relevant. 62217ca54c3Smrg 62317ca54c3Smrg 'sizes' is the list of possible frame buffer sizes (at the normal 62417ca54c3Smrg orientation). Each size indicates both the linear physical size of 62517ca54c3Smrg the screen and the pixel size. 62617ca54c3Smrg 62717ca54c3Smrg 'refresh' is the list of refresh rates for each size. Each element 62817ca54c3Smrg of 'sizes' has a corresponding element in 'refresh'. An empty list 62917ca54c3Smrg indicates no known rates, or a device for which refresh is not 63017ca54c3Smrg relevant. 63117ca54c3Smrg 63217ca54c3Smrg The default size of the screen (the size that would become the 63317ca54c3Smrg current size when the server resets) is the first size in the 63417ca54c3Smrg list. 63517ca54c3Smrg 63617ca54c3Smrg7.1. Extension Requests added in version 1.2 of the extension 63717ca54c3Smrg 63817ca54c3SmrgAs introduced above, version 1.2 of the extension splits the screen size 63917ca54c3Smrgfrom the crtc and output configuration, permitting the subset of the screen 64017ca54c3Smrgpresented by multiple outputs to be configured. As a separate notion, the 64117ca54c3Smrgsize of the screen itself may be arbitrarily configured within a defined 64217ca54c3Smrgrange. As crtcs and outputs are added and removed from the system, the set 64317ca54c3Smrgreturned by the extension will change so that applications can detect 64417ca54c3Smrgdynamic changes in the display environment. 64517ca54c3Smrg 64617ca54c3Smrg┌─── 64717ca54c3Smrg RRGetScreenSizeRange 64817ca54c3Smrg window: WINDOW 64917ca54c3Smrg ▶ 65017ca54c3Smrg CARD16 minWidth, minHeight 65117ca54c3Smrg CARD16 maxWidth, maxHeight 65217ca54c3Smrg└─── 65317ca54c3Smrg Errors: Window 65417ca54c3Smrg 65517ca54c3Smrg Returns the range of possible screen sizes. The screen may be set to 65617ca54c3Smrg any size within this range. 65717ca54c3Smrg 65817ca54c3Smrg┌─── 65917ca54c3Smrg RRSetScreenSize 66017ca54c3Smrg window: WINDOW 66117ca54c3Smrg width: CARD16 66217ca54c3Smrg height: CARD16 66317ca54c3Smrg width-in-millimeters: CARD32 66417ca54c3Smrg height-in-millimeters: CARD32 66517ca54c3Smrg└─── 66617ca54c3Smrg Errors: Window, Match, Value 66717ca54c3Smrg 66817ca54c3Smrg Sets the screen to the specified size. 'width' and 'height' must be 66917ca54c3Smrg within the range allowed by GetScreenSizeRanges, otherwise a Value 67017ca54c3Smrg error results. All active monitors must be configured to display a 67117ca54c3Smrg subset of the specified size, else a Match error results. 67217ca54c3Smrg 67317ca54c3Smrg 'width-in-millimeters' and 'height-in-millimeters' can be set to 67417ca54c3Smrg reflect the physical size of the screen reported both through this 67517ca54c3Smrg extension and the core protocol. They must be non-zero, or Value 67617ca54c3Smrg error results. 67717ca54c3Smrg 67817ca54c3Smrg If panning is enabled, the width and height of the panning and the 67917ca54c3Smrg tracking areas are adapted to the new size and clamped afterwards. 68017ca54c3Smrg Disabled panning axes remain disabled. 68117ca54c3Smrg Panning borders are disabled if their requirements are no longer met 68217ca54c3Smrg (see RRSetPanning). 68317ca54c3Smrg 68417ca54c3Smrg┌─── 68517ca54c3Smrg RRGetScreenResources 68617ca54c3Smrg window: WINDOW 68717ca54c3Smrg ▶ 68817ca54c3Smrg timestamp: TIMESTAMP 68917ca54c3Smrg config-timestamp: TIMESTAMP 69017ca54c3Smrg crtcs: LISTofCRTC 69117ca54c3Smrg outputs: LISTofOUTPUT 69217ca54c3Smrg modes: LISTofMODEINFO 69317ca54c3Smrg└─── 69417ca54c3Smrg Errors: Window 69517ca54c3Smrg 69617ca54c3Smrg RRGetScreenResources returns the list of outputs and crtcs connected 69717ca54c3Smrg to the screen associated with 'window'. 69817ca54c3Smrg 69917ca54c3Smrg 'timestamp' indicates when the configuration was last set. 70017ca54c3Smrg 70117ca54c3Smrg 'config-timestamp' indicates when the configuration information last 70217ca54c3Smrg changed. Requests to configure the output will fail unless the 70317ca54c3Smrg timestamp indicates that the information the client is using is up 70417ca54c3Smrg to date, to ensure clients can be well behaved in the face of race 70517ca54c3Smrg conditions. 70617ca54c3Smrg 70717ca54c3Smrg 'crtcs' contains the list of CRTCs associated with the screen. 70817ca54c3Smrg 70917ca54c3Smrg 'outputs' contains the list of outputs associated with the screen. 71017ca54c3Smrg 71117ca54c3Smrg 'modes' contains the list of modes associated with the screen 71217ca54c3Smrg 71317ca54c3Smrg This request explicitly asks the server to ensure that the 71417ca54c3Smrg configuration data is up-to-date wrt the hardware. If that requires 71517ca54c3Smrg polling, this is when such polling would take place. If the 71617ca54c3Smrg current configuration is all that's required, use 71717ca54c3Smrg RRGetScreenResourcesCurrent instead. 71817ca54c3Smrg 71917ca54c3Smrg┌─── 72017ca54c3Smrg RRGetOutputInfo 72117ca54c3Smrg output: OUTPUT 72217ca54c3Smrg config-timestamp: TIMESTAMP 72317ca54c3Smrg ▶ 72417ca54c3Smrg status: RRCONFIGSTATUS 72517ca54c3Smrg timestamp: TIMESTAMP 72617ca54c3Smrg crtc: CRTC 72717ca54c3Smrg 72817ca54c3Smrg name: STRING 72917ca54c3Smrg connection: CONNECTION 73017ca54c3Smrg subpixel-order: SUBPIXELORDER 73117ca54c3Smrg widthInMillimeters, heightInMillimeters: CARD32 73217ca54c3Smrg crtcs: LISTofCRTC 73317ca54c3Smrg clones: LISTofOUTPUT 73417ca54c3Smrg modes: LISTofMODE 73517ca54c3Smrg num-preferred: CARD16 73617ca54c3Smrg└─── 73717ca54c3Smrg Errors: Output 73817ca54c3Smrg 73917ca54c3Smrg RRGetOutputInfo returns information about the current and available 74017ca54c3Smrg configurations 'output'. 74117ca54c3Smrg 74217ca54c3Smrg If 'config-timestamp' does not match the current configuration 74317ca54c3Smrg timestamp (as returned by RRGetScreenResources), 'status' is set to 74417ca54c3Smrg InvalidConfigTime and the remaining reply data is empty. Otherwise, 74517ca54c3Smrg 'status' is set to Success. 74617ca54c3Smrg 74717ca54c3Smrg 'timestamp' indicates when the configuration was last set. 74817ca54c3Smrg 74917ca54c3Smrg 'crtc' is the current source CRTC for video data, or Disabled if the 75017ca54c3Smrg output is not connected to any CRTC. 75117ca54c3Smrg 75217ca54c3Smrg 'name' is a UTF-8 encoded string designed to be presented to the 75317ca54c3Smrg user to indicate which output this is. E.g. "S-Video" or "DVI". 75417ca54c3Smrg 75517ca54c3Smrg 'connection' indicates whether the hardware was able to detect a 75617ca54c3Smrg device connected to this output. If the hardware cannot determine 75717ca54c3Smrg whether something is connected, it will set this to 75817ca54c3Smrg UnknownConnection. 75917ca54c3Smrg 76017ca54c3Smrg 'subpixel-order' contains the resulting subpixel order of the 76117ca54c3Smrg connected device to allow correct subpixel rendering. 76217ca54c3Smrg 76317ca54c3Smrg 'widthInMillimeters' and 'heightInMillimeters' report the physical 76417ca54c3Smrg size of the displayed area. If unknown, or not really fixed (e.g., 76517ca54c3Smrg for a projector), these values are both zero. 76617ca54c3Smrg 76717ca54c3Smrg 'crtcs' is the list of CRTCs that this output may be connected to. 76817ca54c3Smrg Attempting to connect this output to a different CRTC results in a 76917ca54c3Smrg Match error. 77017ca54c3Smrg 77117ca54c3Smrg 'clones' is the list of outputs which may be simultaneously 77217ca54c3Smrg connected to the same CRTC along with this output. Attempting to 77317ca54c3Smrg connect this output with an output not in the 'clones' list 77417ca54c3Smrg results in a Match error. 77517ca54c3Smrg 77617ca54c3Smrg 'modes' is the list of modes supported by this output. Attempting to 77717ca54c3Smrg connect this output to a CRTC not using one of these modes results 77817ca54c3Smrg in a Match error. 77917ca54c3Smrg 78017ca54c3Smrg The first 'num-preferred' modes in 'modes' are preferred by the 78117ca54c3Smrg monitor in some way; for fixed-pixel devices, this would generally 78217ca54c3Smrg indicate which modes match the resolution of the output device. 78317ca54c3Smrg 78417ca54c3Smrg Changes in version 1.6 of the protocol: 78517ca54c3Smrg 78617ca54c3Smrg When a “non-desktop” device is connected, the 'connection' 78717ca54c3Smrg field will report Disconnected but the remaining fields will 78817ca54c3Smrg report information about the connected device. 78917ca54c3Smrg 79017ca54c3Smrg┌─── 79117ca54c3Smrg RRListOutputProperties 79217ca54c3Smrg output:OUTPUT 79317ca54c3Smrg ▶ 79417ca54c3Smrg atoms: LISTofATOM 79517ca54c3Smrg└─── 79617ca54c3Smrg Errors: Output 79717ca54c3Smrg 79817ca54c3Smrg This request returns the atoms of properties currently defined on 79917ca54c3Smrg the output. 80017ca54c3Smrg 80117ca54c3Smrg Changes in version 1.6 of the protocol: 80217ca54c3Smrg 80317ca54c3Smrg When a “non-desktop” device is connected, the property list 80417ca54c3Smrg will be correct for the device, even though RRGetOutputInfo 80517ca54c3Smrg reports the device as disconnected. 80617ca54c3Smrg 80717ca54c3Smrg┌─── 80817ca54c3Smrg RRQueryOutputProperty 80917ca54c3Smrg output: OUTPUT 81017ca54c3Smrg property: ATOM 81117ca54c3Smrg ▶ 81217ca54c3Smrg pending: BOOL 81317ca54c3Smrg range: BOOL 81417ca54c3Smrg immutable: BOOL 81517ca54c3Smrg valid-values: LISTofINT32 81617ca54c3Smrg└─── 81717ca54c3Smrg Errors: Name, Atom, Output 81817ca54c3Smrg 81917ca54c3Smrg If the specified property does not exist for the specified output, 82017ca54c3Smrg then a Name error is returned. 82117ca54c3Smrg 82217ca54c3Smrg If 'pending' is TRUE, changes made to property values with 82317ca54c3Smrg RRChangeOutputProperty will be saved in the pending property value 82417ca54c3Smrg and be automatically copied to the current value on the next 82517ca54c3Smrg RRSetCrtcConfig request involving the named output. If 'pending' is 82617ca54c3Smrg FALSE, changes are copied immediately. 82717ca54c3Smrg 82817ca54c3Smrg If 'range' is TRUE, then the valid-values list will contain 82917ca54c3Smrg precisely two values indicating the minimum and maximum allowed 83017ca54c3Smrg values. If 'range' is FALSE, then the valid-values list will contain 83117ca54c3Smrg the list of possible values; attempts to set other values will 83217ca54c3Smrg result in a Value error. 83317ca54c3Smrg 83417ca54c3Smrg If 'immutable' is TRUE, then the property configuration cannot be 83517ca54c3Smrg changed by clients. Immutable properties are interpreted by the X 83617ca54c3Smrg server. 83717ca54c3Smrg 83817ca54c3Smrg Changes in version 1.6 of the protocol: 83917ca54c3Smrg 84017ca54c3Smrg When a “non-desktop” device is connected, the property information 84117ca54c3Smrg will be correct for the device, even though RRGetOutputInfo 84217ca54c3Smrg reports the device as disconnected. 84317ca54c3Smrg 84417ca54c3Smrg┌─── 84517ca54c3Smrg RRConfigureOutputProperty 84617ca54c3Smrg output: OUTPUT 84717ca54c3Smrg property: ATOM 84817ca54c3Smrg pending: BOOL 84917ca54c3Smrg range: BOOL 85017ca54c3Smrg valid-values: LISTofINT32 85117ca54c3Smrg└─── 85217ca54c3Smrg Errors: Access, Name, Atom, Output 85317ca54c3Smrg 85417ca54c3Smrg If the specified property is 'immutable', an Access error is 85517ca54c3Smrg returned. 85617ca54c3Smrg 85717ca54c3Smrg Otherwise, the configuration of the specified property is changed to 85817ca54c3Smrg the values provided in this request. 85917ca54c3Smrg 86017ca54c3Smrg If the specified property does not exist for the specified output, 86117ca54c3Smrg it is created with an empty value and None type. 86217ca54c3Smrg 86317ca54c3Smrg┌─── 86417ca54c3Smrg RRChangeOutputProperty 86517ca54c3Smrg output: OUTPUT 86617ca54c3Smrg property, type: ATOM 86717ca54c3Smrg format: {8, 16, 32} 86817ca54c3Smrg mode: { Replace, Prepend, Append } 86917ca54c3Smrg data: LISTofINT8 or LISTofINT16 or LISTofINT32 87017ca54c3Smrg└─── 87117ca54c3Smrg Errors: Alloc, Atom, Match, Value, Output 87217ca54c3Smrg 87317ca54c3Smrg This request alters the value of the property for the specified 87417ca54c3Smrg output. If the property is marked as a 'pending' property, only the 87517ca54c3Smrg pending value of the property is changed. Otherwise, changes are 87617ca54c3Smrg reflected in both the pending and current values of the property. 87717ca54c3Smrg The type is uninterpreted by the server. The format specifies 87817ca54c3Smrg whether the data should be viewed as a list of 8-bit, 16-bit, or 87917ca54c3Smrg 32-bit quantities so that the server can correctly byte-swap as 88017ca54c3Smrg necessary. 88117ca54c3Smrg 88217ca54c3Smrg If the mode is Replace, the previous property value is discarded. 88317ca54c3Smrg If the mode is Prepend or Append, then the type and format must 88417ca54c3Smrg match the existing property value (or a Match error results). If 88517ca54c3Smrg the property is undefined, it is treated as defined with the correct 88617ca54c3Smrg type and format with zero-length data. 88717ca54c3Smrg 88817ca54c3Smrg For Prepend, the data is tacked on to the beginning of the existing 88917ca54c3Smrg data, and for Append, it is tacked on to the end of the existing data. 89017ca54c3Smrg 89117ca54c3Smrg This request generates a OutputPropertyNotify 89217ca54c3Smrg 89317ca54c3Smrg The lifetime of a property is not tied to the storing client. 89417ca54c3Smrg Properties remain until explicitly deleted, until the output is 89517ca54c3Smrg destroyed, or until server reset (see section 10). 89617ca54c3Smrg 89717ca54c3Smrg The maximum size of a property is server-dependent and may vary 89817ca54c3Smrg dynamically. 89917ca54c3Smrg 90017ca54c3Smrg┌─── 90117ca54c3Smrg RRDeleteOutputProperty 90217ca54c3Smrg output: OUTPUT 90317ca54c3Smrg property: ATOM 90417ca54c3Smrg└─── 90517ca54c3Smrg Errors: Atom, Output 90617ca54c3Smrg 90717ca54c3Smrg This request deletes the property from the specified window if the 90817ca54c3Smrg property exists and generates a OutputPropertyNotify event unless 90917ca54c3Smrg the property does not exist. 91017ca54c3Smrg 91117ca54c3Smrg┌─── 91217ca54c3Smrg RRGetOutputProperty 91317ca54c3Smrg output: OUTPUT 91417ca54c3Smrg property: ATOM 91517ca54c3Smrg type: ATOM or AnyPropertyType 91617ca54c3Smrg long-offset, long-length: CARD32 91717ca54c3Smrg delete: BOOL 91817ca54c3Smrg pending: BOOL 91917ca54c3Smrg ▶ 92017ca54c3Smrg type: ATOM or None 92117ca54c3Smrg format: {0, 8, 16, 32} 92217ca54c3Smrg bytes-after: CARD32 92317ca54c3Smrg value: LISTofINT8 or LISTofINT16 or LISTofINT32 92417ca54c3Smrg└─── 92517ca54c3Smrg Errors: Atom, Value, Output 92617ca54c3Smrg 92717ca54c3Smrg If the specified property does not exist for the specified output, 92817ca54c3Smrg then the return type is None, the format and bytes-after are zero, 92917ca54c3Smrg and the value is empty. The delete argument is ignored in this 93017ca54c3Smrg case. 93117ca54c3Smrg 93217ca54c3Smrg If the specified property exists but its type does not match the 93317ca54c3Smrg specified type, then the return type is the actual type of the 93417ca54c3Smrg property, the format is the actual format of the property (never 93517ca54c3Smrg zero), the bytes-after is the length of the property in bytes (even 93617ca54c3Smrg if the format is 16 or 32), and the value is empty. The delete 93717ca54c3Smrg argument is ignored in this case. 93817ca54c3Smrg 93917ca54c3Smrg If the specified property exists and either AnyPropertyType is 94017ca54c3Smrg specified or the specified type matches the actual type of the 94117ca54c3Smrg property, then the return type is the actual type of the property, 94217ca54c3Smrg the format is the actual format of the property (never zero), and 94317ca54c3Smrg the bytes-after and value are as follows, given: 94417ca54c3Smrg 94517ca54c3Smrg N = actual length of the stored property in bytes 94617ca54c3Smrg (even if the format is 16 or 32) 94717ca54c3Smrg I = 4 × offset 94817ca54c3Smrg T = N - I 94917ca54c3Smrg L = MINIMUM(T, 4 × long-length) 95017ca54c3Smrg A = N - (I + L) 95117ca54c3Smrg 95217ca54c3Smrg If 'pending' is true, and if the property holds a pending value, 95317ca54c3Smrg then the value returned will be the pending value of the property 95417ca54c3Smrg rather than the current value. The returned value starts at byte 95517ca54c3Smrg index I in the property (indexing from 0), and its length in bytes 95617ca54c3Smrg is L. However, it is a Value error if long-offset is given such 95717ca54c3Smrg that L is negative. The value of bytes-after is A, giving the 95817ca54c3Smrg number of trailing unread bytes in the stored property. If delete 95917ca54c3Smrg is True and the bytes-after is zero, the property is also deleted 96017ca54c3Smrg from the output, and a RROutputPropertyNotify event is generated. 96117ca54c3Smrg 96217ca54c3Smrg Changes in version 1.6 of the protocol: 96317ca54c3Smrg 96417ca54c3Smrg When a “non-desktop” device is connected, the property value 96517ca54c3Smrg will be correct for the device, even though RRGetOutputInfo 96617ca54c3Smrg reports the device as disconnected. 96717ca54c3Smrg 96817ca54c3Smrg┌─── 96917ca54c3Smrg RRCreateMode 97017ca54c3Smrg window: WINDOW 97117ca54c3Smrg modeinfo: MODEINFO 97217ca54c3Smrg ▶ 97317ca54c3Smrg mode: MODE 97417ca54c3Smrg└─── 97517ca54c3Smrg Errors: Window, Name, Value 97617ca54c3Smrg 97717ca54c3Smrg 'modeinfo' provides a new mode for outputs on the screen 97817ca54c3Smrg associated with 'window'. If the name of 'modeinfo' names an 97917ca54c3Smrg existing mode, a Name error is returned. If some parameter of the 98017ca54c3Smrg mode is not valid in some other way, a Value error is returned. 98117ca54c3Smrg 98217ca54c3Smrg The returned 'mode' provides the id for the mode. 98317ca54c3Smrg 98417ca54c3Smrg┌─── 98517ca54c3Smrg RRDestroyMode 98617ca54c3Smrg mode: MODE 98717ca54c3Smrg└─── 98817ca54c3Smrg Errors: Mode, Access 98917ca54c3Smrg 99017ca54c3Smrg The user-defined 'mode' is destroyed. 'mode' must name a mode 99117ca54c3Smrg defined with RRCreateMode, else an Match error is returned. If 99217ca54c3Smrg 'mode' is in use by some CRTC or Output, then an Access error is 99317ca54c3Smrg returned. 99417ca54c3Smrg 99517ca54c3Smrg┌─── 99617ca54c3Smrg RRAddOutputMode 99717ca54c3Smrg output: OUTPUT 99817ca54c3Smrg mode: MODE 99917ca54c3Smrg└─── 100017ca54c3Smrg Errors: Output, Mode, Match 100117ca54c3Smrg 100217ca54c3Smrg 'output' indicates which output is to be configured. 100317ca54c3Smrg 100417ca54c3Smrg 'mode' specifies which mode to add. If 'mode' is not valid for 100517ca54c3Smrg 'output', then a Match error is generated. 100617ca54c3Smrg 100717ca54c3Smrg This request generates OutputChangeNotify events. 100817ca54c3Smrg 100917ca54c3Smrg┌─── 101017ca54c3Smrg RRDeleteOutputMode 101117ca54c3Smrg output: OUTPUT 101217ca54c3Smrg mode: MODE 101317ca54c3Smrg└─── 101417ca54c3Smrg Errors: Output, Mode 101517ca54c3Smrg 101617ca54c3Smrg 'output' indicates which output is to be configured. 101717ca54c3Smrg 101817ca54c3Smrg 'mode' specifies which mode to delete. 'mode' must have been added 101917ca54c3Smrg with RRAddOutputMode, else an Access error is returned. 'mode' must 102017ca54c3Smrg not be active, else a Match error is returned. 102117ca54c3Smrg 102217ca54c3Smrg This request generates OutputChangeNotify events. 102317ca54c3Smrg 102417ca54c3Smrg┌─── 102517ca54c3Smrg RRGetCrtcInfo 102617ca54c3Smrg crtc: CRTC 102717ca54c3Smrg config-timestamp: TIMESTAMP 102817ca54c3Smrg ▶ 102917ca54c3Smrg status: RRCONFIGSTATUS 103017ca54c3Smrg timestamp: TIMESTAMP 103117ca54c3Smrg x, y: INT16 103217ca54c3Smrg width, height: CARD16 103317ca54c3Smrg mode: MODE 103417ca54c3Smrg rotation: ROTATION 103517ca54c3Smrg outputs: LISTofOUTPUT 103617ca54c3Smrg 103717ca54c3Smrg rotations: SETofROTATION 103817ca54c3Smrg possible-outputs: LISTofOUTPUT 103917ca54c3Smrg└─── 104017ca54c3Smrg 104117ca54c3Smrg Errors: Window 104217ca54c3Smrg 104317ca54c3Smrg RRGetCrtcInfo returns information about the current and available 104417ca54c3Smrg configurations for the specified crtc connected to the screen 104517ca54c3Smrg associated with 'window'. 104617ca54c3Smrg 104717ca54c3Smrg If 'config-timestamp' does not match the current configuration 104817ca54c3Smrg timestamp (as returned by RRGetScreenResources), 'status' is set to 104917ca54c3Smrg InvalidConfigTime and the remaining reply data is empty. Otherwise, 105017ca54c3Smrg 'status' is set to Success. 105117ca54c3Smrg 105217ca54c3Smrg 'timestamp' indicates when the configuration was last set. 105317ca54c3Smrg 105417ca54c3Smrg 'x' and 'y' indicate the position of this CRTC within the screen 105517ca54c3Smrg region. They will be set to 0 when the CRTC is disabled. 105617ca54c3Smrg 105717ca54c3Smrg 'width' and 'height' indicate the size of the area within the screen 105817ca54c3Smrg presented by this CRTC. This may be different than the size of the 105917ca54c3Smrg mode due to rotation, the projective transform, and the Border property 106017ca54c3Smrg described below. They will be set to 0 when the CRTC is disabled. 106117ca54c3Smrg 106217ca54c3Smrg 'mode' indicates which mode is active, or None indicating that the 106317ca54c3Smrg CRTC has been disabled and is not displaying the screen contents. 106417ca54c3Smrg 106517ca54c3Smrg 'rotation' indicates the active rotation. It is set to Rotate_0 106617ca54c3Smrg when the CRTC is disabled. 106717ca54c3Smrg 106817ca54c3Smrg 'outputs' is the list of outputs currently connected to this CRTC 106917ca54c3Smrg and is empty when the CRTC is disabled. 107017ca54c3Smrg 107117ca54c3Smrg 'rotations' contains the set of rotations and reflections supported 107217ca54c3Smrg by the CRTC. 107317ca54c3Smrg 107417ca54c3Smrg 'possible-outputs' lists all of the outputs which may be connected 107517ca54c3Smrg to this CRTC. 107617ca54c3Smrg 107717ca54c3Smrg┌─── 107817ca54c3Smrg RRSetCrtcConfig 107917ca54c3Smrg crtc: CRTC 108017ca54c3Smrg timestamp: TIMESTAMP 108117ca54c3Smrg config-timestamp: TIMESTAMP 108217ca54c3Smrg x, y: INT16 108317ca54c3Smrg mode: MODE 108417ca54c3Smrg rotation: ROTATION 108517ca54c3Smrg outputs: LISTofOUTPUT 108617ca54c3Smrg ▶ 108717ca54c3Smrg status: RRCONFIGSTATUS 108817ca54c3Smrg new-timestamp: TIMESTAMP 108917ca54c3Smrg└─── 109017ca54c3Smrg Errors: Value, Match 109117ca54c3Smrg 109217ca54c3Smrg If 'timestamp' is less than the time when the configuration was last 109317ca54c3Smrg successfully set, the request is ignored and InvalidTime returned in 109417ca54c3Smrg status. 109517ca54c3Smrg 109617ca54c3Smrg If 'config-timestamp' is not equal to when the monitor's 109717ca54c3Smrg configuration last changed, the request is ignored and 109817ca54c3Smrg InvalidConfigTime returned in status. This could occur if the 109917ca54c3Smrg monitor changed since you last made a RRGetScreenInfo request, 110017ca54c3Smrg perhaps by a different monitor being connected to the machine. 110117ca54c3Smrg Rather than allowing an incorrect call to be executed based on stale 110217ca54c3Smrg data, the server will ignore the request. 110317ca54c3Smrg 110417ca54c3Smrg 'x' and 'y' contain the desired location within the screen for this 110517ca54c3Smrg monitor's content. 'x' and 'y' must be within the screen size, else 110617ca54c3Smrg a Value error results. 110717ca54c3Smrg 110817ca54c3Smrg 'mode' is either the desired mode or None indicating the CRTC should 110917ca54c3Smrg be disabled. If 'mode' is not one of these values, a Value 111017ca54c3Smrg error results. 'mode' must be valid for all of the configured outputs, 111117ca54c3Smrg else a Match error. 111217ca54c3Smrg 111317ca54c3Smrg 'rotation' contains the desired rotation along with which 111417ca54c3Smrg reflections should be enabled. The rotation and reflection values 111517ca54c3Smrg must be among those allowed for this monitor, else a Value error 111617ca54c3Smrg results. 111717ca54c3Smrg 111817ca54c3Smrg 'outputs' contains the set of outputs that this CRTC should be 111917ca54c3Smrg connected to. The set must be among the list of acceptable output 112017ca54c3Smrg sets for this CRTC or a Match error results. 112117ca54c3Smrg 112217ca54c3Smrg If 'mode' is None, then 'outputs' must be empty, else a Match error 112317ca54c3Smrg results. Conversely, if 'mode' is not None, then 'outputs' must not be 112417ca54c3Smrg empty, else a Match error results. 112517ca54c3Smrg 112617ca54c3Smrg This request may fail for other indeterminate reasons, in which case 112717ca54c3Smrg 'status' will be set to Failed and no configuration change will be 112817ca54c3Smrg made. 112917ca54c3Smrg 113017ca54c3Smrg This request sets the CRTC to the specified position, mode, rotation 113117ca54c3Smrg and reflection. The entire area of the CRTC must fit within the 113217ca54c3Smrg screen size, else a Match error results. As an example, rotating the 113317ca54c3Smrg screen so that a single CRTC fills the entire screen before and 113417ca54c3Smrg after may necessitate disabling the CRTC, resizing the screen, 113517ca54c3Smrg then re-enabling the CRTC at the new configuration to avoid an 113617ca54c3Smrg invalid intermediate configuration. 113717ca54c3Smrg 113817ca54c3Smrg If panning is enabled, the width and height of the panning and the 113917ca54c3Smrg tracking areas are clamped to the new mode size. 114017ca54c3Smrg Disabled panning axes remain disabled. 114117ca54c3Smrg Panning borders are disabled if their requirements are no longer met 114217ca54c3Smrg (see RRSetPanning). 114317ca54c3Smrg 114417ca54c3Smrg When this request succeeds, 'status' contains Success and the 114517ca54c3Smrg requested changes to configuration will have been made. 114617ca54c3Smrg 114717ca54c3Smrg 'new-time-stamp' contains the time at which this request was 114817ca54c3Smrg executed. 114917ca54c3Smrg 115017ca54c3Smrg┌─── 115117ca54c3Smrg RRGetCrtcGammaSize 115217ca54c3Smrg crtc: CRTC 115317ca54c3Smrg ▶ 115417ca54c3Smrg size: CARD16 115517ca54c3Smrg└─── 115617ca54c3Smrg Errors: Crtc 115717ca54c3Smrg 115817ca54c3Smrg This request returns the size of the gamma ramps used by 'crtc'. 115917ca54c3Smrg 116017ca54c3Smrg┌─── 116117ca54c3Smrg RRGetCrtcGamma 116217ca54c3Smrg crtc: CRTC 116317ca54c3Smrg ▶ 116417ca54c3Smrg red: LISTofCARD16 116517ca54c3Smrg green: LISTofCARD16 116617ca54c3Smrg blue: LISTofCARD16 116717ca54c3Smrg└─── 116817ca54c3Smrg Errors: Crtc 116917ca54c3Smrg 117017ca54c3Smrg This request returns the currently set gamma ramps for 'crtc'. All 117117ca54c3Smrg three lists will be the size returned by the RRGetCrtcGammaSize 117217ca54c3Smrg request. 117317ca54c3Smrg 117417ca54c3Smrg┌─── 117517ca54c3Smrg RRSetCrtcGamma 117617ca54c3Smrg crtc: CRTC 117717ca54c3Smrg red: LISTofCARD16 117817ca54c3Smrg green: LISTofCARD16 117917ca54c3Smrg blue: LISTofCARD16 118017ca54c3Smrg└─── 118117ca54c3Smrg Errors: Crtc, Match 118217ca54c3Smrg 118317ca54c3Smrg This request sets the gamma ramps for 'crtc'. All three lists 118417ca54c3Smrg must be the size returned by RRGetCrtcGammaSize else a Value error 118517ca54c3Smrg results. 118617ca54c3Smrg 118717ca54c3Smrg7.2. Extension Requests added in version 1.3 of the extension 118817ca54c3Smrg 118917ca54c3Smrg┌─── 119017ca54c3Smrg RRGetScreenResourcesCurrent 119117ca54c3Smrg window: WINDOW 119217ca54c3Smrg ▶ 119317ca54c3Smrg timestamp: TIMESTAMP 119417ca54c3Smrg config-timestamp: TIMESTAMP 119517ca54c3Smrg crtcs: LISTofCRTC 119617ca54c3Smrg outputs: LISTofOUTPUT 119717ca54c3Smrg modes: LISTofMODEINFO 119817ca54c3Smrg└─── 119917ca54c3Smrg Errors: Window 120017ca54c3Smrg 120117ca54c3Smrg RRGetScreenResourcesCurrent returns the list of outputs and crtcs 120217ca54c3Smrg connected to the screen associated with 'window'. 120317ca54c3Smrg 120417ca54c3Smrg 'timestamp' indicates when the configuration was last set. 120517ca54c3Smrg 120617ca54c3Smrg 'config-timestamp' indicates when the configuration information last 120717ca54c3Smrg changed. Requests to configure the output will fail unless the 120817ca54c3Smrg timestamp indicates that the information the client is using is up 120917ca54c3Smrg to date, to ensure clients can be well behaved in the face of race 121017ca54c3Smrg conditions. 121117ca54c3Smrg 121217ca54c3Smrg 'crtcs' contains the list of CRTCs associated with the screen. 121317ca54c3Smrg 121417ca54c3Smrg 'outputs' contains the list of outputs associated with the screen. 121517ca54c3Smrg 121617ca54c3Smrg 'modes' contains the list of modes associated with the screen. 121717ca54c3Smrg 121817ca54c3Smrg Unlike RRGetScreenResources, this merely returns the current 121917ca54c3Smrg configuration, and does not poll for hardware changes. 122017ca54c3Smrg 122117ca54c3Smrg┌─── 122217ca54c3Smrg RRSetCrtcTransform 122317ca54c3Smrg crtc: CRTC 122417ca54c3Smrg transform: TRANSFORM 122517ca54c3Smrg filter: STRING8 122617ca54c3Smrg values: LISTofFIXED 122717ca54c3Smrg└─── 122817ca54c3Smrg Errors: Crtc, Match 122917ca54c3Smrg 123017ca54c3Smrg This request provides a mechanism that is more general than the 123117ca54c3Smrg existing rotation and reflection values for describing the 123217ca54c3Smrg transformation from frame buffer image to crtc presentation. 123317ca54c3Smrg 'transform' is a full 2D projective transformation from screen 123417ca54c3Smrg coordinate space to crtc coordinate space. This transformation is 123517ca54c3Smrg applied before the rotation and reflection values to compute the 123617ca54c3Smrg complete transform. 123717ca54c3Smrg 123817ca54c3Smrg 'filter' and 'values' specify a Render filter that may be used by the 123917ca54c3Smrg server when transforming data from frame buffer to crtc. 124017ca54c3Smrg 124117ca54c3Smrg This request sets the transform to be used at the next 124217ca54c3Smrg RRSetCrtcConfig request execution; it does not cause any change to 124317ca54c3Smrg occur in the current configuration. 124417ca54c3Smrg 124517ca54c3Smrg When a non-identity transformation is in use, the rectangle returned 124617ca54c3Smrg by RRGetCrtcInfo defines the bounding rectangle of the screen that is 124717ca54c3Smrg projected to the crtc. It is this projected rectangle which must be 124817ca54c3Smrg within the area of the screen when the mode is set. 124917ca54c3Smrg 125017ca54c3Smrg┌─── 125117ca54c3Smrg RRGetCrtcTransform 125217ca54c3Smrg crtc: CRTC 125317ca54c3Smrg ▶ 125417ca54c3Smrg pending-transform: TRANSFORM 125517ca54c3Smrg pending-filter: STRING8 125617ca54c3Smrg pending-values: LISTofFIXED 125717ca54c3Smrg current-transform: TRANSFORM 125817ca54c3Smrg current-filter: STRING8 125917ca54c3Smrg current-values: LISTofFIXED 126017ca54c3Smrg└─── 126117ca54c3Smrg 126217ca54c3Smrg This request returns the pending and current transforms for the 126317ca54c3Smrg specified CRTC. The pending transform will be the same as the current 126417ca54c3Smrg transform if no new pending transform has been set since the last call 126517ca54c3Smrg to RRSetCrtcConfig. 126617ca54c3Smrg 126717ca54c3Smrg┌─── 126817ca54c3Smrg RRGetPanning 126917ca54c3Smrg crtc: CRTC 127017ca54c3Smrg ▶ 127117ca54c3Smrg status: RRCONFIGSTATUS 127217ca54c3Smrg timestamp: TIMESTAMP 127317ca54c3Smrg left, top, width, height: CARD16 127417ca54c3Smrg track_left, track_top, track_width, track_height: CARD16 127517ca54c3Smrg border_left, border_top, border_right, border_bottom: INT16 127617ca54c3Smrg└─── 127717ca54c3Smrg 127817ca54c3Smrg Errors: Crtc 127917ca54c3Smrg 128017ca54c3Smrg Version 1.3 adds panning support again. If multiple crtcs are active 128117ca54c3Smrg the panning behavior can be defined per crtc individually. 128217ca54c3Smrg RRGetPanning returns information about the currently set panning 128317ca54c3Smrg configuration for the specified crtc. If the CRTC does not support 128417ca54c3Smrg panning, all fields (except timestamp) will be 0. 128517ca54c3Smrg 128617ca54c3Smrg 'timestamp' indicates when the configuration was last set. 128717ca54c3Smrg 128817ca54c3Smrg All other entries are explained for RRSetPanning. 128917ca54c3Smrg 129017ca54c3Smrg┌─── 129117ca54c3Smrg RRSetPanning 129217ca54c3Smrg crtc: CRTC 129317ca54c3Smrg timestamp: TIMESTAMP 129417ca54c3Smrg left, top, width, height: CARD16 129517ca54c3Smrg track_left, track_top, track_width, track_height: CARD16 129617ca54c3Smrg border_left, border_top, border_right, border_bottom: INT16 129717ca54c3Smrg ▶ 129817ca54c3Smrg status: RRCONFIGSTATUS 129917ca54c3Smrg new-timestamp: TIMESTAMP 130017ca54c3Smrg└─── 130117ca54c3Smrg Errors: Crtc, Match 130217ca54c3Smrg 130317ca54c3Smrg This request sets the panning parameters. As soon as panning is 130417ca54c3Smrg enabled, the CRTC position can change with every pointer move. 130517ca54c3Smrg RRCrtcChangeNotify events are sent to the clients requesting those. 130617ca54c3Smrg 130717ca54c3Smrg If 'timestamp' is less than the time when the configuration was last 130817ca54c3Smrg successfully set, the request is ignored and InvalidTime returned in 130917ca54c3Smrg status. 131017ca54c3Smrg 131117ca54c3Smrg ┌──┳━━━━━━━━━━━━━━┳─────┬ ─ ─ ─ ─ ─ ┐ 131217ca54c3Smrg │ ┃ CRTC ┃ │ 131317ca54c3Smrg │ ┃ ┃ │ │ 131417ca54c3Smrg │ ┃ X┃→ │ 131517ca54c3Smrg │ ┃ ┃ │ │ framebuffer 131617ca54c3Smrg │ ┗━━━━━━━━━━━━━━┛ │ 131717ca54c3Smrg │ │ │ 131817ca54c3Smrg │panning area │ 131917ca54c3Smrg └───────────────────────┴ ─ ─ ─ ─ ─ ┘ 132017ca54c3Smrg 132117ca54c3Smrg 'left', 'top', 'width', and 'height' contain the total panning area 132217ca54c3Smrg for this CRTC. 'width' has to be larger than or equal to the CRTC's 132317ca54c3Smrg width or 0, and 'left'+'width' must be within the screen size, else a 132417ca54c3Smrg Match error results. Equivalent restrictions for the height exist. 132517ca54c3Smrg 'width' or 'height' set to 0 indicate that panning should be disabled 132617ca54c3Smrg on the according axis. Setting 'width'/'height' to the CRTC's 132717ca54c3Smrg width/height will disable panning on the X/Y axis as well, but 132817ca54c3Smrg RRSetScreenSize will silently enable panning if the screen size is 132917ca54c3Smrg increased. This does not happen if set to 0. 133017ca54c3Smrg 133117ca54c3Smrg ┌────────┳━━━━━━━━━━━━━━┳ ─ ─ ─ ─ ─ ┐ 133217ca54c3Smrg │ ┃ CRTC ┃ 133317ca54c3Smrg │ ┃ ┃ │ 133417ca54c3Smrg │ ┃ ┃ 133517ca54c3Smrg │ ┃ ┃ │ tracking area 133617ca54c3Smrg │ ┗━━━━━━━━━━━━━━┫ X 133717ca54c3Smrg │ ↓ │ ↓ │ 133817ca54c3Smrg │panning area │ 133917ca54c3Smrg └───────────────────────┴ ─ ─ ─ ─ ─ ┘ 134017ca54c3Smrg 134117ca54c3Smrg 'track_left', 'track_top', 'track_width', and 'track_height' contain 134217ca54c3Smrg the pointer area for which the panning region is updated. For normal 134317ca54c3Smrg use cases it should enclose the panning area minus borders, and is 134417ca54c3Smrg typically set to either the panning area minus borders, or to the 134517ca54c3Smrg total screen size. If set to the total screen size, the CRTC will pan 134617ca54c3Smrg in the remaining axis even if the pointer is outside the panning area 134717ca54c3Smrg on a different CRTC, as shown in the figure above. If the pointer is 134817ca54c3Smrg outside the tracking area, the CRTC will not pan. Zero can be used as 134917ca54c3Smrg an alias for the total screen size. 135017ca54c3Smrg 135117ca54c3Smrg ┌──┳━━━━━━━━━━━━━━┳────────────┐ 135217ca54c3Smrg │ ┃ CRTC ┃ │ 135317ca54c3Smrg │ ┃ ┃ │ 135417ca54c3Smrg │ ┃ ┃→ │ 135517ca54c3Smrg │ ┃ X←→┃ │ 135617ca54c3Smrg │ ┃ border_right │ 135717ca54c3Smrg │ ┗━━━━━━━━━━━━━━┛ │ 135817ca54c3Smrg │ │ 135917ca54c3Smrg │panning area │ 136017ca54c3Smrg └──────────────────────────────┘ 136117ca54c3Smrg 136217ca54c3Smrg 'border_left', 'border_top', 'border_right', and 'border_bottom' 136317ca54c3Smrg define the distances from the CRTC borders that will activate panning 136417ca54c3Smrg if the pointer hits them. If the borders are 0, the screen will pan 136517ca54c3Smrg when the pointer hits the CRTC borders (behavior of pre-RandR Xserver 136617ca54c3Smrg panning). If the borders are positive, the screen will pan when the 136717ca54c3Smrg pointer gets close to the CRTC borders, if they are negative, the 136817ca54c3Smrg screen will only pan when the pointer is already way past the CRTC 136917ca54c3Smrg borders. Negative values might confuse users and disable panning to 137017ca54c3Smrg the very edges of the screen. Thus they are discouraged. 137117ca54c3Smrg border_left + border_right has to be lower or equal than the CRTC's 137217ca54c3Smrg width, else a Match error results. An equivalent restriction for the 137317ca54c3Smrg height exists. 137417ca54c3Smrg 137517ca54c3Smrg Screen size changes update the panning and the tracking areas to the 137617ca54c3Smrg new size. Both screen size changes and mode changes clamp these areas 137717ca54c3Smrg to the current CRTC size. In these cases panning borders are disabled 137817ca54c3Smrg if their requirements are no longer met. 137917ca54c3Smrg 138017ca54c3Smrg When this request succeeds, 'status' contains Success and the 138117ca54c3Smrg requested changes to configuration will have been made. 138217ca54c3Smrg 138317ca54c3Smrg 'new-time-stamp' contains the time at which this request was 138417ca54c3Smrg executed. 138517ca54c3Smrg 138617ca54c3Smrg┌─── 138717ca54c3Smrg RRSetOutputPrimary 138817ca54c3Smrg window: WINDOW 138917ca54c3Smrg output: OUTPUT 139017ca54c3Smrg└─── 139117ca54c3Smrg Errors: Match, Output, Window 139217ca54c3Smrg 139317ca54c3Smrg RRSetOutputPrimary marks 'output' as the primary output for the 139417ca54c3Smrg screen with the same root window as 'window'. This output's CRTC 139517ca54c3Smrg will be sorted to the front of the list in Xinerama and RANDR 139617ca54c3Smrg geometry requests for the benefit of older applications. The 139717ca54c3Smrg default primary output is None, and None is a legal value to pass 139817ca54c3Smrg to RRSetOutputPrimary. This request is expected to be used by 139917ca54c3Smrg desktop environments to mark the screen that should hold the primary 140017ca54c3Smrg menu bar or panel. 140117ca54c3Smrg 140217ca54c3Smrg As this changes the logical layout of the screen, ConfigureNotify 140317ca54c3Smrg and RRScreenChangeNotify will be generated on the appropriate root 140417ca54c3Smrg window when the primary output is changed by this call. This request 140517ca54c3Smrg also generates RROutputChangeNotify events on the outputs that gained 140617ca54c3Smrg and lost primary status. 140717ca54c3Smrg 140817ca54c3Smrg If an output is disconnected asynchronously (eg. due to recabling), 140917ca54c3Smrg the primary status does not change, but RROutputChangeNotify events 141017ca54c3Smrg will be generated if the hardware is capable of detecting this; 141117ca54c3Smrg clients are expected to reconfigure if appropriate. 141217ca54c3Smrg 141317ca54c3Smrg If an output is deleted (eg. due to device hotplug), the server will 141417ca54c3Smrg act as though None was passed to RRSetOutputPrimary, including 141517ca54c3Smrg generating the appropriate events. 141617ca54c3Smrg 141717ca54c3Smrg┌─── 141817ca54c3Smrg RRGetOutputPrimary 141917ca54c3Smrg window: WINDOW 142017ca54c3Smrg ▶ 142117ca54c3Smrg output: OUTPUT 142217ca54c3Smrg└─── 142317ca54c3Smrg Errors: Window 142417ca54c3Smrg 142517ca54c3Smrg RRGetOutputPrimary returns the primary output for the screen. 142617ca54c3Smrg 142717ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 142817ca54c3Smrg 142917ca54c3Smrg7.4 Extension Requests added in version 1.4 of the extension. 143017ca54c3Smrg 143117ca54c3Smrg┌─── 143217ca54c3Smrg RRGetProviders 143317ca54c3Smrg window : WINDOW 143417ca54c3Smrg ▶ 143517ca54c3Smrg timestamp: TIMESTAMP 143617ca54c3Smrg providers: LISTofPROVIDER 143717ca54c3Smrg└─── 143817ca54c3Smrg Errors: Window 143917ca54c3Smrg 144017ca54c3Smrg RRGetProviders returns the list of providers connected to the screen 144117ca54c3Smrg associated with 'window'. 144217ca54c3Smrg 144317ca54c3Smrg 'timestamp' indicates when the configuration was last set. 144417ca54c3Smrg 144517ca54c3Smrg 'providers' contains the list of PROVIDERs associated with the 144617ca54c3Smrg screen. 144717ca54c3Smrg 144817ca54c3Smrg┌─── 144917ca54c3Smrg RRGetProviderInfo 145017ca54c3Smrg provider: PROVIDER 145117ca54c3Smrg ▶ 145217ca54c3Smrg capabilities: PROVIDER_CAPS 145317ca54c3Smrg name: STRING 145417ca54c3Smrg crtcs: LISTofCRTC 145517ca54c3Smrg outputs: LISTofOUTPUT 145617ca54c3Smrg associated_providers: LISTofPROVIDERS 145717ca54c3Smrg associated_provider_capability: LISTofPROVIDER_CAPS 145817ca54c3Smrg└─── 145917ca54c3Smrg Errors: Provider 146017ca54c3Smrg 146117ca54c3Smrg RRGetProviderInfo return information about the specified provider. 146217ca54c3Smrg The capabilities of the current provider are returned, along with 146317ca54c3Smrg the list of providers currently associated with this provider and 146417ca54c3Smrg the capability they are associated with. It also provides the list 146517ca54c3Smrg of crtcs and outputs that this provider is responsible for. 146617ca54c3Smrg 146717ca54c3Smrg 'name' is a UTF-8 encoded string to be presented to the user to 146817ca54c3Smrg indicate the device or driver supplied name. 146917ca54c3Smrg 147017ca54c3Smrg┌─── 147117ca54c3Smrg RRSetProviderOffloadSink 147217ca54c3Smrg provider: PROVIDER 147317ca54c3Smrg sink_provider: PROVIDER 147417ca54c3Smrg config-timestamp: TIMESTAMP 147517ca54c3Smrg└─── 147617ca54c3Smrg Errors: Provider 147717ca54c3Smrg 147817ca54c3Smrg RRSetOffloadSink sets the offload sink for this provider to the 147917ca54c3Smrg specified provider. 148017ca54c3Smrg 148117ca54c3Smrg┌─── 148217ca54c3Smrg RRSetProviderOutputSource 148317ca54c3Smrg provider: PROVIDER 148417ca54c3Smrg source_provider: PROVIDER 148517ca54c3Smrg config-timestamp: TIMESTAMP 148617ca54c3Smrg└─── 148717ca54c3Smrg Errors: Provider 148817ca54c3Smrg 148917ca54c3Smrg RRSetOutputSource sets the output source for this provider to the 149017ca54c3Smrg specified provider. 149117ca54c3Smrg 149217ca54c3Smrg┌─── 149317ca54c3Smrg RRListProviderProperties 149417ca54c3Smrg provider:PROVIDERS 149517ca54c3Smrg ▶ 149617ca54c3Smrg atoms: LISTofATOM 149717ca54c3Smrg└─── 149817ca54c3Smrg Errors: Provider 149917ca54c3Smrg 150017ca54c3Smrg This request returns the atoms of properties currently defined on 150117ca54c3Smrg the provider. 150217ca54c3Smrg 150317ca54c3Smrg┌─── 150417ca54c3Smrg RRQueryProviderProperty 150517ca54c3Smrg provider: PROVIDER 150617ca54c3Smrg property: ATOM 150717ca54c3Smrg ▶ 150817ca54c3Smrg pending: BOOL 150917ca54c3Smrg range: BOOL 151017ca54c3Smrg immutable: BOOL 151117ca54c3Smrg valid-values: LISTofINT32 151217ca54c3Smrg└─── 151317ca54c3Smrg Errors: Name, Atom, Provider 151417ca54c3Smrg 151517ca54c3Smrg If the specified property does not exist for the specified provider, 151617ca54c3Smrg then a Name error is returned. 151717ca54c3Smrg 151817ca54c3Smrg If 'pending' is TRUE, changes made to property values with 151917ca54c3Smrg RRChangeProviderProperty will be saved in the pending property value 152017ca54c3Smrg and be automatically copied to the current value on the next 152117ca54c3Smrg RRSetCrtcConfig request on a crtc attached to that provider. 152217ca54c3Smrg If 'pending' is FALSE, changes are copied immediately. 152317ca54c3Smrg 152417ca54c3Smrg If 'range' is TRUE, then the valid-values list will contain 152517ca54c3Smrg precisely two values indicating the minimum and maximum allowed 152617ca54c3Smrg values. If 'range' is FALSE, then the valid-values list will contain 152717ca54c3Smrg the list of possible values; attempts to set other values will 152817ca54c3Smrg result in a Value error. 152917ca54c3Smrg 153017ca54c3Smrg If 'immutable' is TRUE, then the property configuration cannot be 153117ca54c3Smrg changed by clients. Immutable properties are interpreted by the X 153217ca54c3Smrg server. 153317ca54c3Smrg 153417ca54c3Smrg┌─── 153517ca54c3Smrg RRConfigureProviderProperty 153617ca54c3Smrg provider: PROVIDER 153717ca54c3Smrg property: ATOM 153817ca54c3Smrg pending: BOOL 153917ca54c3Smrg range: BOOL 154017ca54c3Smrg valid-values: LISTofINT32 154117ca54c3Smrg└─── 154217ca54c3Smrg Errors: Access, Name, Atom, Provider 154317ca54c3Smrg 154417ca54c3Smrg If the specified property is 'immutable', an Access error is 154517ca54c3Smrg returned. 154617ca54c3Smrg 154717ca54c3Smrg Otherwise, the configuration of the specified property is changed to 154817ca54c3Smrg the values provided in this request. 154917ca54c3Smrg 155017ca54c3Smrg If the specified property does not exist for the specified provider, 155117ca54c3Smrg it is created with an empty value and None type. 155217ca54c3Smrg 155317ca54c3Smrg┌─── 155417ca54c3Smrg RRChangeProviderProperty 155517ca54c3Smrg provider: PROVIDER 155617ca54c3Smrg property, type: ATOM 155717ca54c3Smrg format: {8, 16, 32} 155817ca54c3Smrg mode: { Replace, Prepend, Append } 155917ca54c3Smrg data: LISTofINT8 or LISTofINT16 or LISTofINT32 156017ca54c3Smrg└─── 156117ca54c3Smrg Errors: Alloc, Atom, Match, Value, Provider 156217ca54c3Smrg 156317ca54c3Smrg This request alters the value of the property for the specified 156417ca54c3Smrg provider. If the property is marked as a 'pending' property, only the 156517ca54c3Smrg pending value of the property is changed. Otherwise, changes are 156617ca54c3Smrg reflected in both the pending and current values of the property. 156717ca54c3Smrg The type is uninterpreted by the server. The format specifies 156817ca54c3Smrg whether the data should be viewed as a list of 8-bit, 16-bit, or 156917ca54c3Smrg 32-bit quantities so that the server can correctly byte-swap as 157017ca54c3Smrg necessary. 157117ca54c3Smrg 157217ca54c3Smrg If the mode is Replace, the previous property value is discarded. 157317ca54c3Smrg If the mode is Prepend or Append, then the type and format must 157417ca54c3Smrg match the existing property value (or a Match error results). If 157517ca54c3Smrg the property is undefined, it is treated as defined with the correct 157617ca54c3Smrg type and format with zero-length data. 157717ca54c3Smrg 157817ca54c3Smrg For Prepend, the data is tacked on to the beginning of the existing 157917ca54c3Smrg data, and for Append, it is tacked on to the end of the existing data. 158017ca54c3Smrg 158117ca54c3Smrg This request generates a ProviderPropertyNotify 158217ca54c3Smrg 158317ca54c3Smrg The lifetime of a property is not tied to the storing client. 158417ca54c3Smrg Properties remain until explicitly deleted, until the provider is 158517ca54c3Smrg destroyed, or until server reset (see section 10). 158617ca54c3Smrg 158717ca54c3Smrg The maximum size of a property is server-dependent and may vary 158817ca54c3Smrg dynamically. 158917ca54c3Smrg┌─── 159017ca54c3Smrg RRDeleteProviderProperty 159117ca54c3Smrg provider: Provider 159217ca54c3Smrg property: ATOM 159317ca54c3Smrg└─── 159417ca54c3Smrg Errors: Atom, Provider 159517ca54c3Smrg 159617ca54c3Smrg This request deletes the property from the specified provider if the 159717ca54c3Smrg property exists and generates a ProviderPropertyNotify event unless 159817ca54c3Smrg the property does not exist. 159917ca54c3Smrg 160017ca54c3Smrg┌─── 160117ca54c3Smrg RRGetProviderProperty 160217ca54c3Smrg provider: PROVIDER 160317ca54c3Smrg property: ATOM 160417ca54c3Smrg type: ATOM or AnyPropertyType 160517ca54c3Smrg long-offset, long-length: CARD32 160617ca54c3Smrg delete: BOOL 160717ca54c3Smrg pending: BOOL 160817ca54c3Smrg ▶ 160917ca54c3Smrg type: ATOM or None 161017ca54c3Smrg format: {0, 8, 16, 32} 161117ca54c3Smrg bytes-after: CARD32 161217ca54c3Smrg value: LISTofINT8 or LISTofINT16 or LISTofINT32 161317ca54c3Smrg└─── 161417ca54c3Smrg Errors: Atom, Value, Provider 161517ca54c3Smrg 161617ca54c3Smrg If the specified property does not exist for the specified provider, 161717ca54c3Smrg then the return type is None, the format and bytes-after are zero, 161817ca54c3Smrg and the value is empty. The delete argument is ignored in this 161917ca54c3Smrg case. 162017ca54c3Smrg 162117ca54c3Smrg If the specified property exists but its type does not match the 162217ca54c3Smrg specified type, then the return type is the actual type of the 162317ca54c3Smrg property, the format is the actual format of the property (never 162417ca54c3Smrg zero), the bytes-after is the length of the property in bytes (even 162517ca54c3Smrg if the format is 16 or 32), and the value is empty. The delete 162617ca54c3Smrg argument is ignored in this case. 162717ca54c3Smrg 162817ca54c3Smrg If the specified property exists and either AnyPropertyType is 162917ca54c3Smrg specified or the specified type matches the actual type of the 163017ca54c3Smrg property, then the return type is the actual type of the property, 163117ca54c3Smrg the format is the actual format of the property (never zero), and 163217ca54c3Smrg the bytes-after and value are as follows, given: 163317ca54c3Smrg 163417ca54c3Smrg N = actual length of the stored property in bytes 163517ca54c3Smrg (even if the format is 16 or 32) 163617ca54c3Smrg I = 4 × offset 163717ca54c3Smrg T = N - I 163817ca54c3Smrg L = MINIMUM(T, 4 × long-length) 163917ca54c3Smrg A = N - (I + L) 164017ca54c3Smrg 164117ca54c3Smrg If 'pending' is true, and if the property holds a pending value, 164217ca54c3Smrg then the value returned will be the pending value of the property 164317ca54c3Smrg rather than the current value. The returned value starts at byte 164417ca54c3Smrg index I in the property (indexing from 0), and its length in bytes 164517ca54c3Smrg is L. However, it is a Value error if long-offset is given such 164617ca54c3Smrg that L is negative. The value of bytes-after is A, giving the 164717ca54c3Smrg number of trailing unread bytes in the stored property. If delete 164817ca54c3Smrg is True and the bytes-after is zero, the property is also deleted 164917ca54c3Smrg from the provider, and a RRProviderPropertyNotify event is generated. 165017ca54c3Smrg 165117ca54c3Smrg 165217ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 165317ca54c3Smrg 165417ca54c3Smrg7.5. Extension Requests added in version 1.5 of the extension. 165517ca54c3Smrg 165617ca54c3Smrg┌─── 165717ca54c3Smrg RRGetMonitors 165817ca54c3Smrg window : WINDOW 165917ca54c3Smrg get_active : BOOL 166017ca54c3Smrg ▶ 166117ca54c3Smrg timestamp: TIMESTAMP 166217ca54c3Smrg monitors: LISTofMONITORINFO 166317ca54c3Smrg└─── 166417ca54c3Smrg Errors: Window 166517ca54c3Smrg 166617ca54c3Smrg Returns the list of Monitors for the screen containing 166717ca54c3Smrg 'window'. If 'get_active' is set it returns only active 166817ca54c3Smrg monitors (non-0x0 monitors). 'get_active' should always 166917ca54c3Smrg be set by toolkits, and not by configuration clients. 167017ca54c3Smrg 167117ca54c3Smrg 'timestamp' indicates the server time when the list of 167217ca54c3Smrg monitors last changed. 167317ca54c3Smrg 167417ca54c3Smrg┌─── 167517ca54c3Smrg RRSetMonitor 167617ca54c3Smrg window : WINDOW 167717ca54c3Smrg info: MONITORINFO 167817ca54c3Smrg└─── 167917ca54c3Smrg Errors: Window, Output, Atom, Value 168017ca54c3Smrg 168117ca54c3Smrg Create a new monitor. Any existing Monitor of the same name is deleted. 168217ca54c3Smrg 168317ca54c3Smrg 'name' must be a valid atom or an Atom error results. 168417ca54c3Smrg 168517ca54c3Smrg 'name' must not match the name of any Output on the screen, or 168617ca54c3Smrg a Value error results. 168717ca54c3Smrg 168817ca54c3Smrg If 'info.outputs' is non-empty, and if x, y, width, height are all 168917ca54c3Smrg zero, then the Monitor geometry will be dynamically defined to 169017ca54c3Smrg be the bounding box of the geometry of the active CRTCs 169117ca54c3Smrg associated with them. 169217ca54c3Smrg 169317ca54c3Smrg If 'name' matches an existing Monitor on the screen, the 169417ca54c3Smrg existing one will be deleted as if RRDeleteMonitor were called. 169517ca54c3Smrg 169617ca54c3Smrg For each output in 'info.outputs, each one is removed from all 169717ca54c3Smrg pre-existing Monitors. If removing the output causes the list of 169817ca54c3Smrg outputs for that Monitor to become empty, then that Monitor will 169917ca54c3Smrg be deleted as if RRDeleteMonitor were called. 170017ca54c3Smrg 170117ca54c3Smrg Only one monitor per screen may be primary. If 'info.primary' 170217ca54c3Smrg is true, then the primary value will be set to false on all 170317ca54c3Smrg other monitors on the screen. 170417ca54c3Smrg 170517ca54c3Smrg RRSetMonitor generates a ConfigureNotify event on the root 170617ca54c3Smrg window of the screen. 170717ca54c3Smrg 170817ca54c3Smrg┌─── 170917ca54c3Smrg RRDeleteMonitor 171017ca54c3Smrg window : WINDOW 171117ca54c3Smrg name: ATOM 171217ca54c3Smrg└─── 171317ca54c3Smrg Errors: Window, Atom, Value 171417ca54c3Smrg 171517ca54c3Smrg Deletes the named Monitor. 171617ca54c3Smrg 171717ca54c3Smrg 'name' must be a valid atom or an Atom error results. 171817ca54c3Smrg 171917ca54c3Smrg 'name' must match the name of a Monitor on the screen, or a 172017ca54c3Smrg Value error results. 172117ca54c3Smrg 172217ca54c3Smrg RRDeleteMonitor generates a ConfigureNotify event on the root 172317ca54c3Smrg window of the screen. 172417ca54c3Smrg 172517ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 172617ca54c3Smrg 172717ca54c3Smrg7.6. Extension Requests added in version 1.6 of the extension. 172817ca54c3Smrg 172917ca54c3Smrg┌─── 173017ca54c3Smrg RRCreateLease 173117ca54c3Smrg window : WINDOW 173217ca54c3Smrg lid: LEASE 173317ca54c3Smrg crtcs: LISTofCRTC 173417ca54c3Smrg outputs: LISTofOUTPUT 173517ca54c3Smrg ▶ 173617ca54c3Smrg nfd: CARD8 173717ca54c3Smrg lease: FD 173817ca54c3Smrg└─── 173917ca54c3Smrg Errors: IdChoice, Window, Access, Value, CRTC, Output 174017ca54c3Smrg 174117ca54c3Smrg Creates a new Lease called 'lid' for the specified crtcs and 174217ca54c3Smrg outputs from the screen defined by 'window'. Returns a KMS/DRM 174317ca54c3Smrg file descriptor which can control the leased objects directly 174417ca54c3Smrg through the kernel. While leased, all resources will appear to 174517ca54c3Smrg be 'useless' to clients other than the leasing client as 174617ca54c3Smrg follows: 174717ca54c3Smrg 174817ca54c3Smrg • Crtcs are reported as having no 'possible-outputs' and all 174917ca54c3Smrg other values reported as if the crtc were disabled. 175017ca54c3Smrg 175117ca54c3Smrg • Outputs are reported as having no crtcs they can be 175217ca54c3Smrg connected to, no clones they can share a crtc with, will 175317ca54c3Smrg report a connection status of Disconnected, and will show 175417ca54c3Smrg the current crtc as if it were disabled. 175517ca54c3Smrg 175617ca54c3Smrg The lease remains in effect until the file descriptor is 175717ca54c3Smrg closed, even if the client holding the lease disconnects from 175817ca54c3Smrg the X server. 175917ca54c3Smrg 176017ca54c3Smrg Returns an Access error if any of the named resources are 176117ca54c3Smrg already leased to another client. 176217ca54c3Smrg 176317ca54c3Smrg┌─── 176417ca54c3Smrg RRFreeLease 176517ca54c3Smrg lid: LEASE 176617ca54c3Smrg terminate: BOOL 176717ca54c3Smrg└─── 176817ca54c3Smrg Errors: Lease 176917ca54c3Smrg 177017ca54c3Smrg Frees the reference to the lease 'lid'. If 'terminate' is 177117ca54c3Smrg true, then the lease is terminated and all leased resources 177217ca54c3Smrg returned to the X server. If 'terminate' is false, then the 177317ca54c3Smrg lease remains in effect, but the X server no longer has a name 177417ca54c3Smrg for it. 177517ca54c3Smrg 177617ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 177717ca54c3Smrg8. Extension Events 177817ca54c3Smrg 177917ca54c3SmrgClients MAY select for ConfigureNotify on the root window to be 178017ca54c3Smrginformed of screen changes. This may be advantageous if all your 178117ca54c3Smrgclient needs to know is the size of the root window, as it avoids 178217ca54c3Smrground trips to set up the extension. 178317ca54c3Smrg 178417ca54c3SmrgRRScreenChangeNotify is sent if RRSelectInput has requested it 178517ca54c3Smrgwhenever properties of the screen change, which may be due to external 178617ca54c3Smrgfactors, such as re-cabling a monitor, etc. 178717ca54c3Smrg 178817ca54c3Smrg┌─── 178917ca54c3Smrg RRScreenChangeNotify 179017ca54c3Smrg 179117ca54c3Smrg rotation: ROTATION; new rotation 179217ca54c3Smrg sequenceNumber: CARD16 low 16 bits of request seq. number 179317ca54c3Smrg timestamp: TIMESTAMP time screen was changed 179417ca54c3Smrg configTimestamp: TIMESTAMP time config data was changed 179517ca54c3Smrg root: WINDOW root window of screen 179617ca54c3Smrg window: WINDOW window requesting notification 179717ca54c3Smrg size-id: SIZEID index of new SCREENSIZE 179817ca54c3Smrg subpixelOrder: SUBPIXELORDER order of subpixels 179917ca54c3Smrg widthInPixels: CARD16 width in pixels of the new SCREENSIZE 180017ca54c3Smrg heightInPixels: CARD16 height in pixels of the new SCREENSIZE 180117ca54c3Smrg widthInMillimeters: CARD16 width in mm of the new SCREENSIZE 180217ca54c3Smrg heightInMillimeters: CARD16 height in mm of the new SCREENSIZE 180317ca54c3Smrg└─── 180417ca54c3Smrg This event is generated whenever the screen configuration is changed 180517ca54c3Smrg and sent to requesting clients. 'timestamp' indicates when the 180617ca54c3Smrg screen configuration was changed. 'configTimestamp' says when the 180717ca54c3Smrg last time the configuration was changed. 'root' is the root of the 180817ca54c3Smrg screen the change occurred on, 'window' is window selecting for this 180917ca54c3Smrg event. 'size-id' contains the index of the current size. 181017ca54c3Smrg 181117ca54c3Smrg This event is sent whenever the screen's configuration changes 181217ca54c3Smrg or if a new screen configuration becomes available that was 181317ca54c3Smrg not available in the past. In this case (config-timestamp in 181417ca54c3Smrg the event not being equal to the config-timestamp returned in 181517ca54c3Smrg the last call to RRGetScreenInfo), the client MUST call 181617ca54c3Smrg RRGetScreenInfo to update its view of possible screen 181717ca54c3Smrg configurations to have a correct view of possible screen 181817ca54c3Smrg organizations. 181917ca54c3Smrg 182017ca54c3Smrg Clients which select screen change notification events may be 182117ca54c3Smrg sent an event immediately if the screen configuration was 182217ca54c3Smrg changed between when they connected to the X server and 182317ca54c3Smrg selected for notification. This is to prevent a common race 182417ca54c3Smrg that might occur on log-in, where many applications start up 182517ca54c3Smrg just at the time when a display manager or log in script might 182617ca54c3Smrg be changing the screen size or configuration. 182717ca54c3Smrg 182817ca54c3Smrg Note that the sizes in this event reflect the new SCREENSIZE and 182917ca54c3Smrg thus will appear rotated by the 'rotation' parameter from the sizes 183017ca54c3Smrg of the screen itself. In other words, when rotation is 90 or 270, 183117ca54c3Smrg widthInPixels in this event will be the same as the height value 183217ca54c3Smrg from a ConfigureNotify that reflects the same size change. This 183317ca54c3Smrg will probably confuse developers. 183417ca54c3Smrg 183517ca54c3Smrg8.1 Events added in version 1.2 of the RandR extension 183617ca54c3Smrg 183717ca54c3Smrg┌─── 183817ca54c3Smrg RROutputChangeNotify: 183917ca54c3Smrg timestamp: TIMESTAMP time screen was reconfigured 184017ca54c3Smrg config-timestamp: TIMESTAMP time available config data was changed 184117ca54c3Smrg window: WINDOW window requesting notification 184217ca54c3Smrg output: OUTPUT output affected by change 184317ca54c3Smrg crtc: CRTC connected CRTC or None 184417ca54c3Smrg mode: MODE mode in use on CRTC or None 184517ca54c3Smrg connection: CONNECTION connection status 184617ca54c3Smrg└─── 184717ca54c3Smrg 184817ca54c3Smrg This event is generated whenever the available output configurations 184917ca54c3Smrg have changed and is sent to requesting clients. 'timestamp' 185017ca54c3Smrg indicates when the crtc configuration was changed by a client. 185117ca54c3Smrg 'config-timestamp' says when the last time the available 185217ca54c3Smrg configurations changed. 'root' is the root of the screen the change 185317ca54c3Smrg occurred on, 'window' is window selecting for this event. The 185417ca54c3Smrg precise change can be detected by examining the new state of the 185517ca54c3Smrg system. 185617ca54c3Smrg 185717ca54c3Smrg Changes in version 1.6 of the protocol: 185817ca54c3Smrg 185917ca54c3Smrg When a “non-desktop” device is connected, this event will be 186017ca54c3Smrg delivered when the connection status of the output changes, 186117ca54c3Smrg however the 'connection' value will be set to 'Disconnected'. 186217ca54c3Smrg 186317ca54c3Smrg┌─── 186417ca54c3Smrg RROutputPropertyNotify: 186517ca54c3Smrg window: WINDOW window requesting notification 186617ca54c3Smrg output: OUTPUT output affected by change 186717ca54c3Smrg atom: ATOM affected property 186817ca54c3Smrg time: TIMESTAMP time property was changed 186917ca54c3Smrg subpixel-order: SUBPIXELORDER order of subpixels 187017ca54c3Smrg state: { NewValue, Deleted } new property state 187117ca54c3Smrg└─── 187217ca54c3Smrg 187317ca54c3Smrg This event is reported to clients selecting RROutputPropertyChange 187417ca54c3Smrg on the window and is generated with state NewValue when a property 187517ca54c3Smrg of the window is changed using RRChangeOutputProperty even when 187617ca54c3Smrg adding zero-length data and when replacing all or part of a property 187717ca54c3Smrg with identical data. It is generated with state Deleted when a 187817ca54c3Smrg property of the window is deleted using either 187917ca54c3Smrg RRDeleteOutputProperty or RRGetOutputProperty. The timestamp 188017ca54c3Smrg indicates the server time when the property was changed. 188117ca54c3Smrg 188217ca54c3Smrg┌─── 188317ca54c3Smrg RRCrtcChangeNotify 188417ca54c3Smrg timestamp: TIMESTAMP time monitor was changed 188517ca54c3Smrg window: WINDOW window requesting notification 188617ca54c3Smrg crtc: CRTC CRTC which changed 188717ca54c3Smrg mode: MODE new mode 188817ca54c3Smrg rotation: ROTATION; new rotation 188917ca54c3Smrg x: INT16 x position of CRTC within screen 189017ca54c3Smrg y: INT16 y position of CRTC within screen 189117ca54c3Smrg width: CARD16 width of new configuration 189217ca54c3Smrg height: CARD16 height of new configuration 189317ca54c3Smrg└─── 189417ca54c3Smrg This event is generated whenever the CRTC configuration is changed 189517ca54c3Smrg and sent to requesting clients. 'timestamp' indicates when the 189617ca54c3Smrg CRTC configuration was changed. 'window' is window selecting for this 189717ca54c3Smrg event. 'mode' is the new mode, or None if the crtc is disabled. 189817ca54c3Smrg 'x' and 'y' mark the location in the screen where this CRTC 189917ca54c3Smrg is reading data. 'width' and 'height' indicate the size of the 190017ca54c3Smrg CRTC viewport, which is the mode size adjusted by the optional 190117ca54c3Smrg Border output property described below. 'x', 'y, 'width' and 190217ca54c3Smrg 'height' are all zero when 'mode' is None. 190317ca54c3Smrg 190417ca54c3Smrg This event is sent whenever the monitor's configuration changes 190517ca54c3Smrg or if a new monitor configuration becomes available that was 190617ca54c3Smrg not available in the past. In this case, the client MUST call 190717ca54c3Smrg RRGetCrtcInfo to update its view of possible monitor 190817ca54c3Smrg configurations to have a correct view of possible monitor 190917ca54c3Smrg organizations. 191017ca54c3Smrg 191117ca54c3Smrg Clients which select monitor change notification events may be 191217ca54c3Smrg sent an event immediately if the monitor configuration was 191317ca54c3Smrg changed between when they connected to the X server and 191417ca54c3Smrg selected for notification. This is to prevent a common race 191517ca54c3Smrg that might occur on log-in, where many applications start up 191617ca54c3Smrg just at the time when a display manager or log in script might 191717ca54c3Smrg be changing the monitor size or configuration. 191817ca54c3Smrg 191917ca54c3Smrg8.2 Events added in version 1.4 of the RandR extension 192017ca54c3Smrg 192117ca54c3Smrg┌─── 192217ca54c3Smrg RRProviderChangeNotify: 192317ca54c3Smrg timestamp: TIMESTAMP time screen was reconfigured 192417ca54c3Smrg window: WINDOW window requesting notification 192517ca54c3Smrg provider: PROVIDER provider affected by change 192617ca54c3Smrg└─── 192717ca54c3Smrg 192817ca54c3Smrg This event is generated whenever the role for a provider has changed 192917ca54c3Smrg and is sent to requesting clients. 'timestamp' indicates when the 193017ca54c3Smrg provider configuration was changed by a client. 'window' is the 193117ca54c3Smrg window selecting for this event. The precise change can be detected 193217ca54c3Smrg by examining the new state of the system. 193317ca54c3Smrg 193417ca54c3Smrg┌─── 193517ca54c3Smrg RRProviderPropertyNotify: 193617ca54c3Smrg window: WINDOW window requesting notification 193717ca54c3Smrg provider: PROVIDER provider affected by change 193817ca54c3Smrg atom: ATOM affected property 193917ca54c3Smrg time: TIMESTAMP time property was changed 194017ca54c3Smrg state: { NewValue, Deleted } new property state 194117ca54c3Smrg└─── 194217ca54c3Smrg 194317ca54c3Smrg This event is reported to clients selecting RRProviderPropertyChange 194417ca54c3Smrg on the window and is generated with state NewValue when a property 194517ca54c3Smrg of the window is changed using RRChangeProviderProperty even when 194617ca54c3Smrg adding zero-length data and when replacing all or part of a property 194717ca54c3Smrg with identical data. It is generated with state Deleted when a 194817ca54c3Smrg property of the window is deleted using either 194917ca54c3Smrg RRDeleteProviderProperty or RRGetProviderProperty. The timestamp 195017ca54c3Smrg indicates the server time when the property was changed. 195117ca54c3Smrg 195217ca54c3Smrg┌─── 195317ca54c3Smrg RRResourceChangeNotify: 195417ca54c3Smrg window: WINDOW window requesting notification 195517ca54c3Smrg time: TIMESTAMP time property was changed 195617ca54c3Smrg└─── 195717ca54c3Smrg 195817ca54c3Smrg This event is reported to clients selecting RRResourceChange 195917ca54c3Smrg on the window and is generated whenever the set of available 196017ca54c3Smrg RandR resources associated with the screen has changed, either 196117ca54c3Smrg created or destroyed. Querying the list of available resources 196217ca54c3Smrg with RRGetScreenResources and RRGetProviders will return the new set. 196317ca54c3Smrg 196417ca54c3Smrg8.3 Events added in version 1.6 of the RandR extension 196517ca54c3Smrg 196617ca54c3Smrg┌─── 196717ca54c3Smrg RRLeaseNotify: 196817ca54c3Smrg timestamp : TIMESTAMP time screen was reconfigured 196917ca54c3Smrg window : WINDOW window requesting notification 197017ca54c3Smrg lease : LEASE lease 197117ca54c3Smrg created : BOOL created/destroyed indicator 197217ca54c3Smrg└─── 197317ca54c3Smrg 197417ca54c3Smrg This event is generated whenever a lease has been created or 197517ca54c3Smrg destroyed and is sent to requesting clients. 'timestamp' 197617ca54c3Smrg indicates when the change happend. 'window' is the window 197717ca54c3Smrg selecting for this event. 197817ca54c3Smrg 197917ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 198017ca54c3Smrg 198117ca54c3Smrg9. Properties 198217ca54c3Smrg 198317ca54c3SmrgProperties are used for output specific parameters, and for announcing 198417ca54c3Smrgstatic or rarely changing data. Announced data is typically 198517ca54c3Smrgimmutable. Properties are also used for evaluating new parameters 198617ca54c3Smrgbefore adding them to the RandR protocol. 198717ca54c3Smrg 198817ca54c3SmrgThe following properties are hereby declared official, and drivers SHOULD 198917ca54c3Smrgprefix driver specific properties with '_', unless they are planned to be 199017ca54c3Smrgadded to this specification. List values, that are not declared by the table 199117ca54c3Smrgbelow, and will remain driver specific or are not planned to be added to this 199217ca54c3Smrgspecification, SHOULD be prefixed with "_" as well in order to avoid name 199317ca54c3Smrgspace or semantics clashes with future extensions of these values. 199417ca54c3Smrg 199517ca54c3SmrgBeginning with version 1.3 of the RandR extension, certain properties 199617ca54c3Smrgare mandatory and MUST be provided by implementations. Earlier 199717ca54c3Smrgversions of the RandR extension MAY provide these properties as well, 199817ca54c3Smrgas long as the semantics are not altered. Clients SHOULD fall back 199917ca54c3Smrggracefully to lower version functionality, though, if the driver 200017ca54c3Smrgdoesn't handle a mandatory property correctly. 200117ca54c3Smrg 200217ca54c3SmrgChanges in version 1.6 of the protocol: 200317ca54c3Smrg 200417ca54c3SmrgWhen a “non-desktop” device is connected, the property information 200517ca54c3Smrgwill be correct for the device, even though RRGetOutputInfo 200617ca54c3Smrgreports the device as disconnected. The “non-desktop” property will be 200717ca54c3Smrgset to 1 for such devices and not present on other devices. 200817ca54c3Smrg 200917ca54c3Smrg9.1 Known properties 201017ca54c3Smrg 201117ca54c3Smrg "Backlight" aka RR_PROPERTY_BACKLIGHT 201217ca54c3Smrg Type: INTEGER 201317ca54c3Smrg Format: 32 201417ca54c3Smrg Num. items: 1 201517ca54c3Smrg Flags: - 201617ca54c3Smrg Range/List: 0-x (driver specific) 201717ca54c3Smrg 201817ca54c3Smrg This property controls the brightness on laptop panels and equivalent 201917ca54c3Smrg displays with a backlight controller. The driver specific maximum 202017ca54c3Smrg value MUST turn the backlight to full brightness, 1 SHOULD turn the 202117ca54c3Smrg backlight to minimum brightness, 0 SHOULD turn the backlight off. 202217ca54c3Smrg 202317ca54c3Smrg "CloneList" aka RR_PROPERTY_CLONE_LIST 202417ca54c3Smrg Type: ATOM 202517ca54c3Smrg Format: 32 202617ca54c3Smrg Num. items: 2*n 202717ca54c3Smrg Flags: Immutable 202817ca54c3Smrg Range/List: 0- 202917ca54c3Smrg 203017ca54c3Smrg Some combinations of outputs on some cards cannot be served 203117ca54c3Smrg independently from each other, because they are wired up to the same 203217ca54c3Smrg encoder outputs. 203317ca54c3Smrg This property lists all output + signal format pairs that are 203417ca54c3Smrg driven together with this output, and thus can only be programmed in 203517ca54c3Smrg clone mode with the same CRTC. 203617ca54c3Smrg This property MUST be symmetric, but may change with changing signal 203717ca54c3Smrg format. I.e. if the property for DVI-1/VGA specifies VGA-1/VGA to be 203817ca54c3Smrg cloned, VGA-1/VGA has to list DVI-1/VGA as well. 203917ca54c3Smrg Outputs / format pairs listed in this property MUST be included in the 204017ca54c3Smrg CompatibilityList. 204117ca54c3Smrg 204217ca54c3Smrg "CompatibilityList" aka RR_PROPERTY_COMPATIBILITY_LIST 204317ca54c3Smrg Type: ATOM 204417ca54c3Smrg Format: 32 204517ca54c3Smrg Num items: 2*n 204617ca54c3Smrg Flags: Immutable 204717ca54c3Smrg Range/List: 0- 204817ca54c3Smrg 204917ca54c3Smrg Some combinations of outputs on some cards cannot be served at all, 205017ca54c3Smrg because the according encoder is only capable of driving one output at 205117ca54c3Smrg a time. 205217ca54c3Smrg This property lists all output + signal format pairs that can be 205317ca54c3Smrg driven together with this output. NULL atoms specify any output / any 205417ca54c3Smrg signal format, respectively. 205517ca54c3Smrg This property MUST be symmetric, but may change with changing signal 205617ca54c3Smrg format. I.e. if the property for DVI-1/TMDS specifies VGA-1/VGA to be 205717ca54c3Smrg available, VGA-1/VGA has to list DVI-1/TMDS as well. 205817ca54c3Smrg 205917ca54c3Smrg "ConnectorNumber" aka RR_PROPERTY_CONNECTOR_NUMBER 206017ca54c3Smrg Type: INTEGER 206117ca54c3Smrg Format: 32 206217ca54c3Smrg Num items: 1 206317ca54c3Smrg Flags: Immutable, Static 206417ca54c3Smrg Range/List: 0- 206517ca54c3Smrg 206617ca54c3Smrg Outputs that route their signal to the same connector MUST 206717ca54c3Smrg have the same connector number. Outputs with the same 206817ca54c3Smrg connector number MUST route their signal to the same 206917ca54c3Smrg connector, except if it is 0, which indicates unknown 207017ca54c3Smrg connectivity. 1 is called the primary connector, 2 the 207117ca54c3Smrg secondary. 3 is typically a TV connector, but that is completely 207217ca54c3Smrg driver / hardware dependent. 207317ca54c3Smrg Outputs with the same connector number SHOULD have the same 207417ca54c3Smrg connector type. Meaning and client behavior for mismatching 207517ca54c3Smrg connector types is undefined at the moment. 207617ca54c3Smrg 207717ca54c3Smrg "ConnectorType" aka RR_PROPERTY_CONNECTOR_TYPE 207817ca54c3Smrg Type: ATOM 207917ca54c3Smrg Format: 32 208017ca54c3Smrg Num items: 1 208117ca54c3Smrg Flags: Immutable, Static 208217ca54c3Smrg Range/List: unknown VGA DVI DVI‐I DVI‐A DVI‐D HDMI Panel 208317ca54c3Smrg TV TV-Composite TV-SVideo TV-Component 208417ca54c3Smrg TV-SCART TV-C4 DisplayPort 208517ca54c3Smrg 208617ca54c3Smrg Connector type, as far as known to the driver. 208717ca54c3Smrg Values with dashes (TV‐Composite) describe more specific versions of 208817ca54c3Smrg the base values (TV). The former SHOULD be used if the connector is 208917ca54c3Smrg not capable of producing other signal formats. The later SHOULD be 209017ca54c3Smrg used if the exact connector is unknown, or the connector is a 209117ca54c3Smrg multi‐format connector that is not described otherwise. DVI, for 209217ca54c3Smrg instance, SHOULD be handled like a DVI‐I connector, unless additional 209317ca54c3Smrg information is available to the user agent. PANEL describes 209417ca54c3Smrg laptop‐internal (normally LVDS) displays. TV, TV‐SCART, TV‐Component, 209517ca54c3Smrg and TV‐C4 with signal format VGA are valid combinations and describe 209617ca54c3Smrg RGB TV signals. 209717ca54c3Smrg 209817ca54c3Smrg "EDID" aka RR_PROPERTY_RANDR_EDID 209917ca54c3Smrg Type: INTEGER 210017ca54c3Smrg Format: 8 210117ca54c3Smrg Num items: n 210217ca54c3Smrg Flags: Immutable 210317ca54c3Smrg Range/List: - 210417ca54c3Smrg 210517ca54c3Smrg Raw EDID data from the device attached to the according 210617ca54c3Smrg output. Should include main EDID data and all extension 210717ca54c3Smrg blocks. Previously known as EdidData. 210817ca54c3Smrg 210917ca54c3Smrg “non-desktop” aka RR_PROPERTY_NON_DESKTOP 211017ca54c3Smrg Type: INTEGER 211117ca54c3Smrg Format: 32 211217ca54c3Smrg Num items: 1 211317ca54c3Smrg Flags Immutable 211417ca54c3Smrg Range/List: 0-1 211517ca54c3Smrg 211617ca54c3Smrg Indicates whether the device attached to this output should not 211717ca54c3Smrg be considered part of the normal desktop. When set to 0 or not 211817ca54c3Smrg present, the output should be presented as part of the 211917ca54c3Smrg desktop. 212017ca54c3Smrg 212117ca54c3Smrg When set to 1, the output should not be presented as part of 212217ca54c3Smrg the desktop. To not present an output as part of the desktop, 212317ca54c3Smrg the normal desktop environment should not be shown on this 212417ca54c3Smrg output, nor should desktop applications be positioned on it. 212517ca54c3Smrg 212617ca54c3Smrg When set to 1, RRGetOutputInfo will always report connection status 212717ca54c3Smrg Disconnected, but RROutputChangeNotify events will still be 212817ca54c3Smrg delivered when the connection status changes and all other 212917ca54c3Smrg information about the output and connected device will be 213017ca54c3Smrg reported correctly. 213117ca54c3Smrg 213217ca54c3Smrg "SignalFormat" aka RR_PROPERTY_SIGNAL_FORMAT 213317ca54c3Smrg Type: ATOM 213417ca54c3Smrg Format: 32 213517ca54c3Smrg Num items: 1 213617ca54c3Smrg Flags: - 213717ca54c3Smrg Range/List: unknown VGA TMDS LVDS Composite Composite-PAL 213817ca54c3Smrg Composite-NTSC Composite-SECAM SVideo 213917ca54c3Smrg Component DisplayPort 214017ca54c3Smrg 214117ca54c3Smrg Signal format / physical protocol format that is used for the 214217ca54c3Smrg specified output. valid-values lists all possible formats on this 214317ca54c3Smrg output, which SHOULD be a subset of the list above and MUST be static. 214417ca54c3Smrg Values with dashes (Composite-PAL) describe more specific versions of 214517ca54c3Smrg the base values (Composite) and SHOULD be used if known to the driver. 214617ca54c3Smrg A driver MAY change this property of an output if the underlying 214717ca54c3Smrg hardware indicates a protocol change (e.g. TV formats). Clients are 214817ca54c3Smrg allowed to change the signal format in order to select a different 214917ca54c3Smrg signal format (e.g. Composite etc.) or physical protocol (e.g. VGA or 215017ca54c3Smrg TMDS on DVI-I). 215117ca54c3Smrg Laptop panels SHOULD not be detected with this property, but rather by 215217ca54c3Smrg ConnectorType. 215317ca54c3Smrg 215417ca54c3Smrg "SignalProperties" aka RR_PROPERTY_SIGNAL_FORMAT 215517ca54c3Smrg Type: ATOM 215617ca54c3Smrg Format: 32 215717ca54c3Smrg Num items: n 215817ca54c3Smrg Flags: - 215917ca54c3Smrg Range/List: For Composite signals: 216017ca54c3Smrg NTSC NTSC-M NTSC-J NTSC-N NTSC-4.43 NTSC-film 216117ca54c3Smrg PAL PAL-B PAL-G PAL-H PAL-H PAL-I PAL-M PAL-D 216217ca54c3Smrg PAL-N PAL-Nc PAL-L PAL-60 216317ca54c3Smrg SECAM SECAM-L SECAM-B SECAM-G SECAM-D SECAM-K 216417ca54c3Smrg SECAM-H SECAM-K 216517ca54c3Smrg For TMDS signals: 216617ca54c3Smrg SingleLink DualLink 216717ca54c3Smrg For DisplayPort signals: 216817ca54c3Smrg Lane1 Lane2 Lane4 LowSpeed HiSpeed 216917ca54c3Smrg 217017ca54c3Smrg Properties of the signal format that is currently used for the 217117ca54c3Smrg specified output. valid-values lists all possible properties on this 217217ca54c3Smrg output, which SHOULD be a subset of the list above. It will change if 217317ca54c3Smrg SignalFormat changes. Multiple properties are allowed. 217417ca54c3Smrg Values with dashes (PAL-B) describe more specific versions of the base 217517ca54c3Smrg values (PAL) and SHOULD be used if known to the driver. A driver MAY 217617ca54c3Smrg change this property of an output if the underlying hardware indicates 217717ca54c3Smrg a signal change (e.g. TV formats). Clients are allowed to change the 217817ca54c3Smrg properties in order to select a different signal subformat. 217917ca54c3Smrg 218017ca54c3Smrg "Border" aka RR_PROPERTY_BORDER 218117ca54c3Smrg Type: CARDINAL 218217ca54c3Smrg Format: 16 218317ca54c3Smrg Num items: 0, 1, 2, or 4 218417ca54c3Smrg Flags: Immutable 218517ca54c3Smrg Range/List: 0- 218617ca54c3Smrg 218717ca54c3Smrg This property is a list of integers specifying adjustments for the edges 218817ca54c3Smrg of the displayed image. How this property is applied depends on the 218917ca54c3Smrg number of elements in the list: 219017ca54c3Smrg 219117ca54c3Smrg 0 = No border is applied 219217ca54c3Smrg 1 = A border of Border[0] is applied to all four sides of the image. 219317ca54c3Smrg 2 = A border of Border[0] is applied to the left and right sides of 219417ca54c3Smrg the image, and a border of Border[1] is applied to the top and 219517ca54c3Smrg bottom. 219617ca54c3Smrg 4 = The border dimensions are as follows: 219717ca54c3Smrg Border[0]: left 219817ca54c3Smrg Border[1]: top 219917ca54c3Smrg Border[2]: right 220017ca54c3Smrg Border[3]: bottom 220117ca54c3Smrg 220217ca54c3Smrg Note that how many configuration dimensions are actually supported is 220317ca54c3Smrg specified by the BorderDimensions property described below. If more than 220417ca54c3Smrg BorderDimensions values are specified, the extra values are ignored. 220517ca54c3Smrg 220617ca54c3Smrg These border dimensions shrink the region of pixels displayed by the 220717ca54c3Smrg CRTC by the corresponding number of rows or columns, and is applied 220817ca54c3Smrg after the CRTC transform. For example, a mode with a 1920x1080 active 220917ca54c3Smrg region, border dimensions of [ 10, 20, 30, 40 ], and a ½x scaling 221017ca54c3Smrg transform would display a rectangle of 940x510 pixels from the scanout 221117ca54c3Smrg pixmap scaled to 1880x1020 raster pixels positioned at (10, 20) in 221217ca54c3Smrg display raster space. 221317ca54c3Smrg 221417ca54c3Smrg Raster pixels in the border are black. 221517ca54c3Smrg 221617ca54c3Smrg This property is created with pending == TRUE, so changes are not 221717ca54c3Smrg applied immediately and instead take effect at the next RRSetCrtcConfig. 221817ca54c3Smrg 221917ca54c3Smrg If multiple outputs with different border settings are bound to the same 222017ca54c3Smrg CRTC when the configuration is changed, the behavior is undefined. 222117ca54c3Smrg 222217ca54c3Smrg If the length of the property is less than four when the CRTC is 222317ca54c3Smrg configured, the missing values are assumed to be zero. If the length is 222417ca54c3Smrg greater than four, the extra values are ignored. 222517ca54c3Smrg 222617ca54c3Smrg If the width of the mode is less than or equal to the sum of the left 222717ca54c3Smrg and right borders, then the left and right border settings are ignored. 222817ca54c3Smrg Likewise, if the height of the mode is less than or equal to the sum of 222917ca54c3Smrg the top and bottom borders, the top and bottom borders are ignored. 223017ca54c3Smrg 223117ca54c3Smrg "BorderDimensions" aka RR_PROPERTY_BORDER_DIMENSIONS 223217ca54c3Smrg Type: CARDINAL 223317ca54c3Smrg Format: 8 223417ca54c3Smrg Num items: 1 223517ca54c3Smrg Flags: Immutable, Static 223617ca54c3Smrg Range/List: 0, 1, 2, or 4 223717ca54c3Smrg 223817ca54c3Smrg This property lists how many border adjustment parameters can actually 223917ca54c3Smrg be used: 224017ca54c3Smrg 224117ca54c3Smrg 0 = no borders are supported 224217ca54c3Smrg 1 = a single border value is applied to all four sides of the image 224317ca54c3Smrg 2 = left/right and top/bottom borders can be specified independently 224417ca54c3Smrg 4 = all four borders can be specified independently 224517ca54c3Smrg 224617ca54c3Smrg "GUID" aka RR_PROPERTY_GUID 224717ca54c3Smrg Type: INTEGER 224817ca54c3Smrg Format: 8 224917ca54c3Smrg Num items: 16 225017ca54c3Smrg Flags: Immutable 225117ca54c3Smrg Range/List: - 225217ca54c3Smrg 225317ca54c3Smrg Some display devices, such as DisplayPort 1.2 devices, have globally 225417ca54c3Smrg unique identifiers. When such an identifier is available, this property 225517ca54c3Smrg contains its raw bytes. 225617ca54c3Smrg 225717ca54c3Smrg "TILE" aka RR_PROPERTY_RANDR_TILE 225817ca54c3Smrg Type: INTEGER 225917ca54c3Smrg Format: 32 226017ca54c3Smrg Num items: 8 226117ca54c3Smrg Flags: Immutable 226217ca54c3Smrg Range/List: - 226317ca54c3Smrg 226417ca54c3Smrg Tile monitors have an array of values describing the tiling, 226517ca54c3Smrg based on DisplayID v1.3 226617ca54c3Smrg 226717ca54c3Smrg The 8 elements are: 226817ca54c3Smrg 0: group id - The tile group identifier 226917ca54c3Smrg 1: flags - flags for tile group 227017ca54c3Smrg 0x1 = single monitor enclosure 227117ca54c3Smrg 2: number of horizontal tiles in tile group 227217ca54c3Smrg 3: number of vertical tiles in tile group 227317ca54c3Smrg 4: horizontal tile location for this tile 227417ca54c3Smrg 5: vertical tile location for this tile 227517ca54c3Smrg 6: horizontal tile size for this tile 227617ca54c3Smrg 7: vertical tile size for this tile 227717ca54c3Smrg 227817ca54c3Smrg9.2 Properties introduced with version 1.2 of the RandR extension 227917ca54c3Smrg 228017ca54c3SmrgProperty Immutable Mandatory since 228117ca54c3Smrg──────── ───────── ─────────────── 228217ca54c3SmrgEDID yes n/a 228317ca54c3Smrg 228417ca54c3SmrgEDID is provided by the RandR frontend, thus not driver specific. 228517ca54c3Smrg 228617ca54c3Smrg 228717ca54c3Smrg9.3 Properties introduced with version 1.3 of the RandR extension 228817ca54c3Smrg 228917ca54c3SmrgProperty Immutable Mandatory since 229017ca54c3Smrg──────── ───────── ─────────────── 229117ca54c3SmrgCloneList yes not mandatory 229217ca54c3SmrgCompatibilityList yes not mandatory 229317ca54c3SmrgConnectorNumber yes: static not mandatory 229417ca54c3SmrgConnectorType yes: static RandR 1.3 229517ca54c3SmrgSignalFormat no RandR 1.3 229617ca54c3SmrgSignalProperties no not mandatory 229717ca54c3Smrg 229817ca54c3Smrg9.4 Properties introduced with version 1.3.1 of the RandR extension 229917ca54c3Smrg 230017ca54c3SmrgProperty Immutable Mandatory since 230117ca54c3Smrg──────── ───────── ─────────────── 230217ca54c3SmrgBacklight no not mandatory 230317ca54c3Smrg 230417ca54c3Smrg9.5 Properties introduced with version 1.4.0 of the RandR extension 230517ca54c3Smrg 230617ca54c3SmrgProperty Immutable Mandatory since 230717ca54c3Smrg──────── ───────── ─────────────── 230817ca54c3SmrgBorder yes not mandatory 230917ca54c3SmrgBorderDimensions yes: static not mandatory 231017ca54c3Smrg 231117ca54c3Smrg9.6 Properties introduced with version 1.4.1 of the RandR extension 231217ca54c3Smrg 231317ca54c3SmrgProperty Immutable Mandatory since 231417ca54c3Smrg──────── ───────── ─────────────── 231517ca54c3SmrgGUID yes not mandatory 231617ca54c3Smrg 231717ca54c3Smrg9.7 Properties introduced with version 1.5 of the RandR extension 231817ca54c3Smrg 231917ca54c3SmrgProperty Immutable Mandatory since 232017ca54c3Smrg──────── ───────── ─────────────── 232117ca54c3SmrgTILE yes not mandatory 232217ca54c3Smrg 232317ca54c3Smrg9.8 Properties introduced with version 1.6 of the RandR extension 232417ca54c3Smrg 232517ca54c3SmrgProperty Immutable Mandatory since 232617ca54c3Smrg──────── ───────── ─────────────── 232717ca54c3Smrgnon-desktop yes not mandatory 232817ca54c3Smrg 232917ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 233017ca54c3Smrg 233117ca54c3Smrg10. Extension Versioning 233217ca54c3Smrg 233317ca54c3SmrgThe RandR extension was developed in parallel with the implementation 233417ca54c3Smrgto ensure the feasibility of various portions of the design. As 233517ca54c3Smrgportions of the extension are implemented, the version number of the 233617ca54c3Smrgextension has changed to reflect the portions of the standard provided. 233717ca54c3SmrgThis document describes the version 1.4 of the specification, the 233817ca54c3Smrgpartial implementations have version numbers less than that. Here's a 233917ca54c3Smrglist of what each version provided: 234017ca54c3Smrg 234117ca54c3Smrg 0.0: This prototype implemented resize and rotation in the 234217ca54c3Smrg TinyX server Used approximately the protocol described in 234317ca54c3Smrg the Usenix paper. Appeared in the TinyX server in 234417ca54c3Smrg XFree86 4.2, but not in the XFree86 main server. 234517ca54c3Smrg 234617ca54c3Smrg 0.1: Added subpixel order, added an event for subpixel order. 234717ca54c3Smrg This version was never checked in to XFree86 CVS. 234817ca54c3Smrg 234917ca54c3Smrg 1.0: Implements resize, rotation, and reflection. Implemented 235017ca54c3Smrg both in the XFree86 main server (size change only at this 235117ca54c3Smrg date), and fully (size change, rotation, and reflection) 235217ca54c3Smrg in XFree86's TinyX server. 235317ca54c3Smrg 235417ca54c3Smrg 1.1: Added refresh rates 235517ca54c3Smrg 235617ca54c3Smrg 1.2: Separate screens from CRTCs and outputs, switch to full VESA 235717ca54c3Smrg modes 235817ca54c3Smrg 235917ca54c3Smrg 1.3: Added cheap version of RRGetScreenResources. Added CRTC 236017ca54c3Smrg transformations. Added panning. Added primary outputs. 236117ca54c3Smrg Added standard properties. 236217ca54c3Smrg 236317ca54c3Smrg 1.4: Added provider objects for handling multi-GPU systems. 236417ca54c3Smrg 236517ca54c3Smrg 1.5: Added Monitors 236617ca54c3Smrg 236717ca54c3Smrg 1.6: Added Leases and non-desktop output information. 236817ca54c3Smrg 236917ca54c3SmrgCompatibility between 0.0 and 1.0 was *NOT* preserved, and 0.0 clients 237017ca54c3Smrgwill fail against 1.0 servers. The wire encoding op-codes were 237117ca54c3Smrgchanged for GetScreenInfo to ensure this failure in a relatively 237217ca54c3Smrggraceful way. Version 1.1 servers and clients are cross compatible with 237317ca54c3Smrg1.0. Version 1.1 is considered to be stable and we intend upward 237417ca54c3Smrgcompatibility from this point. Version 1.2 offers an extended model of the 237517ca54c3Smrgsystem with multiple output support. Version 1.3 adds a cheap version of 237617ca54c3SmrgGetScreenResources to avoid expensive DDC operations, CRTC transformations, 237717ca54c3Smrgpanning, and the primary output concept. Versions 1.2 through 1.6 are 237817ca54c3Smrgbackward-compatible with 1.1. 237917ca54c3Smrg 238017ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 238117ca54c3Smrg 238217ca54c3Smrg11. Relationship with other extensions 238317ca54c3Smrg 238417ca54c3SmrgTwo other extensions have a direct relationship with this extension. This 238517ca54c3Smrgsection attempts to explain how these three are supposed to work together. 238617ca54c3Smrg 238717ca54c3Smrg11.1 XFree86-VidModeExtension 238817ca54c3Smrg 238917ca54c3SmrgXFree86-VidModeExtension changes the configuration of a single monitor 239017ca54c3Smrgattached to the screen without changing the configuration of the screen 239117ca54c3Smrgitself. It provides the ability to specify new mode lines for the server to 239217ca54c3Smrguse along with selecting among existing mode lines. As it uses screen 239317ca54c3Smrgnumbers instead of window identifiers, it can be used to affect multiple 239417ca54c3Smrgmonitors in a single-screen Xinerama configuration. However, the association 239517ca54c3Smrgbetween screen numbers and root windows in a multi-Screen environment is not 239617ca54c3Smrgdefined by the extension. Version 2.0 of this extension added the ability to 239717ca54c3Smrgadjust the DAC values in a TrueColor server to modify the brightness curves 239817ca54c3Smrgof the display. 239917ca54c3Smrg 240017ca54c3SmrgAll of the utility of this extension is subsumed by RandR version 1.2, RandR 240117ca54c3Smrgshould be used in preference to XFree86-VidModeExtension where both are 240217ca54c3Smrgpresent. 240317ca54c3Smrg 240417ca54c3Smrg11.2 Xinerama 240517ca54c3Smrg 240617ca54c3SmrgXinerama provides a mechanism for describing the relationship between the 240717ca54c3Smrgoverall screen display and monitors placed within that area. As such, it 240817ca54c3Smrgprovides the query functionality of RandR 1.2 without any of the 240917ca54c3Smrgconfiguration functionality. Applications using Xinerama to discover 241017ca54c3Smrgmonitor geometry can continue to do so, with the caveat that they will not be 241117ca54c3Smrginformed of changes when they occur. However, Xinerama configuration data 241217ca54c3Smrgwill be updated, so applications selecting for RandR notification and 241317ca54c3Smrgre-querying the configuration with the Xinerama extension will get updated 241417ca54c3Smrginformation. It is probably better to view RandR as a superset of Xinerama 241517ca54c3Smrgat this point and use it in preference to Xinerama where both are present. 241617ca54c3Smrg 241717ca54c3Smrg ❧❧❧❧❧❧❧❧❧❧❧ 241817ca54c3Smrg 241917ca54c3SmrgAppendix A. Protocol Encoding 242017ca54c3Smrg 242117ca54c3SmrgSyntactic Conventions 242217ca54c3Smrg 242317ca54c3SmrgThis document uses the same syntactic conventions as the core X 242417ca54c3Smrgprotocol encoding document. 242517ca54c3Smrg 242617ca54c3SmrgA.1 Common Types 242717ca54c3Smrg 242817ca54c3Smrg┌─── 242917ca54c3Smrg ROTATION 243017ca54c3Smrg 0x0001 Rotate_0 243117ca54c3Smrg 0x0002 Rotate_90 243217ca54c3Smrg 0x0004 Rotate_180 243317ca54c3Smrg 0x0008 Rotate_270 243417ca54c3Smrg 0x0010 Reflect_X 243517ca54c3Smrg 0x0020 Reflect_Y 243617ca54c3Smrg└─── 243717ca54c3Smrg Used to encode both sets of possible rotations and individual 243817ca54c3Smrg selected rotations. 243917ca54c3Smrg 244017ca54c3Smrg┌─── 244117ca54c3Smrg RRSELECTMASK 244217ca54c3Smrg 0x0001 ScreenChangeNotifyMask 244317ca54c3Smrg 0x0002 CrtcChangeNotifyMask Added in version 1.2 244417ca54c3Smrg 0x0004 OutputChangeNotifyMask Added in version 1.2 244517ca54c3Smrg 0x0008 OutputPropertyNotifyMask Added in version 1.2 244617ca54c3Smrg 0x0010 ProviderChangeNotifyMask Added in version 1.4 244717ca54c3Smrg 0x0020 ProviderPropertyNotifyMask Added in version 1.4 244817ca54c3Smrg 0x0040 ResourceChangeNotifyMask Added in version 1.4 244917ca54c3Smrg 0x0080 LeaseNotifyMask Added in version 1.6 245017ca54c3Smrg 245117ca54c3Smrg└─── 245217ca54c3Smrg Event select mask for RRSelectInput 245317ca54c3Smrg 245417ca54c3Smrg┌─── 245517ca54c3Smrg RRCONFIGSTATUS 245617ca54c3Smrg 0x0 Success 245717ca54c3Smrg 0x1 InvalidConfigTime 245817ca54c3Smrg 0x2 InvalidTime 245917ca54c3Smrg 0x3 Failed 246017ca54c3Smrg└─── 246117ca54c3Smrg Return status for requests which depend on time. 246217ca54c3Smrg 246317ca54c3Smrg┌─── 246417ca54c3Smrg MODEINFO (32) Added in version 1.2 246517ca54c3Smrg 4 CARD32 id 246617ca54c3Smrg 2 CARD16 width in pixels 246717ca54c3Smrg 2 CARD16 height in pixels 246817ca54c3Smrg 4 CARD32 dot clock 246917ca54c3Smrg 2 CARD16 h sync start 247017ca54c3Smrg 2 CARD16 h sync end 247117ca54c3Smrg 2 CARD16 h total 247217ca54c3Smrg 2 CARD16 h skew 247317ca54c3Smrg 2 CARD16 v sync start 247417ca54c3Smrg 2 CARD16 v sync end 247517ca54c3Smrg 2 CARD16 v total 247617ca54c3Smrg 2 CARD16 name length 247717ca54c3Smrg 4 SETofMODEFLAG mode flags 247817ca54c3Smrg└─── 247917ca54c3Smrg 248017ca54c3Smrg An output mode specifies the complete CRTC timings for 248117ca54c3Smrg a specific mode. The vertical and horizontal synchronization rates 248217ca54c3Smrg can be computed given the dot clock and the h total/v total 248317ca54c3Smrg values. If the dot clock is zero, then all of the timing 248417ca54c3Smrg parameters and flags are not used, and must be zero as this 248517ca54c3Smrg indicates that the timings are unknown or otherwise unused. 248617ca54c3Smrg The name itself will be encoded separately in each usage. 248717ca54c3Smrg 248817ca54c3Smrg┌─── 248917ca54c3Smrg MODEFLAG 249017ca54c3Smrg 0x00000001 HSyncPositive 249117ca54c3Smrg 0x00000002 HSyncNegative 249217ca54c3Smrg 0x00000004 VSyncPositive 249317ca54c3Smrg 0x00000008 VSyncNegative 249417ca54c3Smrg 0x00000010 Interlace 249517ca54c3Smrg 0x00000020 DoubleScan 249617ca54c3Smrg 0x00000040 CSync 249717ca54c3Smrg 0x00000080 CSyncPositive 249817ca54c3Smrg 0x00000100 CSyncNegative 249917ca54c3Smrg 0x00000200 HSkewPresent 250017ca54c3Smrg 0x00000400 BCast 250117ca54c3Smrg 0x00000800 PixelMultiplex 250217ca54c3Smrg 0x00001000 DoubleClock 250317ca54c3Smrg 0x00002000 ClockDivideBy2 250417ca54c3Smrg└─── 250517ca54c3Smrg┌─── 250617ca54c3Smrg CONNECTION 250717ca54c3Smrg 0 Connected 250817ca54c3Smrg 1 Disconnected 250917ca54c3Smrg 2 UnknownConnection 251017ca54c3Smrg└─── 251117ca54c3Smrg 251217ca54c3Smrg┌─── 251317ca54c3Smrg PROVIDER_CAPS Added in version 1.4 251417ca54c3Smrg 0x00000001 SourceOutput 251517ca54c3Smrg 0x00000002 SinkOutput 251617ca54c3Smrg 0x00000004 SourceOffload 251717ca54c3Smrg 0x00000008 SinkOffload 251817ca54c3Smrg└─── 251917ca54c3Smrg 252017ca54c3SmrgA.1.1 Common Types added in version 1.5 of the protocol 252117ca54c3Smrg 252217ca54c3Smrg┌─── 252317ca54c3Smrg MONITORINFO (16 + 4*n) 252417ca54c3Smrg 4 ATOM name 252517ca54c3Smrg 1 BOOL primary 252617ca54c3Smrg 1 BOOL automatic 252717ca54c3Smrg 2 CARD16 noutputs 252817ca54c3Smrg 2 INT16 x 252917ca54c3Smrg 2 INT16 y 253017ca54c3Smrg 2 CARD16 width in pixels 253117ca54c3Smrg 2 CARD16 height in pixels 253217ca54c3Smrg 4 CARD32 width in millimeters 253317ca54c3Smrg 4 CARD32 height in millimeters 253417ca54c3Smrg 4*n OUTPUT outputs 253517ca54c3Smrg└─── 253617ca54c3Smrg 253717ca54c3SmrgA.2 Protocol Requests 253817ca54c3Smrg 253917ca54c3SmrgOpcodes 1 and 3 were used in the 0.0 protocols, and will return 254017ca54c3Smrgerrors if used in version 1.0. 254117ca54c3Smrg 254217ca54c3Smrg┌─── 254317ca54c3Smrg RRQueryVersion 254417ca54c3Smrg 254517ca54c3Smrg 1 CARD8 major opcode 254617ca54c3Smrg 1 0 RandR opcode 254717ca54c3Smrg 2 3 length 254817ca54c3Smrg 4 CARD32 major version 254917ca54c3Smrg 4 CARD32 minor version 255017ca54c3Smrg ▶ 255117ca54c3Smrg 1 1 Reply 255217ca54c3Smrg 1 unused 255317ca54c3Smrg 2 CARD16 sequence number 255417ca54c3Smrg 4 0 reply length 255517ca54c3Smrg 1 CARD32 major version 255617ca54c3Smrg 1 CARD32 minor version 255717ca54c3Smrg└─── 255817ca54c3Smrg┌─── 255917ca54c3Smrg RRSetScreenConfig 256017ca54c3Smrg 256117ca54c3Smrg 1 CARD8 major opcode 256217ca54c3Smrg 1 2 RandR opcode 256317ca54c3Smrg 2 6 length 256417ca54c3Smrg 4 WINDOW window on screen to be configured 256517ca54c3Smrg 4 TIMESTAMP timestamp 256617ca54c3Smrg 4 TIMESTAMP config timestamp 256717ca54c3Smrg 2 SIZEID size index 256817ca54c3Smrg 2 ROTATION rotation/reflection 256917ca54c3Smrg 2 CARD16 refresh rate (1.1 only) 257017ca54c3Smrg 2 CARD16 pad 257117ca54c3Smrg ▶ 257217ca54c3Smrg 1 1 Reply 257317ca54c3Smrg 1 RRCONFIGSTATUS status 257417ca54c3Smrg 2 CARD16 sequence number 257517ca54c3Smrg 4 0 reply length 257617ca54c3Smrg 4 TIMESTAMP new timestamp 257717ca54c3Smrg 4 TIMESTAMP new configuration timestamp 257817ca54c3Smrg 4 WINDOW root 257917ca54c3Smrg 2 SUBPIXELORDER subpixel order defined in Render 258017ca54c3Smrg 2 CARD16 pad4 258117ca54c3Smrg 4 CARD32 pad5 258217ca54c3Smrg 4 CARD32 pad6 258317ca54c3Smrg└─── 258417ca54c3Smrg┌─── 258517ca54c3Smrg RRSelectInput 258617ca54c3Smrg 258717ca54c3Smrg 1 CARD8 major opcode 258817ca54c3Smrg 1 4 RandR opcode 258917ca54c3Smrg 2 3 length 259017ca54c3Smrg 4 WINDOW window 259117ca54c3Smrg 2 SETofRRSELECTMASK enable 259217ca54c3Smrg 2 CARD16 pad 259317ca54c3Smrg└─── 259417ca54c3Smrg┌─── 259517ca54c3Smrg RRGetScreenInfo 259617ca54c3Smrg 259717ca54c3Smrg 1 CARD8 major opcode 259817ca54c3Smrg 1 5 RandR opcode 259917ca54c3Smrg 2 2 length 260017ca54c3Smrg 4 WINDOW window 260117ca54c3Smrg ▶ 260217ca54c3Smrg 1 1 Reply 260317ca54c3Smrg 1 CARD8 set of Rotations 260417ca54c3Smrg 2 CARD16 sequence number 260517ca54c3Smrg 4 0 reply length 260617ca54c3Smrg 4 WINDOW root window 260717ca54c3Smrg 4 TIMESTAMP timestamp 260817ca54c3Smrg 4 TIMESTAMP config timestamp 260917ca54c3Smrg 2 CARD16 number of SCREENSIZE following 261017ca54c3Smrg 2 SIZEID current size index 261117ca54c3Smrg 2 ROTATION current rotation and reflection 261217ca54c3Smrg 2 CARD16 current rate (added in version 1.1) 261317ca54c3Smrg 2 CARD16 length of rate info (number of CARD16s) 261417ca54c3Smrg 2 CARD16 pad 261517ca54c3Smrg 261617ca54c3Smrg SCREENSIZE 261717ca54c3Smrg 2 CARD16 width in pixels 261817ca54c3Smrg 2 CARD16 height in pixels 261917ca54c3Smrg 2 CARD16 width in millimeters 262017ca54c3Smrg 2 CARD16 height in millimeters 262117ca54c3Smrg 262217ca54c3Smrg REFRESH 262317ca54c3Smrg 2 CARD16 number of rates (n) 262417ca54c3Smrg 2n CARD16 rates 262517ca54c3Smrg└─── 262617ca54c3Smrg 262717ca54c3SmrgA.2.1 Protocol Requests added with version 1.2 262817ca54c3Smrg 262917ca54c3Smrg┌─── 263017ca54c3Smrg RRGetScreenSizeRange 263117ca54c3Smrg 1 CARD8 major opcode 263217ca54c3Smrg 1 6 RandR opcode 263317ca54c3Smrg 2 2 length 263417ca54c3Smrg 4 WINDOW window 263517ca54c3Smrg ▶ 263617ca54c3Smrg 1 1 Reply 263717ca54c3Smrg 1 unused 263817ca54c3Smrg 2 CARD16 sequence number 263917ca54c3Smrg 4 0 reply length 264017ca54c3Smrg 2 CARD16 minWidth 264117ca54c3Smrg 2 CARD16 minHeight 264217ca54c3Smrg 2 CARD16 maxWidth 264317ca54c3Smrg 2 CARD16 maxHeight 264417ca54c3Smrg 16 unused 264517ca54c3Smrg└─── 264617ca54c3Smrg┌─── 264717ca54c3Smrg RRSetScreenSize 264817ca54c3Smrg 1 CARD8 major opcode 264917ca54c3Smrg 1 7 RandR opcode 265017ca54c3Smrg 2 5 length 265117ca54c3Smrg 4 WINDOW window 265217ca54c3Smrg 2 CARD16 width 265317ca54c3Smrg 2 CARD16 height 265417ca54c3Smrg 4 CARD32 width in millimeters 265517ca54c3Smrg 4 CARD32 height in millimeters 265617ca54c3Smrg└─── 265717ca54c3Smrg┌─── 265817ca54c3Smrg RRGetScreenResources 265917ca54c3Smrg 1 CARD8 major opcode 266017ca54c3Smrg 1 8 RandR opcode 266117ca54c3Smrg 2 2 length 266217ca54c3Smrg 4 WINDOW window 266317ca54c3Smrg ▶ 266417ca54c3Smrg 1 1 Reply 266517ca54c3Smrg 1 unused 266617ca54c3Smrg 2 CARD16 sequence number 266717ca54c3Smrg 4 c+o+8m+(b+p)/4 reply length 266817ca54c3Smrg 4 TIMESTAMP timestamp 266917ca54c3Smrg 4 TIMESTAMP config-timestamp 267017ca54c3Smrg 2 c number of CRTCs 267117ca54c3Smrg 2 o number of outputs 267217ca54c3Smrg 2 m number of modeinfos 267317ca54c3Smrg 2 b total bytes in mode names 267417ca54c3Smrg 8 unused 267517ca54c3Smrg 4c LISTofCRTC crtcs 267617ca54c3Smrg 4o LISTofOUTPUT outputs 267717ca54c3Smrg 32m LISTofMODEINFO modeinfos 267817ca54c3Smrg b STRING8 mode names 267917ca54c3Smrg p unused, p=pad(b) 268017ca54c3Smrg└─── 268117ca54c3Smrg┌─── 268217ca54c3Smrg RRGetOutputInfo 268317ca54c3Smrg 1 CARD8 major opcode 268417ca54c3Smrg 1 9 RandR opcode 268517ca54c3Smrg 2 3 length 268617ca54c3Smrg 4 OUTPUT output 268717ca54c3Smrg 4 TIMESTAMP config-timestamp 268817ca54c3Smrg ▶ 268917ca54c3Smrg 1 1 Reply 269017ca54c3Smrg 1 RRCONFIGSTATUS status 269117ca54c3Smrg 2 CARD16 sequence number 269217ca54c3Smrg 4 1+c+m+(n+p)/4 reply length 269317ca54c3Smrg 4 TIMESTAMP timestamp 269417ca54c3Smrg 4 CRTC current connected crtc 269517ca54c3Smrg 4 CARD32 width in millimeters 269617ca54c3Smrg 4 CARD32 height in millimeters 269717ca54c3Smrg 1 CONNECTION connection 269817ca54c3Smrg 1 SUBPIXELORDER subpixel-order 269917ca54c3Smrg 2 c number of CRTCs 270017ca54c3Smrg 2 m number of modes 270117ca54c3Smrg 2 p number of preferred modes 270217ca54c3Smrg 2 o number of clones 270317ca54c3Smrg 2 n length of name 270417ca54c3Smrg 4c LISTofCRTC crtcs 270517ca54c3Smrg 4m LISTofMODE modes 270617ca54c3Smrg 4o LISTofOUTPUT clones 270717ca54c3Smrg n STRING8 name 270817ca54c3Smrg p unused, p=pad(n) 270917ca54c3Smrg└─── 271017ca54c3Smrg┌─── 271117ca54c3Smrg RRListOutputProperties 271217ca54c3Smrg 1 CARD8 major opcode 271317ca54c3Smrg 1 10 RandR opcode 271417ca54c3Smrg 2 2 length 271517ca54c3Smrg 4 OUTPUT output 271617ca54c3Smrg ▶ 271717ca54c3Smrg 1 1 Reply 271817ca54c3Smrg 1 unused 271917ca54c3Smrg 2 CARD16 sequence number 272017ca54c3Smrg 4 n reply length 272117ca54c3Smrg 2 n number of ATOMs in atoms 272217ca54c3Smrg 22 unused 272317ca54c3Smrg 4n LISTofATOM atoms 272417ca54c3Smrg└─── 272517ca54c3Smrg┌─── 272617ca54c3Smrg RRQueryOutputProperty 272717ca54c3Smrg 1 CARD8 major opcode 272817ca54c3Smrg 1 11 RandR opcode 272917ca54c3Smrg 2 3 request length 273017ca54c3Smrg 4 OUTPUT output 273117ca54c3Smrg 4 ATOM property 273217ca54c3Smrg ▶ 273317ca54c3Smrg 1 1 Reply 273417ca54c3Smrg 1 unused 273517ca54c3Smrg 2 CARD16 sequence number 273617ca54c3Smrg 4 n reply length 273717ca54c3Smrg 1 BOOL pending 273817ca54c3Smrg 1 BOOL range 273917ca54c3Smrg 1 BOOL immutable 274017ca54c3Smrg 21 unused 274117ca54c3Smrg 4n LISTofINT32 valid values 274217ca54c3Smrg└─── 274317ca54c3Smrg┌─── 274417ca54c3Smrg RRConfigureOutputProperty 274517ca54c3Smrg 1 CARD8 major opcode 274617ca54c3Smrg 1 12 RandR opcode 274717ca54c3Smrg 2 4+n request length 274817ca54c3Smrg 4 OUTPUT output 274917ca54c3Smrg 4 ATOM property 275017ca54c3Smrg 1 BOOL pending 275117ca54c3Smrg 1 BOOL range 275217ca54c3Smrg 2 unused 275317ca54c3Smrg 4n LISTofINT32 valid values 275417ca54c3Smrg└─── 275517ca54c3Smrg┌─── 275617ca54c3Smrg RRChangeOutputProperty 275717ca54c3Smrg 1 CARD8 major opcode 275817ca54c3Smrg 1 13 RandR opcode 275917ca54c3Smrg 2 6+(n+p)/4 request length 276017ca54c3Smrg 4 OUTPUT output 276117ca54c3Smrg 4 ATOM property 276217ca54c3Smrg 4 ATOM type 276317ca54c3Smrg 1 CARD8 format 276417ca54c3Smrg 1 mode 276517ca54c3Smrg 0 Replace 276617ca54c3Smrg 1 Prepend 276717ca54c3Smrg 2 Append 276817ca54c3Smrg 2 unused 276917ca54c3Smrg 4 CARD32 length of data in format units 277017ca54c3Smrg (= n for format = 8) 277117ca54c3Smrg (= n/2 for format = 16) 277217ca54c3Smrg (= n/4 for format = 32) 277317ca54c3Smrg n LISTofBYTE data 277417ca54c3Smrg (n is a multiple of 2 for format = 16) 277517ca54c3Smrg (n is a multiple of 4 for format = 32) 277617ca54c3Smrg p unused, p=pad(n) 277717ca54c3Smrg└─── 277817ca54c3Smrg┌─── 277917ca54c3Smrg RRDeleteOutputProperty 278017ca54c3Smrg 1 CARD8 major opcode 278117ca54c3Smrg 1 14 RandR opcode 278217ca54c3Smrg 2 3 request length 278317ca54c3Smrg 4 OUTPUT output 278417ca54c3Smrg 4 ATOM property 278517ca54c3Smrg└─── 278617ca54c3Smrg┌─── 278717ca54c3Smrg RRGetOutputProperty 278817ca54c3Smrg 1 CARD8 major opcode 278917ca54c3Smrg 1 15 RandR opcode 279017ca54c3Smrg 2 7 request length 279117ca54c3Smrg 4 OUTPUT output 279217ca54c3Smrg 4 ATOM property 279317ca54c3Smrg 4 ATOM type 279417ca54c3Smrg 0 AnyPropertyType 279517ca54c3Smrg 4 CARD32 long-offset 279617ca54c3Smrg 4 CARD32 long-length 279717ca54c3Smrg 1 BOOL delete 279817ca54c3Smrg 1 BOOL pending 279917ca54c3Smrg 2 unused 280017ca54c3Smrg ▶ 280117ca54c3Smrg 1 1 Reply 280217ca54c3Smrg 1 CARD8 format 280317ca54c3Smrg 2 CARD16 sequence number 280417ca54c3Smrg 4 (n+p)/4 reply length 280517ca54c3Smrg 4 ATOM type 280617ca54c3Smrg 0 None 280717ca54c3Smrg 4 CARD32 bytes-after 280817ca54c3Smrg 4 CARD32 length of value in format units 280917ca54c3Smrg (= 0 for format = 0) 281017ca54c3Smrg (= n for format = 8) 281117ca54c3Smrg (= n/2 for format = 16) 281217ca54c3Smrg (= n/4 for format = 32) 281317ca54c3Smrg 12 unused 281417ca54c3Smrg n LISTofBYTE value 281517ca54c3Smrg (n is zero for format = 0) 281617ca54c3Smrg (n is a multiple of 2 for format = 16) 281717ca54c3Smrg (n is a multiple of 4 for format = 32) 281817ca54c3Smrg p unused, p=pad(n) 281917ca54c3Smrg└─── 282017ca54c3Smrg┌─── 282117ca54c3Smrg RRCreateMode 282217ca54c3Smrg 1 CARD8 major opcode 282317ca54c3Smrg 1 16 RandR opcode 282417ca54c3Smrg 2 10+(n+p)/4 length 282517ca54c3Smrg 4 WINDOW window 282617ca54c3Smrg 32 MODEINFO mode 282717ca54c3Smrg n STRING8 mode name 282817ca54c3Smrg p unused, p=pad(n) 282917ca54c3Smrg ▶ 283017ca54c3Smrg 1 1 Reply 283117ca54c3Smrg 1 unused 283217ca54c3Smrg 2 CARD16 sequence number 283317ca54c3Smrg 4 0 reply length 283417ca54c3Smrg 4 MODE mode 283517ca54c3Smrg 20 unused 283617ca54c3Smrg└─── 283717ca54c3Smrg┌─── 283817ca54c3Smrg RRDestroyMode 283917ca54c3Smrg 1 CARD8 major opcode 284017ca54c3Smrg 1 17 RandR opcode 284117ca54c3Smrg 2 2 length 284217ca54c3Smrg 4 MODE mode 284317ca54c3Smrg└─── 284417ca54c3Smrg┌─── 284517ca54c3Smrg RRAddOutputMode 284617ca54c3Smrg 1 CARD8 major opcode 284717ca54c3Smrg 1 18 RandR opcode 284817ca54c3Smrg 2 3 length 284917ca54c3Smrg 4 OUTPUT output 285017ca54c3Smrg 4 MODE mode 285117ca54c3Smrg└─── 285217ca54c3Smrg┌─── 285317ca54c3Smrg RRDeleteOutputMode 285417ca54c3Smrg 1 CARD8 major opcode 285517ca54c3Smrg 1 19 RandR opcode 285617ca54c3Smrg 2 3 length 285717ca54c3Smrg 4 OUTPUT output 285817ca54c3Smrg 4 MODE mode 285917ca54c3Smrg└─── 286017ca54c3Smrg┌─── 286117ca54c3Smrg RRGetCrtcInfo 286217ca54c3Smrg 1 CARD8 major opcode 286317ca54c3Smrg 1 20 RandR opcode 286417ca54c3Smrg 2 3 length 286517ca54c3Smrg 4 CRTC crtc 286617ca54c3Smrg 4 TIMESTAMP config-timestamp 286717ca54c3Smrg ▶ 286817ca54c3Smrg 1 1 Reply 286917ca54c3Smrg 1 RRCONFIGSTATUS status 287017ca54c3Smrg 2 CARD16 sequence number 287117ca54c3Smrg 4 o+p reply length 287217ca54c3Smrg 4 TIMESTAMP timestamp 287317ca54c3Smrg 2 INT16 x 287417ca54c3Smrg 2 INT16 y 287517ca54c3Smrg 2 CARD16 width 287617ca54c3Smrg 2 CARD16 height 287717ca54c3Smrg 4 MODE mode 287817ca54c3Smrg 2 ROTATION current rotation and reflection 287917ca54c3Smrg 2 ROTATION set of possible rotations 288017ca54c3Smrg 2 o number of outputs 288117ca54c3Smrg 2 p number of possible outputs 288217ca54c3Smrg 4o LISTofOUTPUT outputs 288317ca54c3Smrg 4p LISTofOUTPUT possible outputs 288417ca54c3Smrg└─── 288517ca54c3Smrg┌─── 288617ca54c3Smrg RRSetCrtcConfig 288717ca54c3Smrg 1 CARD8 major opcode 288817ca54c3Smrg 1 21 RandR opcode 288917ca54c3Smrg 2 7+n length 289017ca54c3Smrg 4 CRTC crtc 289117ca54c3Smrg 4 TIMESTAMP timestamp 289217ca54c3Smrg 4 TIMESTAMP config timestamp 289317ca54c3Smrg 2 INT16 x 289417ca54c3Smrg 2 INT16 y 289517ca54c3Smrg 4 MODE mode 289617ca54c3Smrg 2 ROTATION rotation/reflection 289717ca54c3Smrg 2 unused 289817ca54c3Smrg 4n LISTofOUTPUT outputs 289917ca54c3Smrg ▶ 290017ca54c3Smrg 1 1 Reply 290117ca54c3Smrg 1 RRCONFIGSTATUS status 290217ca54c3Smrg 2 CARD16 sequence number 290317ca54c3Smrg 4 0 reply length 290417ca54c3Smrg 4 TIMESTAMP new timestamp 290517ca54c3Smrg 20 unused 290617ca54c3Smrg└─── 290717ca54c3Smrg┌─── 290817ca54c3Smrg RRGetCrtcGammaSize 290917ca54c3Smrg 1 CARD8 major opcode 291017ca54c3Smrg 1 22 RandR opcode 291117ca54c3Smrg 2 2 length 291217ca54c3Smrg 4 CRTC crtc 291317ca54c3Smrg ▶ 291417ca54c3Smrg 1 1 Reply 291517ca54c3Smrg 1 unused 291617ca54c3Smrg 2 CARD16 sequence number 291717ca54c3Smrg 4 0 reply length 291817ca54c3Smrg 2 CARD16 size 291917ca54c3Smrg 22 unused 292017ca54c3Smrg└─── 292117ca54c3Smrg┌─── 292217ca54c3Smrg RRGetCrtcGamma 292317ca54c3Smrg 1 CARD8 major opcode 292417ca54c3Smrg 1 23 RandR opcode 292517ca54c3Smrg 2 2 length 292617ca54c3Smrg 4 CRTC crtc 292717ca54c3Smrg ▶ 292817ca54c3Smrg 1 1 Reply 292917ca54c3Smrg 1 unused 293017ca54c3Smrg 2 CARD16 sequence number 293117ca54c3Smrg 4 (6n+p)/4 reply length 293217ca54c3Smrg 2 n size 293317ca54c3Smrg 20 unused 293417ca54c3Smrg 2n LISTofCARD16 red 293517ca54c3Smrg 2n LISTofCARD16 green 293617ca54c3Smrg 2n LISTofCARD16 blue 293717ca54c3Smrg p unused, p=pad(6n) 293817ca54c3Smrg└─── 293917ca54c3Smrg┌─── 294017ca54c3Smrg RRSetCrtcGamma 294117ca54c3Smrg 1 CARD8 major opcode 294217ca54c3Smrg 1 24 RandR opcode 294317ca54c3Smrg 2 3+(6n+p)/4 length 294417ca54c3Smrg 4 CRTC crtc 294517ca54c3Smrg 2 n size 294617ca54c3Smrg 2 unused 294717ca54c3Smrg 2n LISTofCARD16 red 294817ca54c3Smrg 2n LISTofCARD16 green 294917ca54c3Smrg 2n LISTofCARD16 blue 295017ca54c3Smrg p unused, p=pad(6n) 295117ca54c3Smrg└─── 295217ca54c3Smrg 295317ca54c3SmrgA.2.2 Protocol Requests added with version 1.3 295417ca54c3Smrg 295517ca54c3Smrg┌─── 295617ca54c3Smrg RRGetScreenResourcesCurrent 295717ca54c3Smrg 1 CARD8 major opcode 295817ca54c3Smrg 1 25 RandR opcode 295917ca54c3Smrg 2 2 length 296017ca54c3Smrg 4 WINDOW window 296117ca54c3Smrg ▶ 296217ca54c3Smrg 1 1 Reply 296317ca54c3Smrg 1 unused 296417ca54c3Smrg 2 CARD16 sequence number 296517ca54c3Smrg 4 c+o+8m+(b+p)/4 reply length 296617ca54c3Smrg 4 TIMESTAMP timestamp 296717ca54c3Smrg 4 TIMESTAMP config-timestamp 296817ca54c3Smrg 2 c number of CRTCs 296917ca54c3Smrg 2 o number of outputs 297017ca54c3Smrg 2 m number of modeinfos 297117ca54c3Smrg 2 b total bytes in mode names 297217ca54c3Smrg 8 unused 297317ca54c3Smrg 4c LISTofCRTC crtcs 297417ca54c3Smrg 4o LISTofOUTPUT outputs 297517ca54c3Smrg 32m LISTofMODEINFO modeinfos 297617ca54c3Smrg b STRING8 mode names 297717ca54c3Smrg p unused, p=pad(b) 297817ca54c3Smrg└─── 297917ca54c3Smrg 298017ca54c3Smrg┌─── 298117ca54c3Smrg RRSetCrtcTransform 298217ca54c3Smrg 1 CARD8 major opcode 298317ca54c3Smrg 1 26 RandR opcode 298417ca54c3Smrg 2 12+(n+p)/4+v length 298517ca54c3Smrg 4 CRTC crtc 298617ca54c3Smrg 36 TRANSFORM transform 298717ca54c3Smrg 2 CARD16 filter length 298817ca54c3Smrg 2 unused 298917ca54c3Smrg n STRING8 filter name 299017ca54c3Smrg p unused, p=pad(n) 299117ca54c3Smrg 4v FIXED filter params 299217ca54c3Smrg└─── 299317ca54c3Smrg 299417ca54c3Smrg┌─── 299517ca54c3Smrg RRGetCrtcTransform 299617ca54c3Smrg 1 CARD8 major opcode 299717ca54c3Smrg 1 27 RandR opcode 299817ca54c3Smrg 2 2 length 299917ca54c3Smrg 4 CRTC crtc 300017ca54c3Smrg ▶ 300117ca54c3Smrg 1 1 Reply 300217ca54c3Smrg 1 unused 300317ca54c3Smrg 2 CARD16 sequence number 300417ca54c3Smrg 4 16+(pn+pnp)/4+(cn+cnp)/4+pf+cf reply length 300517ca54c3Smrg 36 TRANSFORM pending transform 300617ca54c3Smrg 1 BOOL has transforms 300717ca54c3Smrg 3 unused 300817ca54c3Smrg 36 TRANSFORM current transform 300917ca54c3Smrg 4 unused 301017ca54c3Smrg 2 pn pending filter name length 301117ca54c3Smrg 2 pf pending filter num params 301217ca54c3Smrg 2 cn current filter name length 301317ca54c3Smrg 2 cf current filter num params 301417ca54c3Smrg pn STRING8 pending filter name 301517ca54c3Smrg pnp unused, pnp=pad(pn) 301617ca54c3Smrg 4*pf FIXED pending filter params 301717ca54c3Smrg cn STRING8 current filter name 301817ca54c3Smrg cnp unused, cnp=pad(cn) 301917ca54c3Smrg 4*cf FIXED current filter params 302017ca54c3Smrg└─── 302117ca54c3Smrg 302217ca54c3Smrg┌─── 302317ca54c3Smrg RRGetPanning 302417ca54c3Smrg 1 CARD8 major opcode 302517ca54c3Smrg 1 28 RandR opcode 302617ca54c3Smrg 2 2 length 302717ca54c3Smrg 4 CRTC crtc 302817ca54c3Smrg ▶ 302917ca54c3Smrg 1 1 Reply 303017ca54c3Smrg 1 RRCONFIGSTATUS status 303117ca54c3Smrg 2 CARD16 sequence number 303217ca54c3Smrg 4 1 reply length 303317ca54c3Smrg 4 TIMESTAMP timestamp 303417ca54c3Smrg 2 CARD16 left 303517ca54c3Smrg 2 CARD16 top 303617ca54c3Smrg 2 CARD16 width 303717ca54c3Smrg 2 CARD16 height 303817ca54c3Smrg 2 CARD16 track_left 303917ca54c3Smrg 2 CARD16 track_top 304017ca54c3Smrg 2 CARD16 track_width 304117ca54c3Smrg 2 CARD16 track_height 304217ca54c3Smrg 2 INT16 border_left 304317ca54c3Smrg 2 INT16 border_top 304417ca54c3Smrg 2 INT16 border_right 304517ca54c3Smrg 2 INT16 border_bottom 304617ca54c3Smrg└─── 304717ca54c3Smrg┌─── 304817ca54c3Smrg RRSetPanning 304917ca54c3Smrg 1 CARD8 major opcode 305017ca54c3Smrg 1 29 RandR opcode 305117ca54c3Smrg 2 9 length 305217ca54c3Smrg 4 CRTC crtc 305317ca54c3Smrg 4 TIMESTAMP timestamp 305417ca54c3Smrg 2 CARD16 left 305517ca54c3Smrg 2 CARD16 top 305617ca54c3Smrg 2 CARD16 width 305717ca54c3Smrg 2 CARD16 height 305817ca54c3Smrg 2 CARD16 track_left 305917ca54c3Smrg 2 CARD16 track_top 306017ca54c3Smrg 2 CARD16 track_width 306117ca54c3Smrg 2 CARD16 track_height 306217ca54c3Smrg 2 INT16 border_left 306317ca54c3Smrg 2 INT16 border_top 306417ca54c3Smrg 2 INT16 border_right 306517ca54c3Smrg 2 INT16 border_bottom 306617ca54c3Smrg ▶ 306717ca54c3Smrg 1 1 Reply 306817ca54c3Smrg 1 RRCONFIGSTATUS status 306917ca54c3Smrg 2 CARD16 sequence number 307017ca54c3Smrg 4 0 reply length 307117ca54c3Smrg 4 TIMESTAMP new timestamp 307217ca54c3Smrg 20 unused 307317ca54c3Smrg└─── 307417ca54c3Smrg 307517ca54c3Smrg┌─── 307617ca54c3Smrg RRSetOutputPrimary 307717ca54c3Smrg 1 CARD8 major opcode 307817ca54c3Smrg 1 30 RandR opcode 307917ca54c3Smrg 2 3 length 308017ca54c3Smrg 4 WINDOW window 308117ca54c3Smrg 4 OUTPUT output 308217ca54c3Smrg└─── 308317ca54c3Smrg 308417ca54c3Smrg┌─── 308517ca54c3Smrg RRGetOutputPrimary 308617ca54c3Smrg 1 CARD8 major opcode 308717ca54c3Smrg 1 31 RandR opcode 308817ca54c3Smrg 2 2 length 308917ca54c3Smrg 4 WINDOW window 309017ca54c3Smrg ▶ 309117ca54c3Smrg 1 1 Reply 309217ca54c3Smrg 1 unused 309317ca54c3Smrg 2 CARD16 sequence number 309417ca54c3Smrg 4 CARD32 length 309517ca54c3Smrg 4 OUTPUT output 309617ca54c3Smrg 4 CARD32 pad1 309717ca54c3Smrg 4 CARD32 pad2 309817ca54c3Smrg 4 CARD32 pad3 309917ca54c3Smrg 4 CARD32 pad4 310017ca54c3Smrg└─── 310117ca54c3Smrg 310217ca54c3SmrgA.2.3 Protocol Requests added with version 1.4 310317ca54c3Smrg 310417ca54c3Smrg┌─── 310517ca54c3Smrg RRGetProviders 310617ca54c3Smrg 1 CARD8 major opcode 310717ca54c3Smrg 1 32 RandR opcode 310817ca54c3Smrg 2 2 length 310917ca54c3Smrg 4 WINDOW window 311017ca54c3Smrg ▶ 311117ca54c3Smrg 1 1 Reply 311217ca54c3Smrg 1 unused 311317ca54c3Smrg 2 CARD16 sequence number 311417ca54c3Smrg 4 p length 311517ca54c3Smrg 4 TIMESTAMP timestamp 311617ca54c3Smrg 2 p number of Providers 311717ca54c3Smrg 18 unused 311817ca54c3Smrg 4p LISTofPROVIDERS providers 311917ca54c3Smrg└─── 312017ca54c3Smrg┌─── 312117ca54c3Smrg RRGetProviderInfo 312217ca54c3Smrg 1 CARD8 major opcode 312317ca54c3Smrg 1 33 RandR opcode 312417ca54c3Smrg 2 3 length 312517ca54c3Smrg 4 PROVIDER provider 312617ca54c3Smrg 4 TIMESTAMP config-timestamp 312717ca54c3Smrg ▶ 312817ca54c3Smrg 1 1 Reply 312917ca54c3Smrg 1 RRCONFIGSTATUS status 313017ca54c3Smrg 2 CARD16 sequence number 313117ca54c3Smrg 4 1+c+o+(a*2)+(n+p)/4 reply length 313217ca54c3Smrg 4 TIMESTAMP timestamp 313317ca54c3Smrg 4 CARD32 capabilities 313417ca54c3Smrg 2 c number of crtcs 313517ca54c3Smrg 2 o number of outputs 313617ca54c3Smrg 2 a number of associated providers 313717ca54c3Smrg 2 n length of name 313817ca54c3Smrg 8 unused 313917ca54c3Smrg 4c LISTofCRTC crtcs 314017ca54c3Smrg 4o LISTofOUTPUT outputs 314117ca54c3Smrg 4a LISTofPROVIDER associated providers 314217ca54c3Smrg 4a CARD32 associated provider capability 314317ca54c3Smrg n STRING8 name 314417ca54c3Smrg p unused, p=pad(n) 314517ca54c3Smrg└─── 314617ca54c3Smrg┌─── 314717ca54c3Smrg RRSetProviderOffloadSink 314817ca54c3Smrg 1 CARD8 major opcode 314917ca54c3Smrg 1 34 RandR opcode 315017ca54c3Smrg 2 4 length 315117ca54c3Smrg 4 PROVIDER provider 315217ca54c3Smrg 4 PROVIDER offload sink provider 315317ca54c3Smrg 4 TIMESTAMP timestamp 315417ca54c3Smrg└─── 315517ca54c3Smrg┌─── 315617ca54c3Smrg RRSetProviderOutputSource 315717ca54c3Smrg 1 CARD8 major opcode 315817ca54c3Smrg 1 35 RandR opcode 315917ca54c3Smrg 2 4 length 316017ca54c3Smrg 4 PROVIDER provider 316117ca54c3Smrg 4 PROVIDER output source provider 316217ca54c3Smrg 4 TIMESTAMP timestamp 316317ca54c3Smrg└─── 316417ca54c3Smrg┌─── 316517ca54c3Smrg RRListProviderProperties 316617ca54c3Smrg 1 CARD8 major opcode 316717ca54c3Smrg 1 36 RandR opcode 316817ca54c3Smrg 2 2 length 316917ca54c3Smrg 4 PROVIDER provider 317017ca54c3Smrg ▶ 317117ca54c3Smrg 1 1 Reply 317217ca54c3Smrg 1 unused 317317ca54c3Smrg 2 CARD16 sequence number 317417ca54c3Smrg 4 n reply length 317517ca54c3Smrg 2 n number of ATOMs in atoms 317617ca54c3Smrg 22 unused 317717ca54c3Smrg 4n LISTofATOM atoms 317817ca54c3Smrg└─── 317917ca54c3Smrg┌─── 318017ca54c3Smrg RRQueryProviderProperty 318117ca54c3Smrg 1 CARD8 major opcode 318217ca54c3Smrg 1 37 RandR opcode 318317ca54c3Smrg 2 3 request length 318417ca54c3Smrg 4 PROVIDER provider 318517ca54c3Smrg 4 ATOM property 318617ca54c3Smrg ▶ 318717ca54c3Smrg 1 1 Reply 318817ca54c3Smrg 1 unused 318917ca54c3Smrg 2 CARD16 sequence number 319017ca54c3Smrg 4 n reply length 319117ca54c3Smrg 1 BOOL pending 319217ca54c3Smrg 1 BOOL range 319317ca54c3Smrg 1 BOOL immutable 319417ca54c3Smrg 21 unused 319517ca54c3Smrg 4n LISTofINT32 valid values 319617ca54c3Smrg└─── 319717ca54c3Smrg┌─── 319817ca54c3Smrg RRConfigureProviderProperty 319917ca54c3Smrg 1 CARD8 major opcode 320017ca54c3Smrg 1 38 RandR opcode 320117ca54c3Smrg 2 4+n request length 320217ca54c3Smrg 4 PROVIDER provider 320317ca54c3Smrg 4 ATOM property 320417ca54c3Smrg 1 BOOL pending 320517ca54c3Smrg 1 BOOL range 320617ca54c3Smrg 2 unused 320717ca54c3Smrg 4n LISTofINT32 valid values 320817ca54c3Smrg└─── 320917ca54c3Smrg┌─── 321017ca54c3Smrg RRChangeProviderProperty 321117ca54c3Smrg 1 CARD8 major opcode 321217ca54c3Smrg 1 39 RandR opcode 321317ca54c3Smrg 2 6+(n+p)/4 request length 321417ca54c3Smrg 4 PROVIDER provider 321517ca54c3Smrg 4 ATOM property 321617ca54c3Smrg 4 ATOM type 321717ca54c3Smrg 1 CARD8 format 321817ca54c3Smrg 1 mode 321917ca54c3Smrg 0 Replace 322017ca54c3Smrg 1 Prepend 322117ca54c3Smrg 2 Append 322217ca54c3Smrg 2 unused 322317ca54c3Smrg 4 CARD32 length of data in format units 322417ca54c3Smrg (= n for format = 8) 322517ca54c3Smrg (= n/2 for format = 16) 322617ca54c3Smrg (= n/4 for format = 32) 322717ca54c3Smrg n LISTofBYTE data 322817ca54c3Smrg (n is a multiple of 2 for format = 16) 322917ca54c3Smrg (n is a multiple of 4 for format = 32) 323017ca54c3Smrg p unused, p=pad(n) 323117ca54c3Smrg└─── 323217ca54c3Smrg┌─── 323317ca54c3Smrg RRDeleteProviderProperty 323417ca54c3Smrg 1 CARD8 major opcode 323517ca54c3Smrg 1 40 RandR opcode 323617ca54c3Smrg 2 3 request length 323717ca54c3Smrg 4 PROVIDER provider 323817ca54c3Smrg 4 ATOM property 323917ca54c3Smrg└─── 324017ca54c3Smrg┌─── 324117ca54c3Smrg RRGetProviderProperty 324217ca54c3Smrg 1 CARD8 major opcode 324317ca54c3Smrg 1 41 RandR opcode 324417ca54c3Smrg 2 7 request length 324517ca54c3Smrg 4 PROVIDER provider 324617ca54c3Smrg 4 ATOM property 324717ca54c3Smrg 4 ATOM type 324817ca54c3Smrg 0 AnyPropertyType 324917ca54c3Smrg 4 CARD32 long-offset 325017ca54c3Smrg 4 CARD32 long-length 325117ca54c3Smrg 1 BOOL delete 325217ca54c3Smrg 1 BOOL pending 325317ca54c3Smrg 2 unused 325417ca54c3Smrg ▶ 325517ca54c3Smrg 1 1 Reply 325617ca54c3Smrg 1 CARD8 format 325717ca54c3Smrg 2 CARD16 sequence number 325817ca54c3Smrg 4 (n+p)/4 reply length 325917ca54c3Smrg 4 ATOM type 326017ca54c3Smrg 0 None 326117ca54c3Smrg 4 CARD32 bytes-after 326217ca54c3Smrg 4 CARD32 length of value in format units 326317ca54c3Smrg (= 0 for format = 0) 326417ca54c3Smrg (= n for format = 8) 326517ca54c3Smrg (= n/2 for format = 16) 326617ca54c3Smrg (= n/4 for format = 32) 326717ca54c3Smrg 12 unused 326817ca54c3Smrg n LISTofBYTE value 326917ca54c3Smrg (n is zero for format = 0) 327017ca54c3Smrg (n is a multiple of 2 for format = 16) 327117ca54c3Smrg (n is a multiple of 4 for format = 32) 327217ca54c3Smrg p unused, p=pad(n) 327317ca54c3Smrg└─── 327417ca54c3Smrg 327517ca54c3SmrgA.2.4 Protocol Requests added with version 1.5 327617ca54c3Smrg 327717ca54c3Smrg┌─── 327817ca54c3Smrg RRGetMonitors 327917ca54c3Smrg 1 CARD8 major opcode 328017ca54c3Smrg 1 42 RandR opcode 328117ca54c3Smrg 2 2 request length 328217ca54c3Smrg 4 WINDOW window 328317ca54c3Smrg ▶ 328417ca54c3Smrg 1 1 Reply 328517ca54c3Smrg 1 unused 328617ca54c3Smrg 2 CARD16 sequence number 328717ca54c3Smrg 4 6*n + o reply length 328817ca54c3Smrg 4 TIMESTAMP timestamp 328917ca54c3Smrg 4 n nmonitors 329017ca54c3Smrg 4 o noutputs 329117ca54c3Smrg 12 unused 329217ca54c3Smrg n*24+o*4 LISTofMONITORINFO monitors 329317ca54c3Smrg└─── 329417ca54c3Smrg┌─── 329517ca54c3Smrg RRSetMonitor 329617ca54c3Smrg 1 CARD8 major opcode 329717ca54c3Smrg 1 43 RandR opcode 329817ca54c3Smrg 2 6 + o request length 329917ca54c3Smrg 4 WINDOW window 330017ca54c3Smrg 24+o MONITORINFO monitorinfo 330117ca54c3Smrg└─── 330217ca54c3Smrg┌─── 330317ca54c3Smrg RRDeleteMonitor 330417ca54c3Smrg 1 CARD8 major opcode 330517ca54c3Smrg 1 44 RandR opcode 330617ca54c3Smrg 2 3 request length 330717ca54c3Smrg 4 WINDOW window 330817ca54c3Smrg 4 ATOM name 330917ca54c3Smrg└─── 331017ca54c3Smrg 331117ca54c3SmrgA.3 Protocol Events 331217ca54c3Smrg 331317ca54c3Smrg┌─── 331417ca54c3Smrg RRScreenChangeNotify 331517ca54c3Smrg 1 Base + 0 code 331617ca54c3Smrg 1 ROTATION new rotation and reflection 331717ca54c3Smrg 2 CARD16 sequence number 331817ca54c3Smrg 4 TIMESTAMP timestamp 331917ca54c3Smrg 4 TIMESTAMP configuration timestamp 332017ca54c3Smrg 4 WINDOW root window 332117ca54c3Smrg 4 WINDOW request window 332217ca54c3Smrg 2 SIZEID size ID 332317ca54c3Smrg 2 SUBPIXELORDER subpixel order defined in Render 332417ca54c3Smrg 2 CARD16 width in pixels 332517ca54c3Smrg 2 CARD16 height in pixels 332617ca54c3Smrg 2 CARD16 width in millimeters 332717ca54c3Smrg 2 CARD16 height in millimeters 332817ca54c3Smrg└─── 332917ca54c3Smrg 333017ca54c3SmrgA.3.1 Protocol Events added with version 1.2 333117ca54c3Smrg 333217ca54c3Smrg┌─── 333317ca54c3Smrg RRCrtcChangeNotify 333417ca54c3Smrg 1 Base + 1 code 333517ca54c3Smrg 1 0 sub-code 333617ca54c3Smrg 2 CARD16 sequence number 333717ca54c3Smrg 4 TIMESTAMP timestamp 333817ca54c3Smrg 4 WINDOW request window 333917ca54c3Smrg 4 CRTC crtc affected 334017ca54c3Smrg 4 MODE mode in use 334117ca54c3Smrg 2 ROTATION new rotation and reflection 334217ca54c3Smrg 2 unused 334317ca54c3Smrg 2 INT16 x 334417ca54c3Smrg 2 INT16 y 334517ca54c3Smrg 2 CARD16 width 334617ca54c3Smrg 2 CARD16 height 334717ca54c3Smrg└─── 334817ca54c3Smrg┌─── 334917ca54c3Smrg RROutputChangeNotify 335017ca54c3Smrg 1 Base + 1 code 335117ca54c3Smrg 1 1 sub-code 335217ca54c3Smrg 2 CARD16 sequence number 335317ca54c3Smrg 4 TIMESTAMP timestamp 335417ca54c3Smrg 4 TIMESTAMP configuration timestamp 335517ca54c3Smrg 4 WINDOW request window 335617ca54c3Smrg 4 OUTPUT output affected 335717ca54c3Smrg 4 CRTC crtc in use 335817ca54c3Smrg 4 MODE mode in use 335917ca54c3Smrg 2 ROTATION rotation in use 336017ca54c3Smrg 1 CONNECTION connection status 336117ca54c3Smrg 1 SUBPIXELORDER subpixel order 336217ca54c3Smrg└─── 336317ca54c3Smrg┌─── 336417ca54c3Smrg RROutputPropertyNotify 336517ca54c3Smrg 1 Base + 1 code 336617ca54c3Smrg 1 2 sub-code 336717ca54c3Smrg 2 CARD16 sequence number 336817ca54c3Smrg 4 WINDOW window 336917ca54c3Smrg 4 OUTPUT output 337017ca54c3Smrg 4 ATOM atom 337117ca54c3Smrg 4 TIMESTAMP time 337217ca54c3Smrg 1 state 337317ca54c3Smrg 0 NewValue 337417ca54c3Smrg 1 Deleted 337517ca54c3Smrg 11 unused 337617ca54c3Smrg└─── 337717ca54c3Smrg 337817ca54c3SmrgA.3.2 Protocol Events added with version 1.4 337917ca54c3Smrg┌─── 338017ca54c3Smrg RRProviderChangeNotify 338117ca54c3Smrg 1 Base + 1 code 338217ca54c3Smrg 1 3 sub-code 338317ca54c3Smrg 2 CARD16 sequence number 338417ca54c3Smrg 4 TIMESTAMP timestamp 338517ca54c3Smrg 4 WINDOW request window 338617ca54c3Smrg 4 PROVIDER provider affected 338717ca54c3Smrg 16 unused 338817ca54c3Smrg└─── 338917ca54c3Smrg┌─── 339017ca54c3Smrg RRProviderPropertyNotify 339117ca54c3Smrg 1 Base + 1 code 339217ca54c3Smrg 1 4 sub-code 339317ca54c3Smrg 2 CARD16 sequence number 339417ca54c3Smrg 4 WINDOW window 339517ca54c3Smrg 4 PROVIDER provider 339617ca54c3Smrg 4 ATOM atom 339717ca54c3Smrg 4 TIMESTAMP time 339817ca54c3Smrg 1 state 339917ca54c3Smrg 0 NewValue 340017ca54c3Smrg 1 Deleted 340117ca54c3Smrg 11 unused 340217ca54c3Smrg└─── 340317ca54c3Smrg┌─── 340417ca54c3Smrg RRResourceChangeNotify 340517ca54c3Smrg 1 Base + 1 code 340617ca54c3Smrg 1 5 sub-code 340717ca54c3Smrg 2 CARD16 sequence number 340817ca54c3Smrg 4 TIMESTAMP time 340917ca54c3Smrg 4 WINDOW window 341017ca54c3Smrg 20 unused 341117ca54c3Smrg└─── 341217ca54c3SmrgA.4 Protocol Errors 341317ca54c3Smrg 341417ca54c3Smrg┌─── 341517ca54c3Smrg ERRORS 341617ca54c3Smrg Base + 0 Output 341717ca54c3Smrg Base + 1 Crtc 341817ca54c3Smrg Base + 2 Mode 341917ca54c3Smrg Base + 3 Provider 342017ca54c3Smrg└─── 342117ca54c3Smrg 342217ca54c3SmrgBibliography 342317ca54c3Smrg 342417ca54c3Smrg[RANDR] Gettys, Jim and Keith Packard, "The X Resize and Rotate 342517ca54c3Smrg Extension - RandR", Proceedings of the 2001 USENIX Annual 342617ca54c3Smrg Technical Conference, Boston, MA 342717ca54c3Smrg 342817ca54c3Smrg[RENDER] 342917ca54c3Smrg Packard, Keith, "The X Rendering Extension", work in progress, 3430ea1d6981Smrg https://gitlab.freedesktop.org/xorg/proto/xorgproto/raw/master/renderproto.txt 3431