import sys,os

def getEDIDFromXorgLog():
	hexdata = ''
        if sys.platform != 'linux2': return hexdata

	if not os.environ.has_key("DISPLAY"):
		return hexdata

	display = os.environ["DISPLAY"]
	if display.split(':')[0] != '':
		return hexdata

	try:
		displaynum =  (display.split(':')[1]).split('.')[0]
	except:
		return hexdata

	fname = "/var/log/Xorg."+str(displaynum)+".log"


	try:
		f = open(fname)
		lines = f.readlines()
		for iline in range(len(lines)):
			if lines[iline].find("EDID (in hex)")>-1:
				for i in range(1,9):
					hexdata = hexdata + lines[iline+i].split(' ')[2].strip()
		f.close()
	except:
		return hexdata

	return hexdata

def parseHexEDID(hexdata):
	# See http://www.vesa.org/Public/EEDIDguideV1.pdf
	if len(hexdata)<128: return ""
	for i in range(0,len(hexdata)-2,2):
		if i/2 == int('36',16) or i/2 == int('48',16) or i/2 == int('5A',16) or i/2 == int('6C',16): 
			vinfo = hexdata[i:i+2] + hexdata[i+2:i+4] + hexdata[i+4:i+6] + hexdata[i+6:i+8]  + hexdata[i+8:i+10]
			if int(hexdata[i:i+2],16) == 0 and int(hexdata[i+2:i+4],16) == 0 and int(hexdata[i+4:i+6],16) == 0 and int(hexdata[i+8:i+10],16) == 0 and int(hexdata[i+6:i+8],16) == int('fc',16):
				minfo = ''
				for offset in range(10,46,2):
					if int(hexdata[i+offset:i+offset+2],16) == int('a',16): break
					minfo = minfo + chr(int(hexdata[i+offset:i+offset+2],16))
				return minfo
	return ""

if __name__ == "__main__":
	hexdata = getEDIDFromXorgLog()
	monitor = parseHexEDID(hexdata)
	print monitor

