1 | #!/bin/sh
|
---|
2 | #
|
---|
3 | # Guest Additions X11 config update script
|
---|
4 | #
|
---|
5 | # Copyright (C) 2006-2012 Oracle Corporation
|
---|
6 | #
|
---|
7 | # This file is part of VirtualBox Open Source Edition (OSE), as
|
---|
8 | # available from http://www.virtualbox.org. This file is free software;
|
---|
9 | # you can redistribute it and/or modify it under the terms of the GNU
|
---|
10 | # General Public License (GPL) as published by the Free Software
|
---|
11 | # Foundation, in version 2 as it comes in the "COPYING" file of the
|
---|
12 | # VirtualBox OSE distribution. VirtualBox OSE is distributed in the
|
---|
13 | # hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
|
---|
14 | #
|
---|
15 |
|
---|
16 | auto_mouse=""
|
---|
17 | auto_keyboard=""
|
---|
18 | no_bak=""
|
---|
19 | old_mouse_dev="/dev/psaux"
|
---|
20 | video_driver="vboxvideo"
|
---|
21 |
|
---|
22 | tab=`printf '\t'`
|
---|
23 |
|
---|
24 | ALL_SECTIONS=\
|
---|
25 | '^[ '$tab']*[Ss][Ee][Cc][Tt][Ii][Oo][Nn][ '$tab']*'\
|
---|
26 | '"\([Ii][Nn][Pp][Uu][Tt][Dd][Ee][Vv][Ii][Cc][Ee]\|'\
|
---|
27 | '[Dd][Ee][Vv][Ii][Cc][Ee]\|'\
|
---|
28 | '[Ss][Ee][Rr][Vv][Ee][Rr][Ll][Aa][Yy][Oo][Uu][Tt]\|'\
|
---|
29 | '[Ss][Cc][Rr][Ee][Ee][Nn]\|'\
|
---|
30 | '[Mm][Oo][Nn][Ii][Tt][Oo][Rr]\|'\
|
---|
31 | '[Kk][Ee][Yy][Bb][Oo][Aa][Rr][Dd]\|'\
|
---|
32 | '[Pp][Oo][Ii][Nn][Tt][Ee][Rr]\)"'
|
---|
33 | # ^\s*Section\s*"(InputDevice|Device|ServerLayout|Screen|Monitor|Keyboard|Pointer)"
|
---|
34 |
|
---|
35 | KBD_SECTION='^[ '$tab']*[Ss][Ee][Cc][Tt][Ii][Oo][Nn][ '$tab']*"'\
|
---|
36 | '[Ii][Nn][Pp][Uu][Tt][Dd][Ee][Vv][Ii][Cc][Ee]"' # ^\s*section\s*\"inputdevice\"
|
---|
37 |
|
---|
38 | END_SECTION='[Ee][Nn][Dd][Ss][Ee][Cc][Tt][Ii][Oo][Nn]' # EndSection
|
---|
39 |
|
---|
40 | OPT_XKB='^[ '$tab']*option[ '$tab'][ '$tab']*"xkb'
|
---|
41 |
|
---|
42 | DRIVER_KBD='^[ '$tab']*[Dd][Rr][Ii][Vv][Ee][Rr][ '$tab'][ '$tab']*'\
|
---|
43 | '"\(kbd\|keyboard\)"'
|
---|
44 | # ^\s*driver\s+\"(kbd|keyboard)\"
|
---|
45 |
|
---|
46 | reconfigure()
|
---|
47 | {
|
---|
48 | cfg="$1"
|
---|
49 | tmp="$cfg.vbox.tmp"
|
---|
50 | test -w "$cfg" || { echo "$cfg does not exist"; return; }
|
---|
51 | rm -f "$tmp"
|
---|
52 | test ! -e "$tmp" || { echo "Failed to delete $tmp"; return; }
|
---|
53 | touch "$tmp"
|
---|
54 | test -w "$tmp" || { echo "Failed to create $tmp"; return; }
|
---|
55 | xkb_opts="`cat "$cfg" | sed -n -e "/$KBD_SECTION/,/$END_SECTION/p" |
|
---|
56 | grep -i "$OPT_XKB"`"
|
---|
57 | kbd_drv="`cat "$cfg" | sed -n -e "/$KBD_SECTION/,/$END_SECTION/p" |
|
---|
58 | sed -n -e "0,/$DRIVER_KBD/s/$DRIVER_KBD/\\1/p"`"
|
---|
59 | test -z "${kbd_drv}" && test -z "${auto_keyboard}" && kbd_drv=keyboard
|
---|
60 | cat > "$tmp" << EOF
|
---|
61 | # VirtualBox generated configuration file
|
---|
62 | # based on $cfg.
|
---|
63 | EOF
|
---|
64 | cat "$cfg" | sed -e "/$ALL_SECTIONS/,/$END_SECTION/s/\\(.*\\)/# \\1/" >> "$tmp"
|
---|
65 | test -n "$kbd_drv" && cat >> "$tmp" << EOF
|
---|
66 | Section "InputDevice"
|
---|
67 | Identifier "Keyboard[0]"
|
---|
68 | Driver "$kbd_drv"
|
---|
69 | $xkb_opts
|
---|
70 | Option "Protocol" "Standard"
|
---|
71 | Option "CoreKeyboard"
|
---|
72 | EndSection
|
---|
73 | EOF
|
---|
74 | kbd_line=""
|
---|
75 | test -n "$kbd_drv" && kbd_line=' InputDevice "Keyboard[0]" "CoreKeyboard"'
|
---|
76 | test -z "$auto_mouse" &&
|
---|
77 | cat >> "$tmp" << EOF
|
---|
78 |
|
---|
79 | Section "InputDevice"
|
---|
80 | Driver "mouse"
|
---|
81 | Identifier "Mouse[1]"
|
---|
82 | Option "Buttons" "9"
|
---|
83 | Option "Device" "$old_mouse_dev"
|
---|
84 | Option "Name" "VirtualBox Mouse Buttons"
|
---|
85 | Option "Protocol" "explorerps/2"
|
---|
86 | Option "Vendor" "Oracle Corporation"
|
---|
87 | Option "ZAxisMapping" "4 5"
|
---|
88 | Option "CorePointer"
|
---|
89 | EndSection
|
---|
90 |
|
---|
91 | Section "InputDevice"
|
---|
92 | Driver "vboxmouse"
|
---|
93 | Identifier "Mouse[2]"
|
---|
94 | Option "Device" "/dev/vboxguest"
|
---|
95 | Option "Name" "VirtualBox Mouse"
|
---|
96 | Option "Vendor" "Oracle Corporation"
|
---|
97 | Option "SendCoreEvents"
|
---|
98 | EndSection
|
---|
99 |
|
---|
100 | Section "ServerLayout"
|
---|
101 | Identifier "Layout[all]"
|
---|
102 | ${kbd_line}
|
---|
103 | InputDevice "Mouse[1]" "CorePointer"
|
---|
104 | InputDevice "Mouse[2]" "SendCoreEvents"
|
---|
105 | Option "Clone" "off"
|
---|
106 | Option "Xinerama" "off"
|
---|
107 | Screen "Screen[0]"
|
---|
108 | EndSection
|
---|
109 | EOF
|
---|
110 |
|
---|
111 | cat >> "$tmp" << EOF
|
---|
112 |
|
---|
113 | Section "Monitor"
|
---|
114 | Identifier "Monitor[0]"
|
---|
115 | ModelName "VirtualBox Virtual Output"
|
---|
116 | VendorName "Oracle Corporation"
|
---|
117 | EndSection
|
---|
118 |
|
---|
119 | Section "Device"
|
---|
120 | BoardName "VirtualBox Graphics"
|
---|
121 | Driver "${video_driver}"
|
---|
122 | Identifier "Device[0]"
|
---|
123 | VendorName "Oracle Corporation"
|
---|
124 | EndSection
|
---|
125 |
|
---|
126 | Section "Screen"
|
---|
127 | SubSection "Display"
|
---|
128 | Depth 24
|
---|
129 | EndSubSection
|
---|
130 | Device "Device[0]"
|
---|
131 | Identifier "Screen[0]"
|
---|
132 | Monitor "Monitor[0]"
|
---|
133 | EndSection
|
---|
134 | EOF
|
---|
135 |
|
---|
136 | test -n "$no_bak" -o -f "$cfg.vbox" || cp "$cfg" "$cfg.vbox"
|
---|
137 | test -n "$no_bak" || mv "$cfg" "$cfg.bak"
|
---|
138 | mv "$tmp" "$cfg"
|
---|
139 | }
|
---|
140 |
|
---|
141 | while test -n "$1"
|
---|
142 | do
|
---|
143 | case "$1" in
|
---|
144 | --autoMouse)
|
---|
145 | auto_mouse=1 ;;
|
---|
146 | --autoKeyboard)
|
---|
147 | auto_keyboard=1 ;;
|
---|
148 | --noBak)
|
---|
149 | no_bak=1 ;;
|
---|
150 | --nopsaux)
|
---|
151 | old_mouse_dev="/dev/input/mice" ;;
|
---|
152 | --vmsvga)
|
---|
153 | video_driver="vmware" ;;
|
---|
154 | *)
|
---|
155 | reconfigure "$1" ;;
|
---|
156 | esac
|
---|
157 | shift
|
---|
158 | done
|
---|