There is a bug the definition of class GetCrtcInfo in Xlib/ext/randr.py. The reply struct lacks 'x' and 'y' properties. According to the definition of RRGetCrtcInfo in xrandr specification (http://cgit.freedesktop.org/xorg/proto/randrproto/tree/randrproto.txt) there should be "rq.Card16('x')" and "rq.Card16('y')" before "rq.Card16('width')" in GetCrtcInfo class definition. Now this request (and so the function xrandr_get_crtc_info()) fails.
Here is a minimal script that fails:
#!/usr/bin/env python
import Xlib.display
display = Xlib.display.Display()
root = display.screen().root
res = root.xrandr_get_screen_resources_current()
for crtc_id in res.crtcs:
print display.xrandr_get_crtc_info(crtc_id, res.config_timestamp)
Traceback:
File "minimal.py", line 10, in <module>
print display.xrandr_get_crtc_info(crtc_id, res.config_timestamp)
File "/usr/lib/pymodules/python2.6/Xlib/ext/randr.py", line 734, in get_crtc_info
config_timestamp=config_timestamp,
File "/usr/lib/pymodules/python2.6/Xlib/protocol/rq.py", line 1428, in __init__
self.reply()
File "/usr/lib/pymodules/python2.6/Xlib/protocol/rq.py", line 1440, in reply
self._display.send_and_recv(request = self._serial)
File "/usr/lib/pymodules/python2.6/Xlib/protocol/display.py", line 547, in send_and_recv
gotreq = self.parse_response(request)
File "/usr/lib/pymodules/python2.6/Xlib/protocol/display.py", line 634, in parse_response
gotreq = self.parse_request_response(request) or gotreq
File "/usr/lib/pymodules/python2.6/Xlib/protocol/display.py", line 720, in parse_request_response
req._parse_response(self.data_recv[:self.request_length])
File "/usr/lib/pymodules/python2.6/Xlib/protocol/rq.py", line 1452, in _parse_response
self._data, d = self._reply.parse_binary(data, self._display, rawdict = 1)
File "/usr/lib/pymodules/python2.6/Xlib/protocol/rq.py", line 1280, in parse_binary
return self.parse_binary(data, display, rawdict)
File "<string>", line 14, in parse_binary
File "/usr/lib/pymodules/python2.6/Xlib/protocol/rq.py", line 489, in parse_binary_value
v = struct.unpack(scode, data[pos: pos + slen])
struct.error: unpack requires a string argument of length 4
I have attached a patch that fixes it.
The patch fixing this bug.