From 3a594ad38241da5087d34584ba70ca06e7be97c4 Mon Sep 17 00:00:00 2001
From: James Meyer <james.meyer@operamail.com>
Date: Thu, 23 Aug 2012 19:40:15 -0500
Subject: LinHES-config:  added print_xorg_res.py   this feeds the ui to list
 valid modelines as X detects them.  This provides a consistent interface.
 Also updated xconfig.sh  todo something with the XRes value and configuring
 xorg.

---
 abs/core/LinHES-config/PKGBUILD          |  21 ++---
 abs/core/LinHES-config/print_xorg_res.py | 128 +++++++++++++++++++++++++++++++
 abs/core/LinHES-config/xconfig.sh        |  47 ++++++++++--
 abs/core/mythinstall/PKGBUILD            |   2 +-
 4 files changed, 182 insertions(+), 16 deletions(-)
 create mode 100644 abs/core/LinHES-config/print_xorg_res.py

diff --git a/abs/core/LinHES-config/PKGBUILD b/abs/core/LinHES-config/PKGBUILD
index d395bbc..0ea9210 100644
--- a/abs/core/LinHES-config/PKGBUILD
+++ b/abs/core/LinHES-config/PKGBUILD
@@ -1,11 +1,11 @@
 pkgname=LinHES-config
 pkgver=2.3
-pkgrel=81
+pkgrel=83
 conflicts=(MythVantage-config MythVantage-config-dev LinHES-config-dev LinHes-config )
 pkgdesc="Install and configure your system"
 depends=('bc' 'libstatgrab'  'mysql-python' 'expect' 'curl' 'dnsutils' 'parted'
 	 'sg3_utils' 'nmbscan' 'system-templates' 'rsync' 'python-parted'
-	 'python-pexpect' 'python-netifaces' 
+	 'python-pexpect' 'python-netifaces'
 	 'python-iplib' 'mythinstall>=2-10' 'sudo')
 #LinHES-timezone
 arch=('i686' 'x86_64')
@@ -46,8 +46,9 @@ source=(mv_install.py 09_mythvantge_runit_grub
         systemconfig.py
 	myth_user_call.py
 	mythvantage.cfg
-	config-sudo.rules 
-	hdhr.conf blacklist_nouveau.conf  blacklist_pcspkr.conf )
+	config-sudo.rules
+	hdhr.conf blacklist_nouveau.conf  blacklist_pcspkr.conf
+	print_xorg_res.py )
 
 backup=(etc/mythvantage.cfg)
 install=config.install
@@ -95,6 +96,7 @@ build() {
     install -m 0755 mv_hostype.py $MVDIR/bin/
     install -m 0755 mv_supplemental.py $MVDIR/bin/
     install -m 0755 systemconfig.py $MVDIR/bin/
+    install -m 0755 print_xorg_res.py $MVDIR/bin/
     install -m 0755 mythvantage.cfg $startdir/pkg/etc/
 
     #README file displayed on install
@@ -107,13 +109,13 @@ build() {
 
     #sudo rules
     mkdir -p $startdir/pkg/etc/sudoers.d/
-    chmod 750 $startdir/pkg/etc/sudoers.d/ 
-    chown -R root:root $startdir/pkg/etc/sudoers.d 
+    chmod 750 $startdir/pkg/etc/sudoers.d/
+    chown -R root:root $startdir/pkg/etc/sudoers.d
     install -o root -g root -m 0750 config-sudo.rules $startdir/pkg/etc/sudoers.d/config_sudo
 
     #sysctrl conf
     install -o root -g root  -D -m 0755 hdhr.conf $startdir/pkg/etc/sysctl.d/hdhr.conf
-    
+
     #modules blacklist files
     install -o root -g root  -D -m 0755 blacklist_pcspkr.conf $startdir/pkg/etc/modprobe.d/blacklist_pcspkr.conf
     install -o root -g root  -D -m 0755 blacklist_nouveau.conf $startdir/pkg/etc/modprobe.d/blacklist_nouveau.conf
@@ -129,7 +131,7 @@ md5sums=('0b29bb0819aad086f612699815132ec5'
          '68199e861c2933ccbb84735b9b440157'
          '2a7f3b34e522acfd08283b86c8926aba'
          '60103d94ada98ac583fea620294f14d3'
-         '36b0ce0589fd522217f90e0d0e5315c0'
+         '61e1e5cc957a0ce99a8a24501efab88c'
          'ecf9e5df20683a769c4a8a8f2d65de85'
          '895d4e842d7457a48a6d2ce0e9c833b7'
          '8ba06c2ce6129371548cc360ccca27f8'
@@ -158,4 +160,5 @@ md5sums=('0b29bb0819aad086f612699815132ec5'
          '4804aa93aaad3dfcfff08cd9ffd68836'
          '0fa6fffd87f350380d45f1f8a5b7babe'
          '6ec39b010c0ed8901ea896c7e153d330'
-         '3866086e6af5e3528a66eff492f2f4dd')
+         '3866086e6af5e3528a66eff492f2f4dd'
+         'c9279fa095af624ee3d9bc75d3328360')
diff --git a/abs/core/LinHES-config/print_xorg_res.py b/abs/core/LinHES-config/print_xorg_res.py
new file mode 100644
index 0000000..3b7ce56
--- /dev/null
+++ b/abs/core/LinHES-config/print_xorg_res.py
@@ -0,0 +1,128 @@
+#!/usr/bin/python2
+# -*- coding: utf-8 -*-
+
+__author__ = "James Meyer"
+__date__   = "August 23rd 2012"
+
+
+from subprocess import Popen, PIPE
+import re
+
+class available_display_res():
+    def __init__(self):
+
+        self.mode_list=[]
+        self.videocard = self.find_video_card()
+
+        if self.videocard == "nvidia":
+            self.parse_modeline_nvidia()
+        else:
+            self.sizes_xrandr()
+        #elif self.videocard == "intel":
+            #self.sizes_xrandr()
+        #elif self.videocard == "vmware":
+            #self.sizes_xrandr()
+        #elif self.videocard == "vesa":
+            #self.sizes_parse_log()
+
+
+    def getlist(self):
+        return self.mode_list
+
+    def getvc(self):
+        return self.videocard
+
+    def find_video_card(self):
+        videocard=""
+        conf_file="/etc/X11/xorg.conf.d/20-automv.conf"
+        lines=[]
+        try:
+            f=open(conf_file,'r')
+            lines=f.readlines()
+            f.close()
+        except:
+            print "    find_video_card: couldn't read in %s" %conf_file
+            videocard = "unknown"
+
+        for line in lines:
+            parsed=line.split()
+            if parsed[0].strip() == "Driver":
+                videocard = parsed[1].strip('''"''')
+                break
+
+        return  videocard
+
+    def parse_modeline_nvidia(self):
+        self.mode_list=[]
+        conf_file="/var/log/Xorg.0.log"
+        lines=[]
+        try:
+            f=open(conf_file,'r')
+            lines=f.readlines()
+            f.close()
+        except:
+            print "    parse_modeline_nvidia: couldn't read in %s" %conf_file
+            self.mode_list=["Auto"]
+        #now parse the list looking for modelines
+        search="Modes in ModePool"
+        searchindex=[]
+        for line in lines:
+            if line.find(search) > 4 :
+                searchindex.append(lines.index(line))
+                search="End of ModePool"
+
+            if len(searchindex) == 2:
+                break
+        #extract the modelines
+        #[    29.858] (II) NVIDIA(GPU-0): "nvidia-auto-select" : 2560 x 1600 @  59.9 Hz  (from: EDID)
+        try:
+            modelines =  lines[searchindex[0]+1:searchindex[1]-1]
+            for i in modelines:
+                self.mode_list.append(i.split('''"''')[1])
+        except:
+            self.mode_list=["nvidia-auto-select"]
+
+
+    def sizes_parse_log(self):
+        self.mode_list=["parse_log_list"]
+
+    def sizes_xrandr(self):
+        """List all sizes detected by xrandr,
+        ordered by the next resolution to cycle to"""
+        size_re = re.compile("^   ([0-9]*x[0-9]*)\W*[0-9]*\.[0-9]*(\*)?")
+        p1 = Popen(['xrandr'], stdout=PIPE)
+        sizes = []
+        current_size_index = 0
+        for line in  p1.communicate()[0].split("\n"):
+            m = size_re.match(line)
+            if m:
+                sizes.append(m.group(1))
+                if m.group(2) == "*":
+                    current_size_index = len(sizes) - 1
+        #return sizes[current_size_index+1:] + sizes[:current_size_index+1]
+        self.mode_list = sizes[current_size_index+1:] + sizes[:current_size_index+1]
+
+def go():
+    mode = available_display_res()
+    vc = mode.getvc()
+    modelist = mode.getlist()
+    print vc
+
+    for i in modelist:
+        print i
+    conf_file="/tmp/modelines"
+    try:
+        f=open(conf_file,'w')
+        for i in modelist:
+            f.write(i)
+            f.write("\n")
+        f.close()
+    except:
+        print "    print_xorg_res: couldn't write modelines to  %s" %conf_file
+
+
+
+
+if __name__ == '__main__':
+    go()
+
diff --git a/abs/core/LinHES-config/xconfig.sh b/abs/core/LinHES-config/xconfig.sh
index 73e4a5e..f832e66 100755
--- a/abs/core/LinHES-config/xconfig.sh
+++ b/abs/core/LinHES-config/xconfig.sh
@@ -144,6 +144,22 @@ function intel_driver_install {
 # Xres="${Xres} 720x480_60"
 # fi
 
+function set_res {
+    echo "    Setting modeline to ${Xres}"
+    echo "    Setting modeline to ${Xres}" >> $LOGFILE 2>&1
+    cat > /etc/X11/xorg.conf.d/30-screen.conf <<EOF
+    Section "Screen"
+        Identifier             "Screen0"  #Collapse Monitor and Device section to Screen section
+        Device                 "Device0"
+        Monitor                "Monitor0"
+        DefaultDepth            24 #Choose the depth (16||24)
+        SubSection             "Display"
+            Depth               24
+            Modes              "${Xres}"  #Choose the resolution
+        EndSubSection
+    EndSection
+EOF
+}
 
 
 function setupX {
@@ -153,6 +169,12 @@ function setupX {
         case $VGACARDTYPE in
             NVIDIA|nVidia|nvidia)
                     nvidia_driver_install
+                    if [ ${Xres} != "Auto" ]
+                    then
+                        set_res
+                    else
+                        rm -f /etc/X11/xorg.conf.d/30-screen.conf
+                    fi
                 ;;
 
             VMware)
@@ -163,22 +185,35 @@ function setupX {
                     echo "#!/bin/bash" > /etc/X11/autostart/vmware.sh
                     echo "/usr/bin/vmware-user-suid-wrapper" >> /etc/X11/autostart/vmware.sh
                     chmod 755 /etc/X11/autostart/vmware.sh
+                    if [ ${Xres} != "Auto" ]
+                    then
+                        set_res
+                    else
+                        rm -f /etc/X11/xorg.conf.d/30-screen.conf
+                    fi
                     ;;
 
             Intel|intel)
                     intel_driver_install
                     cp $TEMPLATES/xorg/xorg.intel  /etc/X11/xorg.conf.d/20-automv.conf
+                    if [ ${Xres} != "Auto" ]
+                    then
+                        set_res
+                    else
+                        rm -f /etc/X11/xorg.conf.d/30-screen.conf
+                    fi
                     ;;
 
             vesa|InnoTek|*) #leaving this as * and vesa for no real reason other then it's explicit to catch vesa
                   vesa_driver_install
                   cp $TEMPLATES/xorg/xorg.vesa  /etc/X11/xorg.conf.d/20-automv.conf
-#                 if [ ${Xres} = Auto ]
-#                 then
-#                     sed -e "/^.*Modes.*$/d" "$TEMPLATES/xorg/xorg.conf.vesa" > "$XORG_CONF"
-#                 else
-#                     sed -e "s/^.*Modes.*$/\t Modes \"${Xres}\"/" "$TEMPLATES/xorg/xorg.conf.vesa" > "$XORG_CONF"
-#                 fi
+                  if [ ${Xres} != "Auto" ]
+                    then
+                        set_res
+                    else
+                        rm -f /etc/X11/xorg.conf.d/30-screen.conf
+                    fi
+
                 ;;
 
         esac
diff --git a/abs/core/mythinstall/PKGBUILD b/abs/core/mythinstall/PKGBUILD
index 923fb3e..a07a78e 100644
--- a/abs/core/mythinstall/PKGBUILD
+++ b/abs/core/mythinstall/PKGBUILD
@@ -1,7 +1,7 @@
 # Maintainer: Jams
 pkgname=mythinstall
 pkgver=3
-pkgrel=29
+pkgrel=30
 pkgdesc="LinHES installer/systemconfig GUI."
 arch=('i686'  'x86_64')
 depends=('mythtv>=0.25')
-- 
cgit v0.12

