diff --git a/setup_cups.sh b/setup_cups.sh index c86d12e..c72cac9 100755 --- a/setup_cups.sh +++ b/setup_cups.sh @@ -737,8 +737,10 @@ install_pantum_driver() { rm -rf "$tmp_dir" } -# 显示 HPLIP 插件安装提示 -show_hplip_plugin_notice() { +# 安装 HPLIP 插件(自动下载) +install_hplip_plugin() { + info "正在安装 HP 打印机插件..." + # 检测 hplip 版本 local hplip_version="" if command -v hp-info > /dev/null 2>&1; then @@ -751,28 +753,89 @@ show_hplip_plugin_notice() { fi if [ -z "$hplip_version" ]; then - warn "无法检测 HPLIP 版本" - return + warn "无法检测 HPLIP 版本,跳过插件安装" + return 1 fi - echo "" - echo -e "${YELLOW}╔══════════════════════════════════════════════════════════════════╗${NC}" - echo -e "${YELLOW}║ ${RED}重要提示:HP 打印机需要安装专有插件才能正常工作!${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}╠══════════════════════════════════════════════════════════════════╣${NC}" - echo -e "${YELLOW}║${NC} 检测到 HPLIP 版本: ${GREEN}${hplip_version}${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${BLUE}请手动下载并安装对应版本的插件:${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} 1. 下载地址: ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${GREEN}https://sourceforge.net/projects/hplip/files/${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${GREEN}hplip/${hplip_version}/hplip-${hplip_version}-plugin.run${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} 2. 上传到服务器后执行: ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${GREEN}sudo hp-plugin -i -p /tmp/hplip-${hplip_version}-plugin.run${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} ${YELLOW}║${NC}" - echo -e "${YELLOW}║${NC} 3. 安装过程中如提示 GPG 验证失败,输入 ${GREEN}y${NC} 继续即可 ${YELLOW}║${NC}" - echo -e "${YELLOW}╚══════════════════════════════════════════════════════════════════╝${NC}" - echo "" + info "检测到 HPLIP 版本: ${hplip_version}" + + # 插件文件路径 + local plugin_file="/tmp/hplip-${hplip_version}-plugin.run" + local plugin_url="http://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-${hplip_version}-plugin.run" + + # 下载插件 + info "下载 HP 插件: ${plugin_url}" + if wget -q --show-progress -O "$plugin_file" "$plugin_url" 2>/dev/null; then + success "插件下载完成" + else + warn "插件下载失败,尝试备用地址..." + # 备用地址 + plugin_url="https://developers.hp.com/sites/default/files/hplip-${hplip_version}-plugin.run" + if wget -q --show-progress -O "$plugin_file" "$plugin_url" 2>/dev/null; then + success "插件下载完成(备用地址)" + else + warn "插件下载失败" + echo "" + echo -e "${YELLOW}请手动下载安装 HP 插件:${NC}" + echo -e " 下载: ${GREEN}http://www.openprinting.org/download/printdriver/auxfiles/HP/plugins/hplip-${hplip_version}-plugin.run${NC}" + echo -e " 安装: ${GREEN}hp-plugin -i -p /tmp/hplip-${hplip_version}-plugin.run${NC}" + echo "" + return 1 + fi + fi + + # 安装插件(使用 expect 或直接执行) + info "安装 HP 插件..." + if command -v expect > /dev/null 2>&1; then + # 使用 expect 自动应答 + expect << EOF +spawn sh "$plugin_file" --nox11 +expect { + "Do you accept" { send "y\r"; exp_continue } + "Enter a directory path" { send "/usr/share/hplip/data/plugins\r"; exp_continue } + eof +} +EOF + else + # 直接执行插件安装脚本 + chmod +x "$plugin_file" + sh "$plugin_file" --nox11 --keep --noexec --target /tmp/hplip-plugin-extract || true + + if [ -d /tmp/hplip-plugin-extract ]; then + # 复制插件文件 + mkdir -p /usr/share/hplip/data/plugins + cp -f /tmp/hplip-plugin-extract/*.so /usr/share/hplip/data/plugins/ 2>/dev/null || true + cp -f /tmp/hplip-plugin-extract/plugin.spec /usr/share/hplip/data/plugins/ 2>/dev/null || true + + # 设置权限 + chmod 644 /usr/share/hplip/data/plugins/*.so 2>/dev/null || true + chmod 644 /usr/share/hplip/data/plugins/plugin.spec 2>/dev/null || true + + # 创建版本标记 + echo "[plugin]" > /var/lib/hp/hplip.state + echo "installed = 1" >> /var/lib/hp/hplip.state + echo "version = ${hplip_version}" >> /var/lib/hp/hplip.state + mkdir -p /var/lib/hp + + rm -rf /tmp/hplip-plugin-extract + success "HP 插件安装完成" + else + # 尝试使用 hp-plugin 命令 + warn "尝试使用 hp-plugin 安装..." + echo -e "\n${YELLOW}请在下面的提示中输入 y 接受许可协议${NC}\n" + hp-plugin -i -p "$plugin_file" || { + warn "自动安装失败" + echo "" + echo -e "${YELLOW}请手动安装 HP 插件:${NC}" + echo -e " ${GREEN}hp-plugin -i -p ${plugin_file}${NC}" + echo -e " 提示 GPG 验证失败时输入 ${GREEN}y${NC} 继续" + echo "" + } + fi + fi + + # 清理 + rm -f "$plugin_file" 2>/dev/null || true # 保存版本号供后续使用 HPLIP_VERSION="$hplip_version" @@ -837,9 +900,9 @@ install_drivers() { install_pdf_printer fi - # 显示 HP 插件安装提示 + # 安装 HP 插件 if [ "$install_hp" = true ]; then - show_hplip_plugin_notice + install_hplip_plugin fi } @@ -1023,8 +1086,11 @@ EOF install_pdf_printer() { info "安装虚拟 PDF 打印机..." - # 安装 cups-pdf 包 - apt install -y cups-pdf + # 安装 cups-pdf 包(Debian 13+ 包名改为 printer-driver-cups-pdf) + apt install -y printer-driver-cups-pdf 2>/dev/null || apt install -y cups-pdf 2>/dev/null || { + warn "cups-pdf 包不可用,跳过虚拟 PDF 打印机安装" + return 0 + } # 等待 CUPS 服务就绪 sleep 2