142 lines
4.0 KiB
Bash
142 lines
4.0 KiB
Bash
#!/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
|
|
|