VirtualBox

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

Last change on this file since 98329 was 98103, checked in by vboxsync, 2 years ago

Copyright year updates by scm.

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