# 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.

description     "Determine whether to allow certain keyboard hotkey sequences"
author          "chromium-os-dev@chromium.org"

# This job determines whether to enable the console hotkeys for VT
# switching and for 'sysrq'.
#
# The start conditions below means that in normal operation, this
# job runs twice at boot:  once when starting the session manager,
# and once more after the failsafe delay.  Additionally, the job
# runs every time the login screen is presented after logging out.
# The job as written is safe to run as often as needed.
#
# The start conditions are necessary as written:  The initialization
# for the 'ui' job clobbers /var/run/state, so this job must re-run
# every time we restart the user session.  Additionally, if the
# session fails to start, we need the failsafe behavior so we can
# have access to the VT console for debugging.
#
start on login-prompt-visible or starting failsafe

script
  # The X server for Chromium OS recognizes this file path as
  # indicating whether VT console switching key sequences are
  # to be honored or ignored.
  STATE_DIR=/var/run/state
  ALLOW_VT_SWITCHING=${STATE_DIR}/allow-vt-switching

  # We want to disallow the key sequences for VT console switching
  # and for sysrq commands, unless this is a "developer system".
  # We define "developer system" as either a) a system with the
  # developer hardware switch set on, or b) a system with a shared
  # user password set (meaning it's possible to log in on a VT
  # console).
  if crossystem cros_debug?1 ||
      grep -q '^chronos:[^*]' /etc/shadow; then
    # developer end-user - allow the keys
    mkdir -p $STATE_DIR
    touch $ALLOW_VT_SWITCHING
    echo 1 > /proc/sys/kernel/sysrq
  else
    # consumer end-user - disallow the keys
    rm -f $ALLOW_VT_SWITCHING
    echo 0 > /proc/sys/kernel/sysrq
  fi
end script
