Categories
Computers Windows

Run Drupal on IIS

Of all the open source CMS solutions Drupal is one of my favourites (this site used to be run Drupal but has since been switched to WordPress). Installing it under Linux is normally a breeze since all of the requirements (PHP, MySQL etc) are already met by many popular Linux distributions. It requires a little more effort to install it on a Windows box and run it under IIS instead of under Apache but it is certainly doable.

Now why on earth would you like to do this, you may wonder. After all, Apache is available under Windows so why not just ditch IIS and go for Apache. Well, like me you may need to use IIS to run other sites that require IIS on the same server. While it would be possible to run both IIS and Apache on port 80 with some creative HTTP proxying it sure sounds easier to use a single server.

Install IIS

Depending on your version of Windows, Microsoft Internet Information Services (IIS) may not be installed by default on your machine. If it is not installed you should start by doing so – Start -> Control Panel -> Add or Remove Programs -> Add/Remove Windows Components.

Install MySQL

If you don't already have MySQL installed on your system then please go ahead and install it. The simplest way is to download the Windows Essential installation file. I also recommend the use of MySQL Administrator and MySQL Query Browser from the same web site.

Install PHP

Download PHP from www.php.net. Pick the zip file and not the installer. I use PHP 5.1.4 but it should work with any version supported by Drupal.

Extract the zipped file to a location of your choice. For the sake of this walk-through I will assume that you extracted it to C:\PHP\.

Add C:\PHP to your system path. From the start menu, right click on My Computer and select Properties. Then add a semi-colon followed by C:\PHP to the system path under the environment settings on the Advanced tab.

Create the directory c:\php\temp and give the account running the web site (normally IUSR_<computer name>) full permissions.

Copy the file c:\php.ini-recommended to c:\php.ini. You need to make at least the following changes:

  • Change extension_dir to “./ext”
  • Uncomment extension=php_mysql.dd
  • Uncomment extension=php_gd2.dd
  • Change upload_tmp_dir to c:\php\temp
  • Change sendmail_from to a valid email address

Using regedit.exe, add a setting to the registry within HKEY_LOCAL_MACHINE\Software\PHP:

IniFilePath  [SZ]  C:\PHP\

Install Drupal

Create a new directory to hold the virtual directory (or use the default site).

Download the Drupal installation file and extract it to the IIS virtual directory. The Drupal installation file is provided in a tar.gz format which Windows is normally not capable of opening. 7-zip is a good option if you have an issue with opening the file.

Create the directories 'files' and 'temp' within the Drupal site structure (if they don't already exist) and give the account running the web site (normally IUSR_<computer name>) full permissions to those directories.

Use MySQL Administrator to create a MySQL account that will be used by the site. Still from within MySQL Administrator, create a new database and give the account full permissions to that database.

From the Drupal directory, issue the command:

mysql -u [drupal account] -p [drupal database] < database/database.4.1.mysql

Edit the value of $db_url within the Drupal file /sites/default/settings.php to match your database and account settings.

Fix for clean paths

To support clean paths there must be a way for IIS to support URL rewriting in a similar way that mod_rewrite does it for Apache. There are a number of such utilities but most of them are provided at a charge. I found IIRF which does the job and is provided free of charge so go ahead and download it.

Change the ini file to be (remove or comment out existing lines):

RewriteRule /index\.php\?time=(.*)$ / [R]

# Add a slash in front of image URLs
RewriteRule my_theme/files/(.*)\.(?:jpg|jpeg|gif|png) /files/$1\.$2 [L]

#Allow direct access to some static information
RewriteRule /(.*)\.(?:css|jpeg|jpg|gif|png|js|ico) /$0 [L]

# Don't rewrite certain URLs
RewriteRule (.*)\?q=(.*) $0 [L]
RewriteRule ^/cron.php(.*)$ $0 [L]
RewriteRule ^/update.php(.*)$ $0 [L]

# Fix problem with links to next and previous pages
RewriteRule (.*)\?page=(.*) /\?q=$1&page=$2 [L]

# Change URLs in forms
RewriteRule ^/(.*)\?(.*)$ /$1

# Change the URL to query format
RewriteRule ^/(.*) /\?q=$1 [L]

The support to test the clean URL function in Drupal 4.7 is dependent upon .htaccess which is Apache related. Under IIS this has the effect that it is impossible to turn on clean paths from within the administration web pages. Instead you will have to add the following to your Drupal settings file (/sites/default/settings.php) in your Drupal directory.

$conf['clean_url'] = 1; // 1 enables, 0 disables

Hopefully that should do it. Good luck!

Categories
Computers Linux

Install Bind on ClarkConnect Home 3.1

ClarkConnect is a nice Linux distribution for a home server and it is especially suitable for a computer sitting in a closet without a display as the web based GUI makes it a snap to configure it (even if you, like me, after a while tend to do all the maintenance through a SSH console connection).

Many people that use ClarkConnect will probably want to use it to host their own sites. At least I did and I quickly realised the limitations of the included caching DNS server (dnsmasq). It is very well for supporting local users that want to access Internet access but it is no good for holding your master DNS information. After some trouble I managed to switch the included dnsmasq to the full-blown ICS BIND implementation.

While I initially did this for ClarkConnect Home 3.1 and later upgraded my server to 3.2 it should work for ClarkConnect Home 3.2 as well.

I assume that you have a standard installation of ClarkConnect Home 3.1/3.2 and have learned how to get a SSH connection to your server.

Note that I have used RPM files to install as I didn't have the development packages installed at the time I did this. If you want to compile Bind yourself then that is of course possible.

  1. Ensure that the caching DNS server (dnsmasq) is disabled from within the web GUI of ClarkConnect so that it does not start when the server boots.
  2. Download the RPM files from http://www.isc.org/index.pl?/sw/bind/. Use the link for Red Hat RPMs under Documents/References. Select RHEL-4 -> 9.3.2-4_EL4 -> i386 and download all the files to a temporary folder on your server.
  3. Update the existing components of ClarkConnect by issuing
    rpm -Fvh bind-libs-9.3.2-4_EL4.i386.rpm
    rpm -Fvh bind-utils-9.3.2-4_EL4.i386.rpm
    

    You can also put those two files in a directory and run “rpm -Fvh *.rpm”

  4. Put all other files except bind-sdb-9.3.2-4_EL4.i386.rpm in another temporary directory and issue the command “rpm -Fvh *.rpm” from within that directory.
  5. The installation will put a default configuration file at /etc/named.conf. Edit it so that it looks something like this (replace the domain for your domain)
    // Default named.conf generated by install of bind-9.3.1-1
    options {
            directory "/var/named";
            dump-file "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
    };
    include "/etc/rndc.key";
    zone "example.com" in {
            file "master/example.com";
            type master;
            allow-transfer { any; };
    };
    
  6. Create a folder for primary DNS zones:
    mkdir /var/named/chroot/var/named/master
    
  7. Add a zone file for your domain. My file (/var/named/chroot/var/named/master/example.com) looks like this:
    $TTL 2d
    @               IN SOA          dns.example.com. postmaster.example.com. (
                                    2005082502      ; serial
                                    3h              ; refresh
                                    1h              ; retry
                                    2d              ; expiry
                                    1h )            ; minimum
    example.com.    IN NS           dns.example.com.
    example.com.    IN MX           10 mail.example.com.
    www             IN A            10.11.12.13
    mail            IN A            10.11.12.13
    dns             IN A            10.11.12.13
    
  8. After changing the zone file you should restart the DNS server by issuing “/etc/init.d/named restart”. Run “tail /var/log/messages” to make sure that the daemon could read your zone file correctly. Use nslookup from another computer to verify that the server can resolve names for the domain.
  9. Put a soft link in /etc/rc3.d to the file /etc/init.d/named to make the daemon start automatically when the server is booted
    ln -s /etc/init.d/named /etc/rc3.d/S12named
    
Categories
Computers Windows

Mail filter for Microsoft Exchange

I don't understand why people still open unknown attachments but apparently they do since the viruses with attachements with extension of .exe, .scr, .pif etc still flourish. A number of years ago and in the aftermath of such an virus attack I wrote this mail filter, implemented as an SMTP event sink for Microsoft Exchange Server 2003. I recently added support for recoding WAV file attachments to WMA based on my implementation of a WAV to WMA console utility.

Being able to transcode WAV files is particularily handy when used with a system that sends voice recordings in a poorly compressed format. An example of such an application is Avaya's voice mail server solution. A 45 second sound clip can thus be taken down from 750kB to 30kB which means that they can then easily and cost effectively be downloaded directly to smartphones capable of playing WMA files.

Installation

There is no installer included so you will have to do the installation manually. First you need to download and install the Microsoft Platform SDK. The only reason you need the Platform SDK is that you need the script SmtpReg.vbs from the include directory. Once you have the script you should copy it to some directory which is in your path. After that, do the following:

  • Copy the filter DLL to a suitable location on your Exchange server. It does not have to be in the same folder as Exchange itself.
  • Register the filter DLL by typing 'regsvr32 MailFilter.dll' from within the same folder.
  • Type 'smtpreg.vbs /add 1 OnArrival FilterSink MailFilter.Sink “rcpt to=*”'

The filter will be triggered by the first incoming email and write default settings to the registry (HKLM\Software\Bergek\MailFilter). Run the registry editor (regedit.exe) to make any changes you may want.

Note: As always, be careful when changing the registry as mistakes can, at worst, render the computer unbootable.

  • DropExtensions [SZ] Semicolon-separated list of attachment entries that will make the mail be dropped
  • ReencodeBitrate [DWORD] The minimum bitrate to be used to encode the sound files (only used if ReencodeWav is set)
  • ReencodeCodec [SZ] The preferred codec to be used to encode the sound files (only used if ReencodeWav is set)
  • ReencodeWav [DWORD] If true, reencodes WAV attachments using a voice encoder profile to save space
  • Syslog [DWORD] If true, log entries will be sent to a syslog client
  • SyslogAddress [SZ] The address to send syslog entries to (only used if Syslog is set)
  • SyslogPort [DWORD] The port to send syslog entries to (defaults to 514 and only used if Syslog is set)
  • WriteLog [DWORD] If true, writes log entries to a log file located in the same folder as the filter binary

Note that the log file is turned on by default which could grow big depending on the amount of email received by your system. To stop logging to a file, just change the value of WriteLog to zero. Also note that e-mail with at least one attachment with the extension .pif, .scr or .exe will be dropped entirely. To avoid dropping e-mail due to attachment extensions, just change the DropExtensions registry value to an empty string.

By writing 'rcpt to=*' when installing the event sink above the filter will receive all incoming SMTP mail traffic. If the filter should only be used for specific e-mail addresses they can be specified instead of the asterisk. It is also possible to use the format 'mail from=…' to filter only e-mail from a specific address. Multiple items can be separated by semi-colon.

Troubleshooting

Please verify directly after installation that your mail system is still operating as it should. Although this filter has proven very stable on my system it has not been tested on more than one system. If you do run into problems then just uninstall the filter and restart the IIS service (the first two points in the uninstallation instruction below).

Uninstallation

  • Remove the filter from the list of SMTP event sinks by typing 'smtpreg.vbs /remove 1 OnArrival FilterSink'
  • Restart the IIS SMTP service by running 'iisreset.exe'
  • Unregister the filter DLL by running 'regsvr32 /u MailFilter.dll'
  • Remove the filter DLL and the registry settings under HKLM\Software\Bergek\MailFilter

License

This application is provided as-is and free of charge as long as it is not included in any commercial offering. If you like it I would appreciate if you would link to my web site (http://www.spotwise.com).

Known issues

  • The file name for the attached sound file will change after the transcoding
  • Depending on the format of the e-mail received the filter may remove text encodings above 7 bit ASCII.

Attachments

Categories
Computers Music Windows

wav2wma – freeware console utility

VoiceWMA.gif

I provide this Windows console utility that transcodes from WAV files to WMA files. By default it uses the voice codec from Windows Media Audio 9 with a very low bitrate to encode voice content but it is possible to use any other Windows Media Audio codec and with a higher bitrate.

When I tried it after having done the last changes it even turned out to be possible to use mp3 files as input which was not even intentional but might be interesting to know. Do remember, however, that you would in that case be transcoding between two potential lossy formats which is normally not a good thing.

Usage: wav2wma -s source -t target [-c codec] [-b bitrate]
       wav2wma -l

Options
   -s source   Source WAV file
   -t target   Target WMA file
   -c codec    Preferred codec
   -b bitrate  Minimal bitrate [bps]
   -l          List all codecs on the system
   -?          Produces this help

License

This application is provided free of charge for personal use. If you like it I would appreciate if you would link to my web site (http://www.spotwise.com).

Attachments

Categories
Computers Gadgets

TomTom bluetooth issues on Qtek 9000

Users of the TomTom navigation solution may experience problem when trying to connect their PDAs to a non-supported bluetooth GPS receiver. At least I had huge problems when trying to get TomTom 5.21 on a Qtek 9000 (a.k.a. HTC Universal or the Jasjar) to connect to my Bluei GPS receiver. I had no issues in bonding the GPS receiver with the PDA but no matter how I tried I couldn't get TomTom to use the serial port provided by the bluetooth stack.

The problem is not that TomTom can't use the GPS. The problem is that TomTom is unable to list the Bluetooth serial port which means that the user is unable to select it. After much trials this is how I managed to do it.

First bind the GPS receiver to the PDA and add a serial port to it. I selected COM4 but you can use whatever port is available to you.

Then the GPS control panel applet must be enabled. The applet provides access to control the serial intermediate driver in Windows Mobile 5 which, for some reason, has been disabled by HTC.

Use any registry editor (I recommend PHM Registry Editor) on the PDA to set the value 0 (zero) to the key Hide in HKLM\ControlPanel\GPS Settings. If the GPS applet does not appear under Settings -> System, then restart your PDA to make the change take effect.

In the GPS applet you will find three tabs. The first tab ('Program') is the serial port which applications on your PDA will connect to in order to get GPS data. I selected COM8 but you can use another port as long as it is available. Under the second tab ('Hardware') you identify the serial port which the GPS is connected to; in other words the serial port selected in the bluetooth manager. The Bluei GPS receiver uses 4800 baud but your GPS receiver may differ so check your documentation. Finally, you will want to check the box under the third tab ('Access').

Once this is done, the serial port selected under the first tab ('Program') showed up in TomTom. The next problem was that TomTom seemed unable to open the serial port by itself. Other GPS applications, however, were able to use the bluetooth GPS and while they were running TomTom could also use the port. So, at this stage I had a clumsy workaround.

To avoid having to run multiple applications I then went back to the GPS applet and disabled the intermediate serial port support by unchecking the box on the third tab and instead changing the serial port setting in the Bluetooth manager to use the same port I had previously set for applications (COM8 in my case).

So much trouble just because the TomTom developers apparently can't enumerate serial ports properly.

Categories
Computers Photography Windows

Image resizer freeware

resizer_drag.jpg

Every now and then I find myself in the situation where I want to resize images to a defined size. To speed up the workflow I have created this simple application that supports drag-and-drop resizing. Just drag an image file onto the application icon and the image will be resized according to the settings.

The application requires .NET Framework 2.0. There is no installer. Just put the executable file wherever you want.

If the application is launched by itself it present the setting dialog, shown below.

resizer_gui.gif

The bounding box is the largest possible image that will be the result of the operation. If the “crop to box” option is set, the source image will be cropped to leave an image of the exact size of the bounding box. If, on the other hand, the “fit within box” option is selected the image will be made as large as possible with retained aspect ratio and still fit within the bounding box. The bounding box can be of any size and the cropping, if required, will be done from the centre.

A watermark text can be added to the finished image by enabling the watermark option and typing a suitable string in the edit box. The font or position of the watermark text can not be changed.

Images can be saved to the same folder as the source image or to a defined target folder and will be given a suffix of “_resized”. The application will add extra numbers at the end to avoid overwriting existing files. If required, the metadata associated with the source image can be copied over to the resulting image.

To avoid having to keep the application on the desktop or somewhere else where it is readily available you can do the following:

  • Put the application (resizer.exe) anywhere you want on your hard drive
  • Right-click on any image file and select “Open with…” followed by “Choose program…”
  • Make sure the “Always use the selected program…” checkbox is unchecked and browse for the application file
  • Press OK

Windows will remember the application you selected for the jpeg files and will include the Resizer application on the “Open with…” submenu. The next time you want to resize a file you just have to pick the Resizer option from the “Open with…” submenu.

The resizing is done using bicubic with the highest quality setting. If I get around to it I will implement support for “unsharp mask”.

License

This application is provided free of charge for personal use. If you like it I would appreciate if you would link to my web site (http://www.spotwise.com).

Uninstallation

Just remove the EXE file and all registry settings under HKCU\Software\Bergek\Resizer.

If you added the application as a short cut under the right-click context menu you can remove the application in the registry under the key HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts \ .jpg \ OpenWithList. As always, be careful when editing the registry.

Attachments

Categories
Computers Windows

IIS authentication freeware

Authenticator is an add-on filter to the Microsoft IIS web server that provides basic authentication against Microsoft Access, Microsoft SQL Server and MySQL Server data sources. This means that the standard client authentication dialogs can be used for authentication without requiring user licenses for accounts in Active Directory in Windows.

The filter has been tested successfully on:

  • Windows XP Professional
  • Windows 2000 Professional
  • Windows 2000 Server
  • Windows Server 2003

License

This application is provided free of charge for personal use. If you like it I would appreciate if you would link to my web site (http://www.spotwise.com).

Installation

Add the database as a data source as a System DSN in the Data Sources (ODBC) applet in the Control Panel. Database templates are provided for Microsoft Access, Microsoft SQL Server and MySQL Server. Choose the one that suits your purposes the best and add suitable user accounts to the database (check below).

Install the filter on a web site in the IIS snap in and set the security settings on a virtual directory below the web site to disallow unauthenticated access and instead use basic authentication. Although the filter requires the username/password to be sent in clear text it is be possible to use it in conjunction with SSL to encrypt the data over the network. Set the RequireSSL registry value to true if you want to prevent cleartext passwords to be sent over the network. Also, set the realm; the text will be shown in the authentication dialog if supported by the client operating system.

When first loaded by IIS, the code will write default registry settings. Start regedit and make changes under HKLM \ Software \ Bergek \ Authenticator.

Note: As always, be careful when changing the registry as mistakes can, at worst, render the computer unbootable.

  • ConnectionString [SZ] – The connection string used to connect to the data source. In its simplest form it is just “DSN=Authenticator” (with Authenticator configured as the data source name in the control panel), although it can be formatted in various ways. The data source must be added as a System DSN since the user which will access it will most likely be the IUSR_{computer} account.
  • SqlStyle [DWORD] – Controls the SQL style used to query the ODBC data source. Possible values are 0:Microsoft SQL Server, 1:Microsoft Access and 2:MySQL Server. By default MySQL Server syntax is used.
  • RequireSSL [DWORD] – If set, the filter will return HTTP 401 Access denied if a request is made using non-encrypted HTTP. The HTTP 401 response is sent before the client has sent the user credentials which means that they will not be transmitted in cleartext form on the network.
  • MappedLogin [SZ] – A valid user name on the computer. Accesses against the virtual directory will be mapped against this user which must exist and be allowed to access the resource in the web application. The user name should be provided in the form {domain}\{login} but it can be {login} only if the default domain is set in the IIS snap in. If your computer is not in a domain you should write the account as {computer}\{login}
  • MappedPassword [SZ] – The password for the user account selected above. When the filter is first accessed this password will be encrypted and the encrypted version will replace whatever you type here.
  • LogSuccesses [DWORD] – If set to true (non-zero), authentication successes are written to the database.
  • LogFailures [DWORD] – If set to true (non-zero), authentication failures are written to the database.

After having changed the registry settings access requests to the protected web application folder will be matched against the database and IIS will use the mapped user account for all access.

Database settings

Two things must be added to the database in order for a user to be allowed access. First of all a user account must be created in the 'users' table:

  • Login: The login name of the user
  • Password: The password (in clear text) for the login account
  • Enabled: Must be set to true (1)
  • Expires: If set to false (0) the account does not expire
  • Expiration: Determines the expiration time for the account. Only used if Expires is set to true (1)
  • Administrator: Not currently used

In addition to the account itself site, directory permissions must be set for the user. This is done in the 'permissions' table:

  • UserID: The ID of the user in the 'users' table
  • SitePrefix: The IIS instance metapath for the site. For the first site on the system this is typically /LM/W3SVC/1
  • PathPrefix: The URL path prefix for which the user should be granted access (e.g. /secret)

The PathPrefix can be used to allow access only to certain areas of the web site. To give access to the entire site the PathPrefix should be set to a single slash ('/').

Troubleshooting

Error in the ISAPI filter are most frequently related to the connection between the filter DLL and the database. Please make sure that the latest versions of relevant ODBC drivers are installed on your computer and check the database connection in the Data Sources (ODBC) applet in the Control Panel. Errors are logged to the system event log. Incorrect account information for the mapped account is not shown by the filter but might be logged by the web server or by the system itself.

Errors could also be the result of the account running the web server not having sufficient permission to update the relevant registry keys under HKLM\Software\Bergek\Authenticator.

Uninstallation

Remove the ISAPI filter from the IIS snap-in. Restart IIS and then remove the DLL, database ODBC DSN and the registry key HKLM \ Software \ Bergek \ Authenticator.

If you are unable to remove the DLL file, please make sure that the filter has been removed from within the IIS snapin and that the event viewer is not running.

Attachments

Categories
Computers Gadgets

First impressions of Lacie Rugged All-Terrain

lacie_rugged.jpg

After hearing about friends having their computers stolen and losing precious data I finally got around and purchased a new external backup disk, settling on a Lacie Rugged All-Terrain 80GB. DVD backups worked fine until last year when I purchased a Canon EOS 20D and decided to shoot in raw format. Now, instead of having a few GB of data per year to backup I find myself with some 50GB.

I have tried a large number of bus powered USB drives but none of them seemed to work without extra power via a second USB cable. I was happy to notice that the Lacie Rugged All-Terrain 80GB could do with just the power supplied from the USB port on my Shuttle SN95G5v3. It is worth noticing that I also have a Lacie Mobile hard drive from late 2004 which does require extra power when connecting it to the same Shuttle PC. It seems, thus, that this rugged drive requires less power than the older drive but it is uncertain whether newer drives of the Porsche designed series require as much power.

On the negative side I was a little surprised to note the flimsy orange protection around the edges. Contrary to what I thought after having seen images on the Internet, the protective cover is just slipped over the drive. It would feel more solid if Lacie were to at least glue it together.

As would be expected, the drive is quite silent and the sound is barely noticeable. When making an initial backup of 50GB of data I saw a sustained throughput of 12 MB/s.

In short, this external USB drive does what it says. But I would like it better if the orange protector was attached more firmly to the drive itself.

Categories
Music

Eurovision 2006

The monster rockers from Finland won the Eurovision song contest 2006 in Athens. As always, I couldn't help but think that the tele-voting has a tendency to favour neighbouring countries. To figure out just how real this tendency is I set out to adjust the scores according to the distance between the countries.

Eurovision2006.gif

The graph above shows the official score for the top five participating countries and two alternative scores. The first alternative uses normalisation based on the distance between the capitals of the country voting and the country receiving the vote. The second alternative is more extreme in that it gives a weight of zero to countries that share land borders. Please note that it is only the relations between the countries within each alternative that are valid – the fact that Russia received different amount of points for the different alternatives is thus not relevant.

In other words, the normalisation means that an icelandic vote for Greece is more valuable than if Albania would vote for Greece.

As can be seen Lordi won even more impressively taken distances into account.

In my eyes tele-voting by country takes away too much of the musical aspect of the competition. The purist in me would like to get the proper jurys back but since we seem to be stuck with tele-voting I think it should be done with just one big “jury” and the song that gets the most votes wins.

I attach the spreadsheet if you want to check how I have done the calculations or modify it further.

Attachments

Categories
Computers Linux Windows

Linux screen resolution issues in Virtual PC

Virtual PC is great for setting up testbeds but the support for Linux is less than optimal. When installing standard Linux distributions under Virtual PC it may be impossible to set the resolution to anything higher than 800×600 or even to get any image at all.

Edit the sections for Monitor, Device and Screen in the file /etc/X11/xorg.conf to look like this:

Section "Monitor"
    Identifier  "Monitor0"     VendorName  "Monitor Vendor"     ModelName    "General Laptop Display Panel 1280x768"     HorizSync    31.5 - 90.0     VertRefresh  59.0 - 75.0     Option     "dpms" EndSection
Section "Device"
    Identifier  "Videocard0"
    Driver      "vesa"
    VendorName  "Videocard vendor"
    BoardName   "VESA driver (generic)"
    VideoRam    8192
EndSection
Section "Screen"
    Identifier "Screen0"
    Device     "Videocard0"
    Monitor    "Monitor0"
    DefaultDepth     16
    SubSection "Display"
        Viewport   0 0
        Depth     16
        Modes    "1280x768" "1024x768" "800x600" "640x480"
    EndSubSection
EndSection

The above works for Fedora Core 5 under Virtual PC 5.3.582.27. If you are unable to get any image then boot from the rescue CD and use 'nano' or 'vi' to edit the file.

css.php