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