如何在Android的Termux中编写Bash脚本监听屏幕点击及位置并响应
嘿,我刚好在Termux里折腾过类似的需求,分享下我是怎么实现的!核心就是利用Termux提供的触摸事件工具,配合Bash的条件判断来实现“点击区域绑定动作”的效果,就像文本版的网页链接一样。
前置准备
首先得确保你装了Termux API工具包和w3m,因为我们要用到触摸监听命令和文本浏览器:
pkg update && pkg install termux-api w3m
安装后第一次运行相关命令时,会弹出权限请求,记得给Termux授予触摸权限哦。
核心实现步骤
1. 监听屏幕点击事件与坐标
Termux自带的termux-touch-event命令能实时输出屏幕触摸的动作类型(按下、松开等)和坐标。我们可以用一个循环持续监听:
while true; do # 只捕获按下动作的事件 event=$(termux-touch-event | grep "DOWN") if [ -n "$event" ]; then # 从输出中解析x、y坐标(输出格式类似:DOWN 150 250) x=$(echo "$event" | awk '{print $2}') y=$(echo "$event" | awk '{print $3}') echo "检测到点击:x=$x, y=$y" # 后续在这里加区域判断逻辑 fi done
这个循环会一直运行,每次检测到屏幕按下动作,就提取出对应的坐标值。
2. 定义“可点击区域”并绑定跳转动作
接下来我们要给屏幕划分虚拟的“链接区域”,比如把顶部区域分成左右两块,分别对应打开不同网页。可以先获取终端的实际尺寸,再动态定义区域:
# 获取当前终端的宽高 screen_width=$(tput cols) screen_height=$(tput lines) # 定义左右两个点击区域的边界 left_area_end=$((screen_width / 2)) right_area_start=$((left_area_end + 1)) # 绑定区域对应的动作(用w3m打开网页) left_action="w3m https://github.com" right_action="w3m https://stackoverflow.com"
然后在之前的循环里添加判断逻辑,根据点击坐标匹配区域,执行对应动作:
if [ -n "$event" ]; then x=$(echo "$event" | awk '{print $2}') y=$(echo "$event" | awk '{print $3}') # 只处理顶部5行的点击(避免误触其他区域) if [ $y -le 5 ]; then if [ $x -le $left_area_end ]; then echo "正在打开GitHub..." $left_action elif [ $x -ge $right_area_start ]; then echo "正在打开Stack Overflow..." $right_action fi fi fi
3. 添加可视化提示(模拟网页链接)
为了让用户清楚知道哪里可以点击,我们可以用tput定位光标,在终端顶部绘制类似链接的提示文本:
# 清屏并绘制初始提示界面 clear tput cup 0 0 echo "[点击左侧] 打开 GitHub" tput cup 0 $right_area_start echo "[点击右侧] 打开 Stack Overflow" tput cup 5 0 echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本"
把这段代码放在循环前面,用户一运行脚本就能看到清晰的操作指引。
完整示例脚本
把上面的部分整合起来,就是一个可直接运行的完整脚本:
#!/data/data/com.termux/files/usr/bin/bash # 前置检查:确保依赖工具已安装 if ! command -v termux-touch-event &> /dev/null; then echo "请先安装termux-api:pkg install termux-api" exit 1 fi if ! command -v w3m &> /dev/null; then echo "请先安装w3m:pkg install w3m" exit 1 fi # 获取终端尺寸 screen_width=$(tput cols) screen_height=$(tput lines) # 定义点击区域和对应动作 left_area_end=$((screen_width / 2)) right_area_start=$((left_area_end + 1)) left_action="w3m https://github.com" right_action="w3m https://stackoverflow.com" # 绘制初始操作界面 clear tput cup 0 0 echo "[点击左侧] 打开 GitHub" tput cup 0 $right_area_start echo "[点击右侧] 打开 Stack Overflow" tput cup 5 0 echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本" # 持续监听触摸事件 echo "开始监听屏幕点击..." while true; do event=$(termux-touch-event | grep "DOWN") if [ -n "$event" ]; then x=$(echo "$event" | awk '{print $2}') y=$(echo "$event" | awk '{print $3}') # 只响应顶部5行的点击 if [ $y -le 5 ]; then if [ $x -le $left_area_end ]; then clear echo "正在打开GitHub..." $left_action # 返回主界面 clear tput cup 0 0 echo "[点击左侧] 打开 GitHub" tput cup 0 $right_area_start echo "[点击右侧] 打开 Stack Overflow" tput cup 5 0 echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本" elif [ $x -ge $right_area_start ]; then clear echo "正在打开Stack Overflow..." $right_action # 返回主界面 clear tput cup 0 0 echo "[点击左侧] 打开 GitHub" tput cup 0 $right_area_start echo "[点击右侧] 打开 Stack Overflow" tput cup 5 0 echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本" fi fi fi done
扩展建议
- 可以增加更多点击区域,比如底部区域绑定“退出脚本”的动作
- 用
tput绘制带边框的文本按钮,让界面更直观 - 动态适配不同终端尺寸,避免固定坐标导致的适配问题
- 支持长按、滑动等复杂触摸动作(需要解析
termux-touch-event的更多输出字段)
内容的提问来源于stack exchange,提问作者ANDuser




