V2-202509
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
workpath=/opt/ktouch
|
||||
tmppath=/tmp/ktouch
|
||||
INPUT_FILE="$workpath/touch_dis_table.txt"
|
||||
OUTPUT_FILE="$workpath/config"
|
||||
LOG_FILE="$workpath/touchscreen.log"
|
||||
|
||||
# 日志函数
|
||||
log_message() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') kscreen-setup : $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
mkdir -p /tmp/ktouch
|
||||
cd $workpath
|
||||
|
||||
# 首先往setflag写入1停止监控
|
||||
echo -n "1" > $tmppath/setflag
|
||||
|
||||
# 消灭监控进程
|
||||
log_message "关闭监控进程"
|
||||
sleep 2
|
||||
|
||||
# 环境变量
|
||||
export DISPLAY=:0
|
||||
|
||||
# 备份config文件
|
||||
echo -n "" > $workpath/config.bk
|
||||
cp $workpath/config $workpath/config.bk
|
||||
|
||||
# 启动检测
|
||||
log_message "启动GUI化配置程序"
|
||||
$workpath/screen_binder
|
||||
log_message "配置过程结束"
|
||||
|
||||
|
||||
# ==============解析文件===============
|
||||
|
||||
# 检查输入文件是否存在
|
||||
if [[ ! -f "$INPUT_FILE" ]]; then
|
||||
log_message "错误: 输入文件 $INPUT_FILE 不存在"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -n "" > $workpath/config
|
||||
|
||||
log_message "开始处理触摸屏设备信息"
|
||||
# 逐行读取输入文件
|
||||
while IFS='|' read -r display_name touchscreen_name touchscreen_id event_path; do
|
||||
# 去除可能的空白字符
|
||||
display_name=$(echo "$display_name" | xargs)
|
||||
touchscreen_name=$(echo "$touchscreen_name" | xargs)
|
||||
event_path=$(echo "$event_path" | xargs)
|
||||
|
||||
log_message "处理设备: $touchscreen_name, 事件路径: $event_path"
|
||||
|
||||
# 检查事件路径是否为空
|
||||
if [[ -z "$event_path" ]]; then
|
||||
log_message "警告: 事件路径为空,跳过此行"
|
||||
continue
|
||||
fi
|
||||
|
||||
# 检查设备是否存在
|
||||
if [[ ! -e "$event_path" ]]; then
|
||||
log_message "警告: 设备路径 $event_path 不存在,跳过"
|
||||
continue
|
||||
fi
|
||||
|
||||
# 使用udevadm查询设备信息
|
||||
vid=""
|
||||
pid=""
|
||||
usb_path=""
|
||||
|
||||
# 获取设备信息
|
||||
device_info=$(udevadm info --query=property --path="$(udevadm info --query=path --name="$event_path" 2>/dev/null)" 2>/dev/null)
|
||||
|
||||
if [[ -n "$device_info" ]]; then
|
||||
# 提取VID和PID
|
||||
vid=$(echo "$device_info" | grep -i "ID_VENDOR_ID" | cut -d= -f2 | head -n1)
|
||||
pid=$(echo "$device_info" | grep -i "ID_MODEL_ID" | cut -d= -f2 | head -n1)
|
||||
|
||||
# 提取USB路径
|
||||
usb_path=$(echo "$device_info" | grep -i "ID_PATH" | grep -i "usb" | cut -d= -f2 | head -n1)
|
||||
|
||||
# # 如果没找到USB路径,尝试其他方式
|
||||
# if [[ -z "$usb_path" ]]; then
|
||||
# usb_path=$(echo "$device_info" | grep -i "DEVPATH" | cut -d= -f2 | head -n1)
|
||||
# fi
|
||||
fi
|
||||
|
||||
|
||||
log_message "获取到信息: VID=$vid, PID=$pid, USB路径=$usb_path"
|
||||
|
||||
# 组合新格式并写入输出文件
|
||||
new_line="${display_name}|${touchscreen_name}|${vid}|${pid}|${usb_path}"
|
||||
echo "$new_line" >> "$OUTPUT_FILE"
|
||||
log_message "写入: $new_line"
|
||||
|
||||
done < "$INPUT_FILE"
|
||||
|
||||
# 清空UOS的触摸屏设置信息
|
||||
if [ -f /usr/bin/gsettings ];then
|
||||
gsettings set com.deepin.dde.display map-output ''> /dev/null 2>&1
|
||||
if [ "$?" == "0" ];then
|
||||
log_message "成功清除UOS系统设置中的触摸屏设置信息"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 配置文件更新完成,进行一次试用
|
||||
log_message "开始进行触摸效果测试,并进行二次确认。"
|
||||
$workpath/screen_ds_once $tmppath/screen.txt
|
||||
$workpath/touch_set
|
||||
|
||||
sleep 0.5
|
||||
|
||||
# 试用后询问用户是否保存
|
||||
$workpath/check_save
|
||||
if [ ! "$?" = "0" ];then
|
||||
# 用户点击了取消,恢复之前的设置
|
||||
log_message 用户点击了取消,恢复之前的设置.
|
||||
rm $workpath/config
|
||||
mv $workpath/config.bk $workpath/config
|
||||
|
||||
# 最后写入0重新开启监控
|
||||
echo -n "0" > $tmppath/setflag
|
||||
|
||||
notify-send -u low --icon=view-fullscreen -t 15000 "取消保存,已恢复之前的配置。"
|
||||
else
|
||||
log_message 用户点击了确认,新的config将会保存
|
||||
|
||||
# 最后写入0重新开启监控
|
||||
echo -n "0" > $tmppath/setflag
|
||||
|
||||
log_message "处理完成,结果已保存到 $OUTPUT_FILE"
|
||||
notify-send -u low --icon=view-fullscreen -t 15000 "触摸屏映射工具 ktouch" "设置完成,请稍等15秒查看效果。"
|
||||
fi
|
||||
|
||||
if [ -f $workpath/config.bk ];then
|
||||
rm $workpath/config.bk
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user