#!/bin/bash # ============================================ # ktouch 日志采集与打包脚本 # 按类别分目录存储,方便排查触摸屏问题 # ============================================ set -e LOG_PATH="/opt/ktouch" NOW=$(date "+%m%d-%H%M%S") TMP_BASE="/tmp/klog_$NOW" # ---------- 子目录定义 ---------- DIR_SYSTEM="$TMP_BASE/system" DIR_HARDWARE="$TMP_BASE/hardware" DIR_APP="$TMP_BASE/app" DIR_PROGRAM="$TMP_BASE/program" mkdir -p "$DIR_SYSTEM" "$DIR_HARDWARE" "$DIR_APP" "$DIR_PROGRAM" echo "正在采集日志(部分操作需 sudo)..." # ============================================ # 1. 系统日志 ─── system/ # ============================================ echo " 采集系统日志..." # journalctl(系统服务日志) if command -v journalctl &>/dev/null; then sudo journalctl -b -n 5000 --no-pager > "$DIR_SYSTEM/journal_boot.txt" 2>/dev/null || true sudo journalctl -u ktouch_daemon --no-pager > "$DIR_SYSTEM/journal_ktouch.txt" 2>/dev/null || true sudo journalctl -u lightdm --no-pager > "$DIR_SYSTEM/journal_lightdm.txt" 2>/dev/null || true sudo journalctl -u sddm --no-pager > "$DIR_SYSTEM/journal_sddm.txt" 2>/dev/null || true fi # dmesg 内核日志 dmesg > "$DIR_SYSTEM/dmesg.txt" 2>/dev/null || true # 传统系统日志文件 sudo cp /var/log/syslog* "$DIR_SYSTEM/" 2>/dev/null || true sudo cp /var/log/messages* "$DIR_SYSTEM/" 2>/dev/null || true sudo cp /var/log/kern* "$DIR_SYSTEM/" 2>/dev/null || true sudo cp /var/log/boot* "$DIR_SYSTEM/" 2>/dev/null || true sudo cp /var/log/Xorg* "$DIR_SYSTEM/" 2>/dev/null || true sudo cp /var/log/dpkg* "$DIR_SYSTEM/" 2>/dev/null || true sudo cp /var/log/apt/* "$DIR_SYSTEM/" 2>/dev/null || true # 显示管理器日志 [ -d /var/log/lightdm ] && sudo cp -r /var/log/lightdm "$DIR_SYSTEM/" 2>/dev/null || true [ -d /var/log/sddm ] && sudo cp -r /var/log/sddm "$DIR_SYSTEM/" 2>/dev/null || true # 系统版本 if [ -f /etc/kylin-release ]; then cat /etc/os-release /etc/kylin-release 2>/dev/null > "$DIR_SYSTEM/os_version.txt" || true elif [ -f /etc/uos-release ]; then cat /etc/os-release /etc/uos-release /etc/os-version 2>/dev/null > "$DIR_SYSTEM/os_version.txt" || true else cat /etc/os-release 2>/dev/null > "$DIR_SYSTEM/os_version.txt" || true fi # ============================================ # 2. 硬件信息 ─── hardware/ # ============================================ echo " 采集硬件信息..." export DISPLAY=:0 # X11 输入设备列表 + 属性(按设备分离) xinput list > "$DIR_HARDWARE/xinput_list.txt" 2>/dev/null || true for id in $(xinput list --id-only 2>/dev/null); do echo "========== device id: $id ==========" >> "$DIR_HARDWARE/xinput_props.txt" xinput list-props "$id" >> "$DIR_HARDWARE/xinput_props.txt" 2>/dev/null || true echo "" >> "$DIR_HARDWARE/xinput_props.txt" done # xrandr 显示器信息 xrandr --verbose > "$DIR_HARDWARE/xrandr.txt" 2>/dev/null || true # libinput 设备列表 libinput list-devices > "$DIR_HARDWARE/libinput_devices.txt" 2>/dev/null || true # /proc/bus/input/devices(内核视角的输入设备) cat /proc/bus/input/devices > "$DIR_HARDWARE/input_devices.txt" 2>/dev/null || true # 每个 event 设备的 udev 信息 mkdir -p "$DIR_HARDWARE/evdev/" for ev in /dev/input/event*; do [ -e "$ev" ] || continue name=$(basename "$ev") echo "========== 设备路径: $ev ==========" >> "$DIR_HARDWARE/evdev/${name}_udev.txt" udevadm info --query=all --name="$ev" >> "$DIR_HARDWARE/evdev/${name}_udev.txt" 2>/dev/null || true # 尝试用 evtest 采集设备支持的事件类型(需要 root) if command -v evtest &>/dev/null; then sudo evtest --info "$ev" > "$DIR_HARDWARE/evdev/${name}_evtest.txt" 2>/dev/null || true & fi done wait 2>/dev/null || true # 每个 event 设备的能力位(capabilities) for ev in /dev/input/event*; do [ -e "$ev" ] || continue name=$(basename "$ev") echo "========== $ev ==========" >> "$DIR_HARDWARE/evdev/${name}_caps.txt" if command -v evemu-describe &>/dev/null; then evemu-describe "$ev" >> "$DIR_HARDWARE/evdev/${name}_caps.txt" 2>/dev/null || true fi done # DRM 显示器信息 mkdir -p "$DIR_HARDWARE/drm" for card in /sys/class/drm/card*-*; do [ -e "$card" ] || continue card_name=$(basename "$card") mkdir -p "$DIR_HARDWARE/drm/$card_name" for attr in status enabled modes dpms edid; do [ -f "$card/$attr" ] && cp "$card/$attr" "$DIR_HARDWARE/drm/$card_name/$attr" 2>/dev/null || true done done # USB 设备树 lsusb > "$DIR_HARDWARE/lsusb.txt" 2>/dev/null || true lsusb -t >> "$DIR_HARDWARE/lsusb.txt" 2>/dev/null || true lsusb -v > "$DIR_HARDWARE/lsusb_verbose.txt" 2>/dev/null || true # PCI 设备 lspci -k > "$DIR_HARDWARE/lspci.txt" 2>/dev/null || true # 块设备 lsblk -f > "$DIR_HARDWARE/lsblk.txt" 2>/dev/null || true # 硬件信息(需要 root) sudo dmidecode > "$DIR_HARDWARE/dmidecode.txt" 2>/dev/null || true # udev 规则 [ -d /etc/udev/rules.d ] && cp -r /etc/udev/rules.d "$DIR_HARDWARE/udev_rules/" 2>/dev/null || true [ -d /lib/udev/rules.d ] && cp -r /lib/udev/rules.d "$DIR_HARDWARE/udev_rules_lib/" 2>/dev/null || true echo "程序版本: ktouch V2" > "$DIR_HARDWARE/ktouch_version.txt" [ -f "$LOG_PATH/kscreen-remap-daemon" ] && head -5 "$LOG_PATH/kscreen-remap-daemon" >> "$DIR_HARDWARE/ktouch_version.txt" 2>/dev/null || true # ============================================ # 3. 程序日志与配置 ─── app/ # ============================================ echo " 采集程序日志和配置..." # 程序日志 [ -f "$LOG_PATH/touchscreen.log" ] && cp "$LOG_PATH/touchscreen.log" "$DIR_APP/touchscreen.log" 2>/dev/null || true [ -f "$LOG_PATH/install.log" ] && cp "$LOG_PATH/install.log" "$DIR_APP/install.log" 2>/dev/null || true [ -f "$LOG_PATH/sub_modules.log" ] && cp "$LOG_PATH/sub_modules.log" "$DIR_APP/sub_modules.log" 2>/dev/null || true # 日志轮转文件 for f in "$LOG_PATH/"*.log.*; do [ -f "$f" ] && cp "$f" "$DIR_APP/" 2>/dev/null || true done # 触摸屏配置 [ -f "$LOG_PATH/config" ] && cp "$LOG_PATH/config" "$DIR_APP/config" 2>/dev/null || true [ -f "$LOG_PATH/touch_dis_table.txt" ] && cp "$LOG_PATH/touch_dis_table.txt" "$DIR_APP/" 2>/dev/null || true # 显示器自定义分辨率配置 [ -d "$LOG_PATH/display_config" ] && cp -r "$LOG_PATH/display_config" "$DIR_APP/display_config" 2>/dev/null || true # /tmp/ktouch 缓存文件 if [ -d /tmp/ktouch ]; then mkdir -p "$DIR_APP/tmp_cache" cp -r /tmp/ktouch/* "$DIR_APP/tmp_cache/" 2>/dev/null || true fi # systemd 服务文件 [ -f /etc/systemd/system/ktouch_daemon.service ] && sudo cp /etc/systemd/system/ktouch_daemon.service "$DIR_APP/service_file" 2>/dev/null || true # ============================================ # 4. 程序本体 ─── program/ # ============================================ echo " 采集程序本体..." # 完整拷贝 /opt/ktouch(检查文件完整性 + 配置文件正确性) cp -r /opt/ktouch "$DIR_PROGRAM/ktouch" # 同时生成 md5 清单,方便快速比对 find /opt/ktouch -type f -exec md5sum {} \; 2>/dev/null | sort > "$DIR_PROGRAM/file_md5.txt" || true # ============================================ # 5. 整理 & 打包 # ============================================ echo " 整理并打包..." # 统一权限 sudo chmod 755 -R "$TMP_BASE" 2>/dev/null || true # 生成文件清单 find "$TMP_BASE" -type f | sort > "$TMP_BASE/_file_index.txt" # 打包 echo "正在生成压缩包..." cd /tmp tar -czf ~/ktouch_log-"$NOW".tar.gz "klog_$NOW" # 清理 sudo rm -rf "$TMP_BASE" echo "" echo "============================================" echo " 日志采集完成" echo " 文件在 主目录 或 个人 文件夹中" echo " 文件名: ktouch_log-${NOW}.tar.gz" echo "============================================" echo ""