From 4c8e51e8362c60e588eb53b70339ecea2ec65923 Mon Sep 17 00:00:00 2001 From: yuyx <237899745@qq.com> Date: Fri, 5 Dec 2025 11:52:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E5=85=B1=E4=BA=AB=E6=89=80=E6=9C=89=E6=89=93=E5=8D=B0=E6=9C=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 share_all_printers() 函数和菜单选项6,实现: - 检查 CUPS 服务状态 - 显示所有打印机当前共享状态 - 执行 cupsctl --share-printers 启用全局共享 - 对每台打印机执行 lpadmin -p -o printer-is-shared=true - 重启 CUPS 和 Avahi 服务 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- setup_cups.sh | 208 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 207 insertions(+), 1 deletion(-) diff --git a/setup_cups.sh b/setup_cups.sh index c72cac9..21412be 100755 --- a/setup_cups.sh +++ b/setup_cups.sh @@ -1526,6 +1526,109 @@ uninstall() { echo "" } +# 查看当前网络配置状态 +show_network_status() { + echo "" + echo -e "${YELLOW}═══════════════════════════════════════════════════════════${NC}" + echo -e "${YELLOW} 当前网络配置状态 ${NC}" + echo -e "${YELLOW}═══════════════════════════════════════════════════════════${NC}" + echo "" + + local current_ip=$(get_ip) + local current_gateway=$(get_gateway) + local current_interface=$(get_interface) + local current_netmask=$(get_netmask) + local current_dns=$(get_dns) + + echo -e "${BLUE}基本信息:${NC}" + echo " 网络接口: $current_interface" + echo " IP 地址: $current_ip" + echo " 子网掩码: /$current_netmask" + echo " 网关: $current_gateway" + echo " DNS: $current_dns" + echo "" + + # 检测配置模式 + local config_mode="未知" + local config_detail="" + + # 检查 NetworkManager + if systemctl is-active --quiet NetworkManager 2>/dev/null; then + local conn_name=$(nmcli -t -f NAME,DEVICE con show --active 2>/dev/null | grep "$current_interface" | cut -d':' -f1) + if [ -n "$conn_name" ]; then + local method=$(nmcli -g ipv4.method con show "$conn_name" 2>/dev/null) + if [ "$method" = "auto" ]; then + config_mode="DHCP (自动获取)" + config_detail="通过 NetworkManager 管理" + elif [ "$method" = "manual" ]; then + config_mode="静态 IP (固定)" + config_detail="通过 NetworkManager 管理" + fi + fi + # 检查 netplan + elif [ -d /etc/netplan ]; then + config_detail="通过 netplan 管理" + local found_config=false + for f in /etc/netplan/*.yaml; do + if [ -f "$f" ]; then + if grep -q "dhcp4: true\|dhcp4: yes" "$f" 2>/dev/null; then + config_mode="DHCP (自动获取)" + found_config=true + break + elif grep -q "dhcp4: false\|dhcp4: no\|addresses:" "$f" 2>/dev/null; then + config_mode="静态 IP (固定)" + found_config=true + break + fi + fi + done + if [ "$found_config" = false ]; then + config_mode="未检测到配置" + fi + # 检查传统 interfaces + elif [ -f /etc/network/interfaces ]; then + config_detail="通过 /etc/network/interfaces 管理" + if grep -q "iface $current_interface inet dhcp" /etc/network/interfaces 2>/dev/null; then + config_mode="DHCP (自动获取)" + elif grep -q "iface $current_interface inet static" /etc/network/interfaces 2>/dev/null; then + config_mode="静态 IP (固定)" + fi + fi + + echo -e "${BLUE}配置模式:${NC}" + if [[ "$config_mode" == *"DHCP"* ]]; then + echo -e " 状态: ${GREEN}$config_mode${NC}" + echo -e " 说明: IP 由路由器自动分配,换网络环境会自动适应" + elif [[ "$config_mode" == *"静态"* ]]; then + echo -e " 状态: ${YELLOW}$config_mode${NC}" + echo -e " 说明: IP 已固定,换网络环境可能无法连接!" + else + echo -e " 状态: ${RED}$config_mode${NC}" + fi + echo " $config_detail" + echo "" + + # 显示配置文件内容 + echo -e "${BLUE}配置文件详情:${NC}" + if [ -d /etc/netplan ]; then + for f in /etc/netplan/*.yaml; do + if [ -f "$f" ]; then + echo " 文件: $f" + echo " ─────────────────────────────────" + sed 's/^/ /' "$f" + echo "" + fi + done + elif [ -f /etc/network/interfaces ]; then + echo " 文件: /etc/network/interfaces" + echo " ─────────────────────────────────" + grep -A 10 "iface $current_interface" /etc/network/interfaces 2>/dev/null | sed 's/^/ /' + echo "" + fi + + echo -e "${YELLOW}═══════════════════════════════════════════════════════════${NC}" +} + # 显示帮助 show_help() { echo "CUPS 打印服务一键配置脚本" @@ -1538,6 +1641,94 @@ show_help() { echo "" } +# 一键共享所有打印机 +share_all_printers() { + echo "" + echo -e "${YELLOW}═══════════════════════════════════════════════════════════${NC}" + echo -e "${YELLOW} 一键共享所有打印机 ${NC}" + echo -e "${YELLOW}══���════════════════════════════════════════════════════════${NC}" + echo "" + + # 检查CUPS是否运行 + if ! systemctl is-active --quiet cups 2>/dev/null; then + error "CUPS 服务未运行,请先安装 CUPS" + return 1 + fi + + # 获取所有打印机 + local printers=$(lpstat -a 2>/dev/null | awk '{print $1}') + + if [ -z "$printers" ]; then + warn "未找到任何打印机" + echo "请先在 CUPS 管理界面添加打印机" + return 1 + fi + + echo -e "${BLUE}检测到以下打印机:${NC}" + echo "$printers" | while read p; do + local shared=$(grep -A 20 "" /etc/cups/printers.conf 2>/dev/null | grep "Shared" | head -1 | awk '{print $2}') + if [ "$shared" = "Yes" ]; then + echo -e " - $p ${GREEN}(已共享)${NC}" + else + echo -e " - $p ${RED}(未共享)${NC}" + fi + done + echo "" + + read -p "是否将所有打印机设置为共享? [Y/n]: " confirm < /dev/tty + confirm=${confirm:-Y} + + if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo "已取消" + return 0 + fi + + echo "" + info "启用全局打印机共享..." + cupsctl --share-printers + + info "设置各打印机共享..." + echo "$printers" | while read p; do + if [ -n "$p" ]; then + echo " 启用共享: $p" + lpadmin -p "$p" -o printer-is-shared=true + fi + done + + info "重启 CUPS 服务..." + systemctl restart cups + + # 重启 avahi 以更新广播 + if systemctl is-active --quiet avahi-daemon 2>/dev/null; then + systemctl restart avahi-daemon + fi + + echo "" + success "所有打印机已设置为共享!" + echo "" + + # 显示结果 + echo -e "${BLUE}当前打印机共享状态:${NC}" + local all_shared=true + for p in $(lpstat -a 2>/dev/null | awk '{print $1}'); do + local shared=$(grep -A 20 "" /etc/cups/printers.conf 2>/dev/null | grep "Shared" | head -1 | awk '{print $2}') + if [ "$shared" = "Yes" ]; then + echo -e " - $p ${GREEN}[已共享]${NC}" + else + echo -e " - $p ${RED}[未共享]${NC}" + all_shared=false + fi + done + echo "" + + if [ "$all_shared" = true ]; then + local ip=$(get_ip) + echo -e "${GREEN}现在可以从其他设备连接打印机了:${NC}" + echo -e " CUPS 管理界面: http://$ip:631" + echo -e " Windows 添加打印机地址: http://$ip:631/printers/打印机名" + fi +} + # 显示主菜单 show_menu() { clear @@ -1554,9 +1745,11 @@ show_menu() { echo " 2) 卸载 CUPS 打印服务" echo " 3) 切换为 DHCP 自动获取 IP" echo " 4) 切换为静态 IP(固定当前 IP)" + echo " 5) 查看当前网络状态(静态/DHCP)" + echo " 6) 一键共享所有打印机" echo " 0) 退出" echo "" - read -p " 请输入选项 [1/2/3/4/0]: " choice < /dev/tty + read -p " 请输入选项 [0-6]: " choice < /dev/tty case "$choice" in 1) @@ -1580,6 +1773,19 @@ show_menu() { read -p "按 Enter 返回主菜单..." < /dev/tty show_menu ;; + 5) + show_network_status + echo "" + read -p "按 Enter 返回主菜单..." < /dev/tty + show_menu + ;; + 6) + check_root + share_all_printers + echo "" + read -p "按 Enter 返回主菜单..." < /dev/tty + show_menu + ;; 0) echo "已退出" exit 0