Я хочу использовать инструмент для выполнения command
(или script
) когда мышь поражает край экрана, но без Compiz. То, что такое инструмент, похоже "граничных действий" на Compiz? Compiz не поддерживается на моем ноутбуке, таким образом, я ищу другое решение.
Я хочу выполнить команды, когда пораженный край экрана, связанного с мышью + кнопки, как Compiz, функционирует, но без Compiz. Я попробовал Brightside, но он не поддерживает край к командам выполнения, только углы.
Можно использовать xinput --query-state $XID
или xdotool getmouselocation
получить положение мыши. Функция задиры xdotool getmouselocation
--shell
опция, с этим и eval
можно присвоить значения переменным без потребности сократить любой объем производства в частях, например:
$ eval $(xdotool getmouselocation --shell)
$ echo $X, $Y
604, 778
С этим мы можем создать a 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
Я создал некоторые граничные области как примеры, они запускают и заканчивают 200 пкс от углов и покрывают область в 20 пкс от края для моего экрана на 1279x1023 пкс – необходимо будет скорректировать их к потребностям. Если Вам нужно меньше областей, просто удаляют или комментируют другие. Команды, которые Вы хотите выполнить, входят if
пункты в, в то время как функция. Для предотвращения множественных вызовов при отъезде мыши в граничной области, можно использовать sleep
, break
или просто тест, работает ли рассматриваемая команда уже.