Finding one certain line in a file is easy but how to look forheadlines and something just under thi

Discussion in 'Ruby' started by kazaam, Aug 26, 2007.

  1. kazaam

    kazaam Guest

    Hi,
    I'm writing a little script for installing ati-drivers on linux machines but I have a little problem. I need to change the /etc/X11/xorg.conf file for this. This file is built like this (just a cut-out):

    Section "InputDevice"
    Identifier "Generic Keyboard"
    Driver "kbd"
    Option "CoreKeyboard"
    Option "XkbRules" "xorg"
    Option "XkbModel" "pc105"
    Option "XkbLayout" "de"
    Option "XkbOptions" "lv3:ralt_switch"
    EndSection

    Section "Device"
    Identifier "Standardgrafikkarte"
    Driver "ati"
    BusID "PCI:1:0:0"
    EndSection

    Section "Monitor"
    Identifier "Standardbildschirm"
    Option "DPMS"
    HorizSync 28-64
    VertRefresh 43-60
    EndSection

    Section "DRI"
    Mode 0666
    EndSection

    Section "Extensions"
    Option "Composite" "Disable"
    EndSection


    Now I need to change the driver value within the Section "Device" from ati|vesa|radeon|nomatterwhat... to fglrx, but how to find it? E.g. IO.foreach('/etc/X11/xorg.conf') { |line| puts line if line =~ /^Section "Device"/ } finds me the correct section but how to "navigate" now in it? Is iteration at all the answer to this problem?


    greets

    --
    kazaam <>
    kazaam, Aug 26, 2007
    #1
    1. Advertising

  2. kazaam

    Guest

    Hi --

    On Sun, 26 Aug 2007, kazaam wrote:

    > Hi,
    > I'm writing a little script for installing ati-drivers on linux
    > machines but I have a little problem. I need to change the
    > /etc/X11/xorg.conf file for this. This file is built like this (just
    > a cut-out):
    >
    > Section "InputDevice"
    >
    > Now I need to change the driver value within the Section "Device"
    > from ati|vesa|radeon|nomatterwhat... to fglrx, but how to find it?
    > E.g. IO.foreach('/etc/X11/xorg.conf') { |line| puts line if line =~
    > /^Section "Device"/ } finds me the correct section but how to
    > "navigate" now in it? Is iteration at all the answer to this
    > problem?


    I usually do something like this (where fh is my filehandle):

    while line = fh.gets
    flag = true if /Section "Device"/.match(line)
    flag = false if flag && line.gsub!(/(Driver\s+)"(.*)"/, '\1"fglrx"')
    puts line
    end


    David

    --
    * Books:
    RAILS ROUTING (new! http://www.awprofessional.com/title/0321509242)
    RUBY FOR RAILS (http://www.manning.com/black)
    * Ruby/Rails training
    & consulting: Ruby Power and Light, LLC (http://www.rubypal.com)
    , Aug 26, 2007
    #2
    1. Advertising

  3. Re: Finding one certain line in a file is easy but how to look for headlines and something just under this certain headline?

    kazaam wrote:
    > Hi,
    > I'm writing a little script for installing ati-drivers on linux machines
    > but I have a little problem. I need to change the /etc/X11/xorg.conf file
    > for this.


    For what you're trying to do, you could just read the file in as a string,
    use String#sub on it and write it to file again, but here is something a
    little more fun (for me to write anyway):
    http://pastie.caboo.se/91056
    Usage:
    xconf=XConf.new "/etc/X11/xorg.conf"
    xconf["Device"]["Driver"]='"fglrx"'
    xconf.write #This will backup the old config to /etc/X11/xorg.conf.old
    #or
    xconf.write "new_config"

    The new config won't contain comments.

    I just quickly hacked this up, so this isn't thoroughly tested and may contain
    bugs (the above example works as it should, though, I tested that much).
    There's obviously some room for improvement here, but for the beginning
    this seems decent enough.


    HTH,
    Sebastian
    --
    Jabber:
    ICQ: 205544826
    Sebastian Hungerecker, Aug 26, 2007
    #3
  4. kazaam

    kazaam Guest

    thx for your help, I solved it now this way (I know pretty messy) but it works fine:

    system('cp /etc/X11/xorg.conf /etc/X11/xorg.conf.bak')
    xorgbak = File.open('/etc/X11/xorg.conf.bak')
    xorg = File.open('/etc/X11/xorg.conf','w')
    drifound = false
    compofound=false
    while line = xorgbak.gets
    driverflag = true if /Section "Device"/.match(line)
    driverflag = false if driverflag && line.gsub!(/(Driver\s+)"(.*)"/, '\1"fglrx"')
    (driflag = true & drifound = true) if /Section "DRI"/.match(line)
    driflag = false if driflag && line.gsub!(/(Mode\s+).*/, '\10666')
    (compoflag = true & compofound = true) if /Section "Extensions"/.match(line)
    compoflag = false if compoflag && line.gsub!(/(Option\s+)"(.*)"/, '\1"Composite" "Disable"')
    xorg.puts line
    end
    xorgbak.close
    xorg.close
    xorg = File.open('/etc/X11/xorg.conf',"a")
    if not drifound
    xorg.puts''
    xorg.puts'Section "DRI"'
    xorg.puts' Mode 0666'
    xorg.puts'EndSection'
    end
    if not compofound
    xorg.puts''
    xorg.puts'Section "Extensions"'
    xorg.puts' Option "Composite" "Disable"'
    xorg.puts'EndSection'
    end
    xorg.close
    --
    kazaam <>
    kazaam, Aug 26, 2007
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Microsoft News Server

    you can do thi$

    Microsoft News Server, Feb 6, 2004, in forum: ASP .Net
    Replies:
    0
    Views:
    377
    Microsoft News Server
    Feb 6, 2004
  2. Showjumper

    What does thi s error message mean?

    Showjumper, Jul 31, 2003, in forum: ASP .Net
    Replies:
    0
    Views:
    317
    Showjumper
    Jul 31, 2003
  3. Hazzard
    Replies:
    2
    Views:
    624
    Hazzard
    Apr 6, 2004
  4. Christian Seberino
    Replies:
    1
    Views:
    721
    Andrew Bennetts
    Apr 13, 2004
  5. Bruno Desthuilliers
    Replies:
    5
    Views:
    372
    Bruno Desthuilliers
    Aug 29, 2007
Loading...

Share This Page