I wrote up a shell script that takes read-edid and creates an Xconfig
file on the fly. Basically I took my xconfig script and copied
everything above the "Monitor" section to one file, and everything below
the "Monitor" section to another file. Then I parsed the output of
read-edid-1.4.1 (from http://john.fremlin.de/programs/linux/read-edid/)
so that it worked as a proper modeline entry for xconfig. This script
may take some editing (some paths and such need to be changed). I also
wrote this for my embedded environment in which we only want to auto
detect monitors whose resolution is 1024x768 or 1280x1024. If it isn't
either of those (our program doesn't look good in higher or lower
resolution) I copy over a default 1024, lower color xconfig file. You
will possibly want to change that part of the script. This works
particularly well for me as I am using ramdisk and my xconfig file is in
ramdisk (as is /tmp). Let me know your thoughts.

-Michael


-----Original Message-----
From: Michael Hamilton 
Sent: Tuesday, October 26, 2004 1:58 PM
To: [EMAIL PROTECTED]
Subject: RE: [XFree86] Detecting Supported VESA Video Modes

That's a great suggestion! Thank you so much, I am now able to
intelligently pick which configuration to use for multiple monitors.

-----Original Message-----
From: Ryan Underwood [mailto:[EMAIL PROTECTED] 
Sent: Tuesday, October 26, 2004 12:58 PM
To: [EMAIL PROTECTED]
Subject: Re: [XFree86] Detecting Supported VESA Video Modes


You could use the standalone read-edid utility.

On Tue, Oct 26, 2004 at 10:34:20AM -0700, Michael Hamilton wrote:
> Is there an X command which lists the supported VESA Video Modes for a
> monitor? I am trying to find any information about a monitor before X
> starts. Thanks.
> 
> Michael
> 
> 
> _______________________________________________
> XFree86 mailing list
> [EMAIL PROTECTED]
> http://XFree86.Org/mailman/listinfo/xfree86
> 

-- 
Ryan Underwood, <[EMAIL PROTECTED]>


_______________________________________________
XFree86 mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xfree86

#!/bin/bash
TOP_X=/path/to/top_x_file
BOTTOM_X=/path/to/bottom_x_file
DEFAULT_X=/path/to/XF86Config.default
G_EDID=/path/to/get-edid
P_EDID=/path/to/parse-edid
X_DEST=/etc/X11/XF86Config
######################
#Loading Data        #
######################
$G_EDID 2>/tmp/tmp_error | $P_EDID 2>>/tmp/tmp_error | /bin/sed -e 's/Mode      
/Modeline /g' -e 's/Identifier \".*/Identifier \"Monitor0\"/g' -e '/    EndMode/d' -e 
's/DotClock       //g' -e 's/HTimings     //g' -e 's/VTimings     //g' -e 's/Flags     
   \"+HSync\" \"+VSync\"/+hsync +vsync/g' -e 's/Flags      \"-HSync\" 
\"-VSync\"/-hsync -vsync/g' > /tmp/x_mid
######################
#Begin Error Checking#
######################
if [[ ! -s /tmp/tmp_error ]]
then
  #The error File is zero Length
  #We will just load defaults and exit.
  echo "STARTUPX: I was unable to get an error status. Loading default Xconfig file" 
>> /var/log/messages
  cp $DEFAULT_X $X_DEST
  exit 0
fi
if [[ ! -s /tmp/x_mid ]]
then
  #The Monitor File is zero Length
  #We will just load defaults and exit.
  echo "STARTUPX: I was unable to store any information in /tmp/x_mid. Loading default 
Xconfig file" >> /var/log/messages
  cp $DEFAULT_X $X_DEST
  exit 0
fi
if [[ `/bin/grep "output block unchanged" /tmp/tmp_error` ]]
then
  #This means that the get EDID call to the BIOS didn't work: you didn't get the EDID 
data.
  #We will just load defaults and exit.
  echo "STARTUPX: The Get-EDID call to BIOS did not work, no EDID data. Loading 
default Xconfig file" >> /var/log/messages
  cp $DEFAULT_X $X_DEST
  exit 0
fi
if [[ `/bin/grep "first bytes*match EDID version 1 header" /tmp/tmp_error` ]]
then
  #The EDID did not start with the EDID version 1 header. Try getting the EDID some 
other way
  #We will just load defaults and exit.
  echo "STARTUPX: Did not have EDID Version 1 header. Loading default Xconfig file" >> 
/var/log/messages
  cp $DEFAULT_X $X_DEST
  exit 0
fi
if [[ `/bin/grep "checksum failed" /tmp/tmp_error` ]]
then
  #The EDID is probably corrupt. Do not blindly trust any modelines generated.
  #We will just load defaults and exit.
  echo "STARTUPX:The EDID is probably corrupt. Do not blindly trust any modelines 
generated. Loading default Xconfig file" >> /var/log/messages
  cp $DEFAULT_X $X_DEST
  exit 0
fi

if [[ `/bin/grep "do not trust output" /tmp/tmp_error` ]]
then
  #Dont Trust it - well thats what it told me!
  #We will just load defaults and exit.
  echo "STARTUPX: parse-edid or get-edid told me I had unreliable data. Loading 
default Xconfig file" >> /var/log/messages
  cp $DEFAULT_X $X_DEST
  exit 0
fi
if [[ `/bin/grep "Modeline " /tmp/x_mid | cut -f2 | cut -f2 -d\"` != "1024x768" ]]
then
  if [[ `/bin/grep "Modeline " /tmp/x_mid | cut -f2 | cut -f2 -d\"` != "1280x1024" ]]
  then
    #We are either too low or too high!
    #We will just load defaults and exit.
    echo "STARTUPX: My resolution was not one of the two supported resolutions. 
Loading default Xconfig file" >> /var/log/messages
    cp $DEFAULT_X $X_DEST
    exit 0
  fi
fi

######################
#No Errors So we     #
#Continue on to      #
#write out to Xfig   #
######################
cat $TOP_X > $X_DEST
cat /tmp/x_mid >> $X_DEST
cat $BOTTOM_X >> $X_DEST
rm -rf /tmp/x_mid
rm -rf /tmp/tmp_error
echo "STARTUPX: Properly Built X config file on the FLY" >> /var/log/messages
exit 1

Reply via email to