#!/usr/bin/python # # Copyright 2010 Google Inc. All Rights Reserved. """Script to get past the login screen of ChromeOS. """ __author__ = "asharif@google.com (Ahmad Sharif)" import datetime import fcntl import getpass import glob import optparse import os import pickle import socket import sys import time import tempfile from utils import logger from utils import command_executer LOGIN_PROMPT_VISIBLE_MAGIC_FILE = '/tmp/uptime-login-prompt-visible' LOGGED_IN_MAGIC_FILE = '/var/run/state/logged-in' script_header=""" import os import autox import time """ wait_for_login_screen=""" while True: print 'Waiting for login screen to appear...' if os.path.isfile('%s'): break time.sleep(1) print 'Done' time.sleep(20) """ % LOGIN_PROMPT_VISIBLE_MAGIC_FILE do_login=""" xauth_filename = '/home/chronos/.Xauthority' os.environ.setdefault('XAUTHORITY', xauth_filename) os.environ.setdefault('DISPLAY', ':0.0') print 'Now sending the hotkeys for logging in.' ax = autox.AutoX() # navigate to login screen ax.send_hotkey('Ctrl+Shift+q') ax.send_hotkey('Ctrl+Alt+l') # escape out of any login screen menus (e.g., the network select menu) time.sleep(2) ax.send_hotkey('Escape') time.sleep(2) ax.send_hotkey('Tab') time.sleep(0.5) ax.send_hotkey('Tab') time.sleep(0.5) ax.send_hotkey('Tab') time.sleep(0.5) ax.send_hotkey('Tab') time.sleep(0.5) ax.send_hotkey('Return') print 'Waiting for Chrome to appear...' while True: if os.path.isfile('%s'): break time.sleep(1) print 'Done' """ % LOGGED_IN_MAGIC_FILE def RestartUI(remote, chromeos_root, login=True): chromeos_root = os.path.expanduser(chromeos_root) ce = command_executer.GetCommandExecuter() # First, restart ui. command = 'rm -rf %s && restart ui' % LOGIN_PROMPT_VISIBLE_MAGIC_FILE ce.CrosRunCommand(command, machine=remote, chromeos_root=chromeos_root) host_login_script = tempfile.mktemp() device_login_script = '/tmp/login.py' login_script_list = [script_header, wait_for_login_screen] if login: login_script_list.append(do_login) full_login_script_contents = "\n".join(login_script_list) with open(host_login_script, 'w') as f: f.write(full_login_script_contents) ce.CopyFiles(host_login_script, device_login_script, dest_machine=remote, chromeos_root=chromeos_root, recursive=False, dest_cros=True) ret = ce.CrosRunCommand('python %s' % device_login_script, chromeos_root=chromeos_root, machine=remote) if os.path.exists(host_login_script): os.remove(host_login_script) return ret def Main(argv): """The main function.""" parser = optparse.OptionParser() parser.add_option('-r', '--remote', dest='remote', help='The remote ChromeOS box.') parser.add_option('-c', '--chromeos_root', dest='chromeos_root', help='The ChromeOS root.') options, args = parser.parse_args(argv) return RestartUI(options.remote, options.chromeos_root) if __name__ == '__main__': retval = Main(sys.argv) sys.exit(retval)