Kirjoittaja Aihe: näyttötilojen lisääminen xorg.confiin pythonilla  (Luettu 2160 kertaa)

anttimr

  • Käyttäjä
  • Viestejä: 1625
    • Profiili
Intrepidin äksähän tunnistaa monitorille sopivat tilat automaattisesti, mutta joskus (tai aika useinkin foorumin viestien perusteella) resoluutio menee pieleen. Oletuksena 8.10:ssä ei tule xorg.confin asetuksiin vaikuttavaa apuohjelmaa ja RandR:een perustuvassa näytön tarkkuus apuohjelmassa ei ole toimintoa, jolla pystyisi lisäämään uusia näyttötiloja. Niinpä joudutaan muokkaamaan käsin xorg.confia tai lisäämään tiloja randrin avulla komentorivillä.

Puute on siinä mielessä harmillinen, että Intrepidissa on mukana Alberto Milonen koodaama python-xkit kirjasto, jolla xorg.confin muokkaaminen on todella helppoa. En usko, että olisi ollut enää iso työ tehdä uusille resoluutioille gui:ta. Kai sitten kehittäjät ovat uskoneet automaattitunnistuksen riittävän. X:n optioeditori on rakenteilla, mutta gui-osuus ei ole ehtinyt Intrepidiin. Nyt ollaan sitten tilanteessa, joka on osittain takapakkia Hardyyn verrattuna.

Väsäsin pythonilla yksinkertaisen modelinen lisäämisen.

Koodia: [Valitse]
#!/usr/bin/python

#Add a Modeline for a new resolution in xorg.conf and set PreferredMode.
#Useful if the preferred mode reported by your monitor isn't the one you want by default, or if there is no preferred mode and the driver does not choose the right one.
#Requires python-xkit.

from XKit import xorgparser
from XKit.xorgparser import *
import sys
import os

def cvt_arguments():
#    '''
#    Get user input for width, height, refresh rate
#    '''
    uncorrect = True
    while uncorrect:
        print 'Input preferred values'
        w = (raw_input('Horisontal resolution? '))
        h = (raw_input('Vertical resolution? '))
        r = (raw_input('Refresh rate? '))
        print w, h, r
        yn = (raw_input('Is this correct? (y/N) '))
        if yn[0] == 'y':
            uncorrect = False
            return(w + " " + h + " " + r)

destination = os.path.join(os.path.expanduser('~'), 'xorg.conf.mode')
source = '/etc/X11/xorg.koe'
a = Parser(source)

# should probably check lots of things first, to not corrupt existing xorg.conf.

# generate modeline with cvt utility
pipe_stdout = os.popen("cvt " + cvt_arguments())
try:
    cvt_output = pipe_stdout.read()
finally:
    pipe_stdout.close()
# print cvt_output

modeline_raw = cvt_output.splitlines()
modeline_real = modeline_raw[1][modeline_raw[1].index('"'):]
modeline_name = modeline_raw[1][modeline_raw[1].index('"'):modeline_raw[1].rindex('"')+1]
modeline_comment = modeline_raw[0]
 
a.addOption('Monitor', 'Modeline', modeline_real, position=0, prefix='')
a.addOption('Monitor', 'PreferredMode', modeline_name, position=0, prefix='')

print modeline_comment # don't know how to write the comment in destination.
print 'Modeline added to', destination, 'and set as the preferred display mode.'

try:
    print 'Virtual', a.getValue('SubSection', 'Virtual', position=0, identifier='Display', sect='Screen')
except OptionException, e:
    print 'No Virtual set:', e
# should check if Virtual exists. if not, maybe set Virtual as preferred resolution.
   
#    '''
#    Write the changes to the destination file
#    '''

a.writeFile(destination)






 
« Viimeksi muokattu: 16.11.08 - klo:16.44 kirjoittanut anttimr »
Ubuntu 12.10 Quantal Quetzal