# Copyright 2020 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     "Daemon for managing scanners via SANE"
author          "chromium-os-dev@chromium.org"

expect fork
console none

# This daemon is started by D-Bus service activation configured in
# dbus_service/org.chromium.lorgnette.service.
stop on stopping ui

pre-start script
  # Check if ui is still running before starting lorgnette.
  # This is to prevent new dbus-activated instances from getting started once
  # the system is beginning to shut down.
  if ! initctl status ui | grep -q running; then
    stop
    exit 0
  fi
end script

exec minijail0 -ilnprv --uts --mount-dev \
    -u saned -g scanner -G \
    -P /mnt/empty \
    -b / \
    -b /proc \
    -b /sys \
    -b /dev/log \
    -b /dev/bus/usb \
    -k 'run,/run,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
    -b /run/systemd/journal \
    -b /run/dbus \
    -b /run/ippusb,/run/ippusb,1 \
    -k 'var,/var,tmpfs,MS_NOSUID|MS_NODEV|MS_NOEXEC' \
    -b /var/lib/metrics,/var/lib/metrics,1 \
    -- /usr/bin/lorgnette

# Wait for daemon to claim its D-Bus name before transitioning to started.
post-start exec minijail0 -u saned -g scanner /usr/bin/gdbus \
    wait --system --timeout 15 org.chromium.lorgnette
