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

K

kazaam

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
 
D

dblack

Hi --

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)
 
S

Sebastian Hungerecker

kazaam said:
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
 
K

kazaam

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top