Release 0.1.37 deployment prep
This commit is contained in:
+17
-18
@@ -18,7 +18,7 @@ sys.path.insert(0, "/usr/local/lib/ekklesia-classroom")
|
||||
import classroom_style as style # noqa: E402
|
||||
from classroom_config import ( # noqa: E402
|
||||
SHELL_SCALE,
|
||||
enabled,
|
||||
dock_items,
|
||||
read_device_config,
|
||||
scaled,
|
||||
)
|
||||
@@ -311,6 +311,8 @@ class ClassroomShell(Gtk.Window):
|
||||
)
|
||||
dock.get_style_context().add_class("dock")
|
||||
|
||||
items = dock_items(self.config)
|
||||
|
||||
dock.pack_start(
|
||||
self.make_button(
|
||||
"browser",
|
||||
@@ -322,11 +324,7 @@ class ClassroomShell(Gtk.Window):
|
||||
0,
|
||||
)
|
||||
|
||||
if enabled(
|
||||
self.config,
|
||||
"DVD_ENABLED",
|
||||
False,
|
||||
):
|
||||
if "dvd" in items:
|
||||
dock.pack_start(
|
||||
self.make_button(
|
||||
"dvd",
|
||||
@@ -342,19 +340,20 @@ class ClassroomShell(Gtk.Window):
|
||||
|
||||
self.start_disc_watch()
|
||||
|
||||
dock.pack_start(
|
||||
self.make_button(
|
||||
"sanctuary",
|
||||
self.sanctuary_icon(),
|
||||
lambda *_: notify(
|
||||
"Sanctuary",
|
||||
"Sanctuary live view is being prepared.",
|
||||
if "live" in items:
|
||||
dock.pack_start(
|
||||
self.make_button(
|
||||
"sanctuary",
|
||||
self.sanctuary_icon(),
|
||||
lambda *_: notify(
|
||||
"Sanctuary",
|
||||
"Sanctuary live view is being prepared.",
|
||||
),
|
||||
),
|
||||
),
|
||||
False,
|
||||
False,
|
||||
0,
|
||||
)
|
||||
False,
|
||||
False,
|
||||
0,
|
||||
)
|
||||
|
||||
return dock
|
||||
|
||||
|
||||
Executable
+111
@@ -0,0 +1,111 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
# Configure the one explicitly managed classroom printer. The Ricoh Aficio
|
||||
# MP C3502 supports PCL 6 as standard; Debian Trixie's compressed Foomatic
|
||||
# database supplies this generic color PCL 6/PCL XL path without vendor code.
|
||||
|
||||
QUEUE="Classroom_Color"
|
||||
DRIVER="foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/Generic-PCL_6_PCL_XL_Printer-pxlcolor.ppd"
|
||||
MAKE_MODEL="Ricoh Aficio MP C3502 (Generic PCL 6 Color)"
|
||||
LOCATION="Ekklesia Classroom"
|
||||
MAKE_DEFAULT=true
|
||||
|
||||
usage() {
|
||||
cat <<'USAGE'
|
||||
Usage: classroom-printer-setup [--no-default] PRINTER-IP-OR-URI
|
||||
|
||||
Examples:
|
||||
sudo classroom-printer-setup 10.20.30.40
|
||||
sudo classroom-printer-setup socket://printer.example.org:9100
|
||||
|
||||
An IP address or hostname uses JetDirect/AppSocket on port 9100. Explicit
|
||||
socket://, ipp://, ipps:// and lpd:// URIs are also accepted.
|
||||
USAGE
|
||||
}
|
||||
|
||||
log() {
|
||||
echo "[classroom-printer-setup] $1"
|
||||
}
|
||||
|
||||
fail() {
|
||||
log "ERROR: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
if [[ "${CLASSROOM_PRINTER_SETUP_TESTING:-false}" != "true" && $EUID -ne 0 ]]; then
|
||||
fail "run this command as root: sudo classroom-printer-setup <printer-ip>"
|
||||
fi
|
||||
|
||||
if [[ "${1:-}" == "--no-default" ]]; then
|
||||
MAKE_DEFAULT=false
|
||||
shift
|
||||
fi
|
||||
|
||||
if [[ $# -ne 1 || "$1" == "-h" || "$1" == "--help" ]]; then
|
||||
usage
|
||||
[[ $# -eq 1 ]] && exit 0
|
||||
exit 2
|
||||
fi
|
||||
|
||||
address="$1"
|
||||
|
||||
case "$address" in
|
||||
socket://*|ipp://*|ipps://*|lpd://*)
|
||||
uri="$address"
|
||||
;;
|
||||
*://*)
|
||||
fail "unsupported printer URI scheme: $address"
|
||||
;;
|
||||
*)
|
||||
if [[ ! "$address" =~ ^[A-Za-z0-9._:-]+$ ]]; then
|
||||
fail "printer address contains unsupported characters: $address"
|
||||
fi
|
||||
uri="socket://${address}:9100"
|
||||
;;
|
||||
esac
|
||||
|
||||
for command in lpadmin lpinfo lpstat cupsenable cupsaccept; do
|
||||
command -v "$command" >/dev/null 2>&1 || \
|
||||
fail "$command is missing; reinstall the ekklesia-classroom package"
|
||||
done
|
||||
|
||||
if ! lpstat -r >/dev/null 2>&1; then
|
||||
command -v systemctl >/dev/null 2>&1 && \
|
||||
systemctl start cups.service >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
lpstat -r >/dev/null 2>&1 || \
|
||||
fail "CUPS is not running; check: systemctl status cups"
|
||||
|
||||
models="$(lpinfo -m)" || fail "CUPS could not list installed printer drivers"
|
||||
|
||||
if ! grep -q "^${DRIVER} " <<< "$models"; then
|
||||
fail "the Debian generic color PCL 6 driver is not installed"
|
||||
fi
|
||||
|
||||
log "configuring ${QUEUE} at ${uri}"
|
||||
|
||||
# Repeating this command updates the same named queue; it never creates a
|
||||
# second destination. None of these operations connects to the printer.
|
||||
lpadmin \
|
||||
-p "$QUEUE" \
|
||||
-v "$uri" \
|
||||
-m "$DRIVER" \
|
||||
-D "$MAKE_MODEL" \
|
||||
-L "$LOCATION" || fail "CUPS could not configure ${QUEUE}"
|
||||
|
||||
cupsenable "$QUEUE" || fail "CUPS could not enable ${QUEUE}"
|
||||
cupsaccept "$QUEUE" || fail "CUPS could not accept jobs for ${QUEUE}"
|
||||
|
||||
if [[ "$MAKE_DEFAULT" == true ]]; then
|
||||
lpadmin -d "$QUEUE" || fail "CUPS could not make ${QUEUE} the default"
|
||||
fi
|
||||
|
||||
log "${QUEUE} is configured, enabled and accepting jobs."
|
||||
|
||||
if [[ "$MAKE_DEFAULT" == true ]]; then
|
||||
log "${QUEUE} is the system default printer."
|
||||
fi
|
||||
|
||||
log "The printer may remain offline until it is reachable; this does not affect boot."
|
||||
Reference in New Issue
Block a user