Phase 1: 守护程序、TUI配置工具、安装脚本
核心变更: - padsleep.py: 完整重写,实现守护进程主循环 - ConfigManager: JSON配置加载/保存/变更检测 - TimeChecker: 亮屏时间段判断(支持跨天) - AdbManager: ADB操作封装,自动检测设备,命令后验证 - AuditLogger: 审计日志,超50MB自动裁剪保留后10% - IpcServer: Unix Socket JSON协议IPC服务端 - 自动恢复: 亮屏时段内检测到屏幕熄灭立即点亮 - 外部状态检测: 记录用户手动开关屏事件 - padsleep_tui.py: curses TUI配置工具 - 亮屏时间段增删改查 - ADB设备列表查看/选择 - 守护进程状态监控 - 审计日志查看 - padsleep.service: systemd服务单元(路径自适应) - install.sh: 安装到 /opt/apps/padsleep,自动设置权限 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
4d0db4c390
commit
458b67213f
Executable
+128
@@ -0,0 +1,128 @@
|
||||
#!/bin/bash
|
||||
# padsleep_adb 安装脚本
|
||||
# 用法: sudo ./install.sh
|
||||
#
|
||||
# 将程序安装到 /opt/apps/padsleep,创建命令行软链接。
|
||||
# 代码中 SCRIPT_DIR 使用 Path(__file__).resolve().parent,
|
||||
# 会自动适配安装路径,无需修改代码。
|
||||
|
||||
set -e
|
||||
|
||||
INSTALL_DIR="/opt/apps/padsleep"
|
||||
BIN_DIR="/usr/local/bin"
|
||||
SERVICE_DIR="/etc/systemd/system"
|
||||
|
||||
# 颜色
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||||
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
|
||||
# ── 检查 root ──
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
error "请使用 sudo 运行此安装脚本"
|
||||
echo " sudo $0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── 确定源目录(脚本所在目录)──
|
||||
SRC_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
if [ ! -f "$SRC_DIR/padsleep.py" ]; then
|
||||
error "在 $SRC_DIR 中未找到 padsleep.py"
|
||||
echo "请在 padsleep_adb 项目目录中运行此脚本"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ── 确定运行用户(sudo 的原用户)──
|
||||
RUN_USER="${SUDO_USER:-}"
|
||||
if [ -z "$RUN_USER" ]; then
|
||||
# fallback: 从服务文件提取 User= 字段
|
||||
if [ -f "$SRC_DIR/padsleep.service" ]; then
|
||||
RUN_USER=$(grep '^User=' "$SRC_DIR/padsleep.service" | head -1 | cut -d= -f2)
|
||||
fi
|
||||
fi
|
||||
if [ -z "$RUN_USER" ]; then
|
||||
RUN_USER="$(whoami)"
|
||||
fi
|
||||
RUN_USER_HOME=$(eval echo "~$RUN_USER" 2>/dev/null || echo "/home/$RUN_USER")
|
||||
|
||||
info "源目录: $SRC_DIR"
|
||||
info "安装目标: $INSTALL_DIR"
|
||||
info "运行用户: $RUN_USER"
|
||||
|
||||
# ── 创建目标目录 ──
|
||||
mkdir -p "$INSTALL_DIR"
|
||||
info "已创建目录 $INSTALL_DIR"
|
||||
|
||||
# ── 复制文件 ──
|
||||
cp "$SRC_DIR/padsleep.py" "$INSTALL_DIR/"
|
||||
cp "$SRC_DIR/padsleep_tui.py" "$INSTALL_DIR/"
|
||||
cp "$SRC_DIR/requirements.txt" "$INSTALL_DIR/" 2>/dev/null || true
|
||||
|
||||
# 配置文件:目标不存在则复制,存在则保留
|
||||
if [ ! -f "$INSTALL_DIR/config.json" ]; then
|
||||
cp "$SRC_DIR/config.json" "$INSTALL_DIR/"
|
||||
info "已创建默认配置文件 $INSTALL_DIR/config.json"
|
||||
else
|
||||
warn "配置文件已存在,保留现有配置: $INSTALL_DIR/config.json"
|
||||
fi
|
||||
|
||||
# 日志文件:创建空文件
|
||||
touch "$INSTALL_DIR/padsleep.log"
|
||||
chmod 644 "$INSTALL_DIR/padsleep.log"
|
||||
|
||||
# 设置执行权限
|
||||
chmod 755 "$INSTALL_DIR/padsleep.py"
|
||||
chmod 755 "$INSTALL_DIR/padsleep_tui.py"
|
||||
|
||||
# 修正所有权和权限:确保运行用户有权读写配置和日志
|
||||
chown -R "$RUN_USER:$RUN_USER" "$INSTALL_DIR" 2>/dev/null || chown -R "$RUN_USER" "$INSTALL_DIR" 2>/dev/null
|
||||
chmod 755 "$INSTALL_DIR"
|
||||
chmod 644 "$INSTALL_DIR/padsleep.log" 2>/dev/null
|
||||
info "文件所有权已设置为 $RUN_USER"
|
||||
|
||||
# ── 创建软链接 ──
|
||||
ln -sf "$INSTALL_DIR/padsleep.py" "$BIN_DIR/padsleep"
|
||||
ln -sf "$INSTALL_DIR/padsleep_tui.py" "$BIN_DIR/padsleep-config"
|
||||
info "已创建命令软链接:"
|
||||
info " $BIN_DIR/padsleep → 启动守护进程"
|
||||
info " $BIN_DIR/padsleep-config → 启动 TUI 配置工具"
|
||||
|
||||
# ── 可选:复制 systemd 服务 ──
|
||||
if [ -f "$SRC_DIR/padsleep.service" ]; then
|
||||
# 复制并更新服务文件中的路径和用户
|
||||
cp "$SRC_DIR/padsleep.service" "$SERVICE_DIR/padsleep.service"
|
||||
sed -i "s|WorkingDirectory=.*|WorkingDirectory=$INSTALL_DIR|" "$SERVICE_DIR/padsleep.service"
|
||||
sed -i "s|ExecStart=.*|ExecStart=/usr/bin/python3 $INSTALL_DIR/padsleep.py|" "$SERVICE_DIR/padsleep.service"
|
||||
sed -i "s|^User=.*|User=$RUN_USER|" "$SERVICE_DIR/padsleep.service"
|
||||
systemctl daemon-reload
|
||||
info "已复制 systemd 服务文件: $SERVICE_DIR/padsleep.service"
|
||||
info "服务用户已设为: $RUN_USER"
|
||||
info "可执行以下命令启用:"
|
||||
info " sudo systemctl enable --now padsleep"
|
||||
fi
|
||||
|
||||
# ── 检查 ADB ──
|
||||
if command -v adb &>/dev/null; then
|
||||
info "ADB 已安装: $(adb --version 2>&1 | head -1)"
|
||||
else
|
||||
warn "ADB 未安装,请执行: sudo apt install adb"
|
||||
fi
|
||||
|
||||
# ── 完成 ──
|
||||
echo ""
|
||||
echo -e "${GREEN}═══════════════════════════════════════${NC}"
|
||||
info "安装完成!"
|
||||
echo ""
|
||||
info "使用方法:"
|
||||
echo " 1. 启动守护进程: padsleep"
|
||||
echo " 2. 打开配置界面: padsleep-config"
|
||||
echo " 3. 注册系统服务: sudo systemctl enable --now padsleep"
|
||||
echo ""
|
||||
info "配置文件: $INSTALL_DIR/config.json"
|
||||
info "日志文件: $INSTALL_DIR/padsleep.log"
|
||||
echo -e "${GREEN}═══════════════════════════════════════${NC}"
|
||||
Reference in New Issue
Block a user