我希望使用一个工具在鼠标触及屏幕边缘时运行command
(或script
),但没有 Compiz。Compiz 的“边缘操作”工具是什么样的?我的笔记本电脑不支持 Compiz,所以我正在寻找其他解决方案。
我希望当点击与鼠标 + 按钮相关的屏幕边缘时执行命令,就像 Compiz 功能一样,但没有 Compiz。我尝试了 Brightside,但它不支持边缘运行命令,只支持角落。
答案1
您可以使用xinput --query-state $XID
或xdotool getmouselocation
来获取鼠标位置。的强大功能xdotool getmouselocation
是它的--shell
选项,有了它,eval
您可以将值分配给变量,而无需将任何输出分成几部分,例如:
$ eval $(xdotool getmouselocation --shell)
$ echo $X, $Y
604, 778
这样我们就可以构建一个while
循环来不断测试所需的值,例如:
while :;
do
eval $(xdotool getmouselocation --shell)
(( $X <= 20 )) && break
sleep .1
done
这将运行到$X
20 或更少,并每 100 毫秒测试一次。我建议根据你的具体情况构建一个脚本,如下所示:
#!/bin/bash
id=9 # device XID, run xinput without any option to get a list of devices and their IDs
interval=.01 # sleep interval between tests in seconds
# edge areas
# to display the current mouse coordinates run xdotool getmouselocation
# syntax: x_min x_max y_min y_max
e1=(200 1079 0 20)
e2=(1259 1279 200 823)
e3=(200 1079 1003 1023)
e4=(0 20 200 823)
while :; do
eval $(xdotool getmouselocation --shell)
if ( [ ${#e1[@]} -ne 0 ] && (( $X >= ${e1[0]} && $X <= ${e1[1]} && $Y >= ${e1[2]} && $Y <= ${e1[3]} )) ); then
# your commands for edge area e1
echo "Your mouse was detected inside the monitored area no. 1 at $X, $Y."
sleep 2
fi
if ( [ ${#e2[@]} -ne 0 ] && (( $X >= ${e2[0]} && $X <= ${e2[1]} && $Y >= ${e2[2]} && $Y <= ${e2[3]} )) ); then
# your commands for edge area e2
echo "Your mouse was detected inside the monitored area no. 2 at $X, $Y."
sleep 2
fi
if ( [ ${#e3[@]} -ne 0 ] && (( $X >= ${e3[0]} && $X <= ${e3[1]} && $Y >= ${e3[2]} && $Y <= ${e3[3]} )) ); then
# your commands for edge area e3
echo "Your mouse was detected inside the monitored area no. 3 at $X, $Y."
sleep 2
fi
if ( [ ${#e4[@]} -ne 0 ] && (( $X >= ${e4[0]} && $X <= ${e4[1]} && $Y >= ${e4[2]} && $Y <= ${e4[3]} )) ); then
# your commands for edge area e4
echo "Your mouse was detected inside the monitored area no. 4 at $X, $Y."
sleep 2
fi
sleep $interval
done
我创建了一些边缘区域作为示例,这些区域从角落开始和结束 200px,并覆盖我 1279x1023px 屏幕的边缘 20px 内的区域 - 您需要根据需要进行调整。如果您需要较少的区域,只需删除或注释其他区域即可。您要执行的命令位于if
while 函数内的子句中。为了防止将鼠标放在边缘区域内时多次调用,您可以使用sleep
,break
或者只是测试相关命令是否已运行。