VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/Installer/x11config15suse.pl@ 17698

Last change on this file since 17698 was 16787, checked in by vboxsync, 16 years ago

fixed accident

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.8 KB
Line 
1#!/usr/bin/perl -w
2#
3# Sun xVM VirtualBox
4#
5# Guest Additions X11 config update script
6#
7# Copyright (C) 2006-2008 Sun Microsystems, Inc.
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
18# Clara, CA 95054 USA or visit http://www.sun.com if you need
19# additional information or have any questions.
20#
21
22# Versions of (open)SUSE which ship X.Org Server 1.5 still do not enable
23# mouse autodetection, so on these systems we have to enable vboxmouse in the
24# X.Org configuration file as well as vboxvideo. When uninstalling, we enable
25# the fbdev driver, which SUSE prefers over vesa, and we leave the references
26# to vboxmouse in place, as without the driver they are harmless.
27
28use File::Copy;
29
30# This is the file name for the temporary file we write the new configuration
31# to.
32# @todo: perl must have an API for generating this
33my $temp="/tmp/xorg.conf";
34# The list of possible names of X.org configuration files
35my @cfg_files = ("/etc/X11/xorg.conf-4", "/etc/X11/xorg.conf", "/etc/X11/.xorg.conf", "/etc/xorg.conf",
36 "/usr/etc/X11/xorg.conf-4", "/usr/etc/X11/xorg.conf", "/usr/lib/X11/xorg.conf-4",
37 "/usr/lib/X11/xorg.conf");
38# File descriptor of the old configuration file
39my $CFG;
40# File descriptor of the temporary file
41my $TMP;
42
43# The name of the mouse driver we are enabling
44my $mousedrv = 'vboxmouse';
45# The name of the video driver we are enabling
46my $videodrv= 'vboxvideo';
47
48# If we are uninstalling, restore the old video driver
49if (@ARGV && "$ARGV[0]" eq 'uninstall')
50{
51 $videodrv = 'fbdev' # SUSE prefers this one
52}
53
54# How many different configuration files have we found?
55my $config_count = 0;
56
57# Subroutine to roll back after a partial installation
58sub do_fail {
59 foreach $cfg (@cfg_files) {
60 move "$cfg.vbox", $cfg;
61 unlink "$cfg.vbox";
62 }
63 die $_[0];
64}
65
66# Perform the substitution on any configuration file we may find.
67foreach $cfg (@cfg_files) {
68
69 if (open(CFG, $cfg)) {
70 open(TMP, ">$temp")
71 or &do_fail("Can't create $TMP: $!\n");
72
73 my $have_mouse = 0;
74 my $in_section = 0;
75 my $in_layout = 0;
76
77 # Go through the configuration file line by line
78 while (defined ($line = <CFG>)) {
79 # Look for the start of sections
80 if ($line =~ /^\s*Section\s*"([a-zA-Z]+)"/i) {
81 my $section = lc($1);
82 # And see if they are device or input device sections
83 if (($section eq "inputdevice") || $section eq "device") {
84 $in_section = 1;
85 }
86 # Or server layout sections
87 if ($section eq "serverlayout")
88 {
89 $in_section = 1;
90 $in_layout = 1;
91 }
92 } else {
93 if ($line =~ /^\s*EndSection/i && $in_layout) {
94 # We always add this to the end of the server layout.
95 print TMP " InputDevice \"VBoxMouse\"\n"
96 }
97 if ($line =~ /^\s*EndSection/i) {
98 $in_section = 0;
99 $in_layout = 0;
100 }
101 }
102
103 if ($in_section) {
104 # Inside sections, look for any graphics drivers and replace
105 # them with our one.
106 if ($line =~ /^\s*driver\s+\"(fbdev|vga|vesa|vboxvideo|ChangeMe)\"/i) {
107 $line =~ s/(fbdev|vga|vesa|vboxvideo|ChangeMe)/$videodrv/i;
108 }
109 # Also keep track of whether this configuration file contains
110 # an input device section for vboxmouse. If it does, we don't
111 # need to add one later.
112 if ($line =~ /^\s*driver\s+\"(?:vboxmouse)\"/i)
113 {
114 $have_mouse = 1
115 }
116
117 # We add vboxmouse to the server layout section ourselves, so
118 # remove any existing references to it.
119 if ( $line =~ /^\s*inputdevice.*\"vboxmouse\"/i)
120 {
121 $line = "";
122 }
123 }
124 print TMP $line;
125 }
126
127 # We always add a vboxmouse section at the end for SUSE guests using
128 # X.Org 1.5 if vboxmouse is not referenced anywhere else in the file,
129 # and we do not remove it when we uninstall the additions, as it will
130 # not do any harm if it is left.
131 if (!$have_mouse) {
132 print TMP "\n";
133 print TMP "Section \"InputDevice\"\n";
134 print TMP " Identifier \"VBoxMouse\"\n";
135 print TMP " Driver \"$mousedrv\"\n";
136 print TMP " Option \"Device\" \"\/dev\/vboxadd\"\n";
137 print TMP " Option \"SendCoreEvents\" \"on\"\n";
138 print TMP "EndSection\n";
139 }
140 close(TMP);
141
142 # We do not overwrite existing "$cfg.vbox" files in order to keep a
143 # record of what the configuration looked like before the very first
144 # installation of the additions.
145 copy $cfg, "$cfg.bak";
146 if (! -e "$cfg.vbox") {
147 rename $cfg, "$cfg.vbox";
148 }
149 copy $temp, $cfg
150 or &do_fail("Could not overwrite configuration file $cfg! Exiting...");
151 unlink $temp;
152
153 $config_count++;
154 }
155}
156
157# Warn if we did not find any configuration files
158$config_count != 0 or die "Could not find any X11 configuration files";
159
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette