mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-07 21:16:57 +02:00
Added the flags required for mounted images to the postinst call. Scripts no longer need to fixup postinst hence that code is removed. Review URL: http://codereview.chromium.org/3027012
113 lines
3.6 KiB
Python
Executable File
113 lines
3.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Makes changes to mounted Chromium OS image to allow it to run with VMs
|
|
|
|
This script changes two files within the Chromium OS image to let the image
|
|
work with VMs, particularly QEMU
|
|
|
|
Currently this script does the following,
|
|
1.) Modify the post install script to remove EFI fixup section; the VM's we
|
|
support don't have EFI support anyway and this section of the script needs
|
|
access to the actual device drives
|
|
|
|
2.) For QEMU/KVM, we change the xorg.conf to remove mouse support and instead
|
|
change it to complete tablet support. This is done to provide better mouse
|
|
response in the VM since tablets work of absolute coordinates while the mouse
|
|
works of relative. In a screen that doesn't support a mouse grab (e.g., VNC),
|
|
relative coordinates can cause the mouse to be flaky
|
|
|
|
"""
|
|
|
|
from optparse import OptionParser
|
|
import os
|
|
import stat
|
|
import sys
|
|
|
|
USAGE = "usage: %prog --mounted_dir=directory --enable_tablet=[true]"
|
|
|
|
INPUT_SECTION_MARKER = r'Section "InputDevice"'
|
|
SECTION_END_MARKER = r'EndSection'
|
|
|
|
MOUSE_SECTION_IDENTIFIERS = []
|
|
MOUSE_SECTION_IDENTIFIERS += ['Identifier "Mouse']
|
|
MOUSE_SECTION_IDENTIFIERS += ['Identifier "USBMouse']
|
|
|
|
REPLACE_USB_MOUSE_PAIR = ('InputDevice "USBMouse" "AlwaysCore"', '')
|
|
XORG_CONF_FILENAME = os.path.join('etc', 'X11', 'xorg.conf')
|
|
|
|
|
|
TABLET_DEVICE_CONFIG = """
|
|
Section "InputDevice"
|
|
Identifier "Mouse1"
|
|
Driver "evdev"
|
|
Option "Device" "/dev/input/event2"
|
|
Option "CorePointer" "true"
|
|
EndSection
|
|
"""
|
|
|
|
|
|
# Modify the xorg.conf file to remove all mouse sections and replace it
|
|
# with ours containing the tablet - note: when running under QEMU, you
|
|
# *need* to specify the -usbdevice tablet option to get the mouse to work
|
|
def FixXorgConf(mount_point):
|
|
xorg_conf_filename = os.path.join(mount_point, XORG_CONF_FILENAME)
|
|
f = open(xorg_conf_filename, 'r')
|
|
xorg_conf = f.read()
|
|
f.close()
|
|
|
|
more_sections = 1
|
|
last_found = 0
|
|
while (more_sections):
|
|
# Find the input section.
|
|
m1 = xorg_conf.find(INPUT_SECTION_MARKER, last_found)
|
|
if m1 > -1:
|
|
m2 = xorg_conf.find(SECTION_END_MARKER, m1)
|
|
m2 += len(SECTION_END_MARKER)
|
|
# Make sure the next iteration doesn't rinse/repeat.
|
|
last_found = m2
|
|
# Check if this is a mouse section.
|
|
for ident in MOUSE_SECTION_IDENTIFIERS:
|
|
if xorg_conf.find(ident, m1, m2) != -1:
|
|
xorg_conf = xorg_conf[0:m1] + xorg_conf[m2:]
|
|
last_found -= (m2-m1)
|
|
break
|
|
else:
|
|
more_sections = 0
|
|
|
|
xorg_conf = xorg_conf[0:last_found] + TABLET_DEVICE_CONFIG + \
|
|
xorg_conf[last_found:]
|
|
|
|
# Replace UsbMouse with Tablet.
|
|
xorg_conf = xorg_conf.replace(REPLACE_USB_MOUSE_PAIR[0],
|
|
REPLACE_USB_MOUSE_PAIR[1])
|
|
|
|
# Write the file back out.
|
|
f = open(xorg_conf_filename, 'w')
|
|
f.write(xorg_conf)
|
|
f.close()
|
|
|
|
def main():
|
|
parser = OptionParser(USAGE)
|
|
parser.add_option('--mounted_dir', dest='mounted_dir',
|
|
help='directory where the Chromium OS image is mounted')
|
|
parser.add_option('--enable_tablet', dest='enable_tablet',
|
|
default="true",
|
|
help='fixup image for qemu')
|
|
(options, args) = parser.parse_args()
|
|
|
|
if not options.mounted_dir:
|
|
parser.error("Please specify the mount point for the Chromium OS image");
|
|
if options.enable_tablet not in ('true', 'false'):
|
|
parser.error("Please specify either true or false for --enable_tablet")
|
|
|
|
if (options.enable_tablet == 'true'):
|
|
FixXorgConf(options.mounted_dir)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|