x11config15suse.pl revision 332d68e9666b04a5aa788a586d9f4c6b1f19c700
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# Sun VirtualBox
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# Guest Additions X11 config update script
3f1e0eea71cabeb90529e546f16eb7aee513fde9vboxsync# Copyright (C) 2006-2009 Sun Microsystems, Inc.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# available from http://www.virtualbox.org. This file is free software;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync# General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# Clara, CA 95054 USA or visit http://www.sun.com if you need
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# additional information or have any questions.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# Versions of (open)SUSE which ship X.Org Server 1.5 still do not enable
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# mouse autodetection, so on these systems we have to enable vboxmouse in the
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# X.Org configuration file as well as vboxvideo. When uninstalling, we enable
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# the fbdev driver, which SUSE prefers over vesa, and we leave the references
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# to vboxmouse in place, as without the driver they are harmless.
d31ded334a29f575e23dc889b603b1a586759348vboxsync# This is the file name for the temporary file we write the new configuration
d31ded334a29f575e23dc889b603b1a586759348vboxsync# @todo: perl must have an API for generating this
61fa69e2bc9fc9e7490feed1c020273f3ddb238dvboxsync# The list of possible names of X.org configuration files
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsyncmy @cfg_files = ("/etc/X11/xorg.conf-4", "/etc/X11/xorg.conf", "/etc/X11/.xorg.conf", "/etc/xorg.conf",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync "/usr/etc/X11/xorg.conf-4", "/usr/etc/X11/xorg.conf", "/usr/lib/X11/xorg.conf-4",
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# File descriptor of the old configuration file
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync# File descriptor of the temporary file
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# The name of the mouse driver we are enabling
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# The name of the video driver we are enabling
223cf005b18af2c21352a70693ebaf0582f68ebcvboxsync# If we are uninstalling, restore the old video driver
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# How many different configuration files have we found?
2daaccf68be3773aee600c5c3e48bcf5401418a6vboxsync# Subroutine to roll back after a partial installation
614cbe11a7e5588dc8d369e223174b1441a09359vboxsync unlink "$cfg.vbox";
7666082b743c5e146a8cee6cc794ff4bc3fd0ffdvboxsync# Perform the substitution on any configuration file we may find.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # Go through the configuration file line by line
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # Look for the start of sections
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # And see if they are device or input device sections
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if (($section eq "inputdevice") || $section eq "device") {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # Or server layout sections
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # We always add this to the end of the server layout.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # Inside sections, look for any graphics drivers and replace
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # them with our one.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync if ($line =~ /^\s*driver\s+\"(fbdev|vga|vesa|vboxvideo|ChangeMe)\"/i) {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync $line =~ s/(fbdev|vga|vesa|vboxvideo|ChangeMe)/$videodrv/i;
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # Also keep track of whether this configuration file contains
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # an input device section for vboxmouse. If it does, we don't
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # need to add one later.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # We add vboxmouse to the server layout section ourselves, so
3ecf9412133496b2aeb090cfd33a286404ec59fbvboxsync # remove any existing references to it.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # We always add a vboxmouse section at the end for SUSE guests using
750d4d0506a38b2e80c997075d40aad474e675fbvboxsync # X.Org 1.5 if vboxmouse is not referenced anywhere else in the file,
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # and we do not remove it when we uninstall the additions, as it will
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync # not do any harm if it is left.
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync print TMP " Option \"Device\" \"\/dev\/vboxadd\"\n";
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync # We do not overwrite existing "$cfg.vbox" files in order to keep a
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync # record of what the configuration looked like before the very first
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync # installation of the additions.
b74ca013e5f201a2dd371e6c438433ceac12af30vboxsync if (! -e "$cfg.vbox") {
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync or &do_fail("Could not overwrite configuration file $cfg! Exiting...");
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync# Warn if we did not find any configuration files
d408b82da0773c7e8cd4b3a01cb8a065a2c73a2dvboxsync$config_count != 0 or die "Could not find any X11 configuration files";