#!/bin/bash # ============================================================================= # setup-printer.sh - Configuration CUPS + Canon Selphy CP1300 # ============================================================================= # Usage: sudo bash setup-printer.sh # Prerequis: imprimante branchee en USB et allumee # ============================================================================= set -euo pipefail RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' CYAN='\033[0;36m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1"; } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } log_error() { echo -e "${RED}[ERROR]${NC} $1"; } if [ "$EUID" -ne 0 ]; then log_error "Ce script doit etre execute en root (sudo)" exit 1 fi echo "=============================================" echo " Configuration imprimante Canon Selphy CP1300" echo "=============================================" echo "" # ------------------------------------------------------------------- # 1. INSTALLATION DES PAQUETS # ------------------------------------------------------------------- log_info "Installation des paquets necessaires..." apt-get update -qq apt-get install -y -qq \ cups \ printer-driver-gutenprint \ cups-client \ system-config-printer \ 2>/dev/null || apt-get install -y -qq cups printer-driver-gutenprint cups-client # Ajouter l'utilisateur au groupe lpadmin pour administrer CUPS REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || echo pi)}" usermod -aG lpadmin "$REAL_USER" 2>/dev/null || true log_info "Utilisateur $REAL_USER ajoute au groupe lpadmin" # ------------------------------------------------------------------- # 2. CONFIGURATION CUPS # ------------------------------------------------------------------- log_info "Configuration de CUPS..." # Backup de la config originale cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.backup.$(date +%Y%m%d) 2>/dev/null || true # Autoriser l'acces local au panneau CUPS # (utile pour debug mais pas necessaire en production) cat > /etc/cups/cupsd.conf << 'EOF' # Configuration CUPS optimisee pour photomaton LogLevel warn MaxLogSize 0 PageLogFormat # Ecouter sur localhost et le reseau local Listen localhost:631 Listen /run/cups/cups.sock # Partage d'imprimante desactive (pas besoin) Browsing Off BrowseLocalProtocols none DefaultAuthType Basic WebInterface Yes # Politique par defaut Order allow,deny Allow localhost Allow 10.0.0.* Allow 192.168.* Order allow,deny Allow localhost AuthType Default Require user @SYSTEM Order allow,deny Allow localhost JobPrivateAccess default JobPrivateValues default SubscriptionPrivateAccess default SubscriptionPrivateValues default Order deny,allow Require user @OWNER @SYSTEM Order deny,allow AuthType Default Require user @SYSTEM Order deny,allow AuthType Default Require user @SYSTEM Order deny,allow Order deny,allow EOF systemctl restart cups systemctl enable cups log_info "CUPS configure et redemarre" # ------------------------------------------------------------------- # 3. DETECTION DE L'IMPRIMANTE # ------------------------------------------------------------------- log_info "Recherche des imprimantes Canon Selphy..." sleep 3 # Laisser CUPS detecter les USB # Chercher les imprimantes USB Canon USB_PRINTERS=$(lpinfo -v 2>/dev/null | grep -i "canon\|selphy\|usb" || true) if [ -z "$USB_PRINTERS" ]; then log_warn "Aucune imprimante Canon detectee via USB." log_warn "Verifiez que l'imprimante est branchee, allumee, et prete." echo "" echo "Imprimantes detectees:" lpinfo -v 2>/dev/null || true echo "" echo "Vous pouvez relancer ce script une fois l'imprimante connectee," echo "ou ajouter manuellement via: http://localhost:631" echo "" else echo "" echo -e "${CYAN}Imprimantes detectees:${NC}" echo "$USB_PRINTERS" echo "" fi # Chercher le driver Gutenprint pour Canon Selphy log_info "Recherche du driver Canon Selphy CP1300..." DRIVER=$(lpinfo -m 2>/dev/null | grep -i "selphy\|cp1300\|CP1300" | head -1 || true) if [ -z "$DRIVER" ]; then # Essayer avec un pattern plus large DRIVER=$(lpinfo -m 2>/dev/null | grep -i "canon.*cp" | head -1 || true) fi if [ -n "$DRIVER" ]; then DRIVER_URI=$(echo "$DRIVER" | awk '{print $1}') log_info "Driver trouve: $DRIVER" else log_warn "Driver Selphy CP1300 non trouve dans Gutenprint." log_warn "Essayez: sudo apt install printer-driver-gutenprint && sudo systemctl restart cups" DRIVER_URI="" fi # ------------------------------------------------------------------- # 4. AJOUT AUTOMATIQUE DE L'IMPRIMANTE (si detectee) # ------------------------------------------------------------------- USB_URI=$(echo "$USB_PRINTERS" | grep "usb://" | head -1 | awk '{print $2}' || true) if [ -n "$USB_URI" ] && [ -n "$DRIVER_URI" ]; then log_info "Ajout automatique de l'imprimante..." # Supprimer les anciennes configs si elles existent lpadmin -x Canon_SELPHY_CP1300_usb_blanche 2>/dev/null || true lpadmin -x Canon_SELPHY_CP1300_usb_noire 2>/dev/null || true # Ajouter la premiere imprimante (blanche) lpadmin -p Canon_SELPHY_CP1300_usb_blanche \ -v "$USB_URI" \ -m "$DRIVER_URI" \ -L "Photomaton" \ -D "Canon Selphy CP1300 Blanche" \ -E # Configurer comme imprimante par defaut lpadmin -d Canon_SELPHY_CP1300_usb_blanche log_info "Imprimante 'Canon_SELPHY_CP1300_usb_blanche' ajoutee et definie par defaut" # Detecter une deuxieme imprimante si presente USB_URI_2=$(echo "$USB_PRINTERS" | grep "usb://" | sed -n '2p' | awk '{print $2}' || true) if [ -n "$USB_URI_2" ]; then lpadmin -p Canon_SELPHY_CP1300_usb_noire \ -v "$USB_URI_2" \ -m "$DRIVER_URI" \ -L "Photomaton" \ -D "Canon Selphy CP1300 Noire" \ -E log_info "Deuxieme imprimante 'Canon_SELPHY_CP1300_usb_noire' ajoutee" fi else log_warn "Ajout automatique impossible. Ajoutez manuellement via http://localhost:631" fi # ------------------------------------------------------------------- # 5. OPTIONS D'IMPRESSION OPTIMALES POUR SELPHY CP1300 # ------------------------------------------------------------------- log_info "Configuration des options d'impression..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cat > "${SCRIPT_DIR}/../config/cups-selphy.conf" << 'EOF' # ============================================================================= # Options d'impression pour Canon Selphy CP1300 # ============================================================================= # Format: lpoptions -p PRINTER_NAME -o OPTION=VALUE # # La Selphy CP1300 supporte: # - Format carte postale : 100x148mm (4x6 pouces) # - Format carte : 54x86mm # - Format carre : 89x89mm (si media disponible) # # Noms CUPS des imprimantes: # Canon_SELPHY_CP1300_usb_blanche # Canon_SELPHY_CP1300_usb_noire # # Commande d'impression pour photobooth-app: # lp -d Canon_SELPHY_CP1300_usb_blanche -o landscape -o fit-to-page {filename} # # Options utilisees: # - fit-to-page : Ajuster l'image a la page sans crop # - landscape : Orientation paysage # - -n X : Nombre de copies # # Pour le load balancing entre 2 imprimantes: # Utiliser script_print.sh (gere automatiquement) # ============================================================================= EOF # Appliquer les options par defaut si les imprimantes sont configurees if lpstat -p Canon_SELPHY_CP1300_usb_blanche &>/dev/null; then lpoptions -p Canon_SELPHY_CP1300_usb_blanche -o fit-to-page -o landscape 2>/dev/null || true log_info "Options par defaut appliquees a Canon_SELPHY_CP1300_usb_blanche" fi if lpstat -p Canon_SELPHY_CP1300_usb_noire &>/dev/null; then lpoptions -p Canon_SELPHY_CP1300_usb_noire -o fit-to-page -o landscape 2>/dev/null || true log_info "Options par defaut appliquees a Canon_SELPHY_CP1300_usb_noire" fi # ------------------------------------------------------------------- # 6. COPIER LE SCRIPT D'IMPRESSION OPTIMISE # ------------------------------------------------------------------- log_info "Verification du script d'impression..." if [ -f "${SCRIPT_DIR}/script_print.sh" ]; then log_info "script_print.sh present dans le projet" log_info "Pour deployer: cp ${SCRIPT_DIR}/script_print.sh /home/pi/photobooth-data/script/" else log_warn "script_print.sh non trouve dans ${SCRIPT_DIR}/" fi # ------------------------------------------------------------------- # 7. SCRIPT DE NETTOYAGE AUTOMATIQUE DES JOBS BLOQUES # ------------------------------------------------------------------- log_info "Creation du script de nettoyage jobs CUPS..." cat > "${SCRIPT_DIR}/cups-cleanup.sh" << 'CLEANUP_EOF' #!/bin/bash # Nettoyer les jobs d'impression bloques/en erreur # A appeler periodiquement via cron ou le watchdog # Annuler tous les jobs en erreur cancel -a 2>/dev/null || true # Reactiver les imprimantes si elles sont en pause/erreur for printer in $(lpstat -p 2>/dev/null | grep -E "disabled|stopped" | awk '{print $2}'); do cupsenable "$printer" 2>/dev/null || true cupsdisable --release "$printer" 2>/dev/null || true cupsenable "$printer" 2>/dev/null || true echo "Imprimante reactivee: $printer" done CLEANUP_EOF chmod +x "${SCRIPT_DIR}/cups-cleanup.sh" log_info "Script cups-cleanup.sh cree" # ------------------------------------------------------------------- # RESUME # ------------------------------------------------------------------- echo "" echo "=============================================" echo " Configuration imprimante terminee !" echo "=============================================" echo "" echo "Imprimantes configurees:" lpstat -p 2>/dev/null || echo " (aucune)" echo "" echo "Commande d'impression pour photobooth-app:" echo " script_print.sh \"{filename}\" \"{media_type}\" \"{action_config_name}\" \"{copies}\"" echo "" echo "Imprimantes CUPS:" echo " Canon_SELPHY_CP1300_usb_blanche" echo " Canon_SELPHY_CP1300_usb_noire" echo "" echo "Administration CUPS: http://localhost:631" echo "" echo "Pour tester l'impression:" echo " lp -d Canon_SELPHY_CP1300_usb_blanche -o landscape -o fit-to-page /chemin/vers/une/photo.jpg" echo ""