Finding one certain line in a file is easy but how to look f

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

Hi –

On Sun, 26 Aug 2007, kazaam wrote:

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

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

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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs