Подтвердить что ты не робот

Как получить текущие координаты мыши в bash?

Мне нужно получить текущие координаты мыши в bash, а xdotool не работает для меня. Как мне это сделать?

4b9b3361

Ответ 1

Чтобы избежать всех файлов sed/awk/cut, вы можете использовать

xdotool getmouselocation --shell

В частности,

eval $(xdotool getmouselocation --shell)

поместит эту позицию в переменные оболочки X, Y и SCREEN. После этого

echo $X $Y

даст фрагмент, готовый для более позднего xdotool mousemove или любого другого использования.


Моим дополнительным для последовательного нажатия на несколько позиций является файл position.txt(заданный несколькими прогонами eval/echo):

123 13
423 243
232 989

И код, который его использует:

while read line; do
     X=`echo $line| cut -c1-3`; 
     Y=`echo $line| cut -c4-7`;
     xdotool mousemove --sync $((  0.5 + $X )) $(( 0.5 + $Y ));
     xdotool click 1
done < positions.txt

Если нет необходимости масштабировать пиксели (в отличие от моего случая), это может быть простой

while read line; do
     xdotool mousemove --sync $line;
     xdotool click 1
done < positions.txt

Ответ 2

Попробуйте это:

# Real time mouse position.
watch -t -n 0.0001 xdotool getmouselocation 

Это покажет ваше местоположение мыши на "х" и "у" в режиме реального времени, когда вы перемещаете его. Вы можете сохранить свои координаты в файл для последующей ссылки или использовать в скрипте для автоматизации этих движений мыши следующим образом:

# Save real time mouse coordinates to file.
while true; do xdotool getmouselocation | sed -e 's/ screen:0 window:[^ ]*//g' >> coordinates.txt; done

Этот ^ будет записывать только координаты мыши в файле arguments.txt. Вы можете использовать каждую строку в скрипте, если хотите повторить действия, выполненные во время записи. Простой ctrl+c сделает для завершения сеанса записи.

Это всего лишь небольшой пример того, насколько удивительным и практичным может быть xdotool для автоматизации AFK и других вещей. Даже кастомные боты: D

(Редактировать)

Если вам нужно убрать x: и y: из команды sed, вы можете добавить логическое ИЛИ | , используя -E для расширенного регулярного выражения, -E следующим образом:

xdotool getmouselocation | sed -E "s/screen:0 window:[^ ]*|x:|y://g"

И если вы хотите использовать перенаправление и подстановку команд для более компактной команды, вы можете использовать следующее, а не трубу:

sed -E 's/screen:0 window:[^ ]*|x:|y://g' <<< $(xdotool getmouselocation)

В качестве отказа от ответственности, регулярное выражение sed написано для GNU sed и может не работать одинаково на разных платформах или версиях sed.

Ответ 3

Что вы имели в виду под xdotool не работает?

Какой вывод

xdotool getmouselocation

В любом случае, если вы можете скомпилировать программу C: http://dzen.geekmode.org/dwiki/doku.php?id=misc:xget-mouse-position

Что касается вашего комментария ниже, вы написали:

Warning: XTEST extension unavailable on '(null)'. Some functionality may be disabled; See 'man xdotool' for more info. x:654 y:453 screen:0 window:1665

Я предполагаю (перед Windows XP), что вы получаете его на две строки, например:

Warning: XTEST extension unavailable on '(null)'. Some functionality may be disabled; See 'man xdotool' for more info. 
x:654 y:453 screen:0 window:1665

Если это случай, вы должны перенаправить STDERR как:

xdotool getmouselocation 2>/dev/null

Это пропустит предупреждение.

Если ваш единственный вход - это строка позитива cursos, тогда соединение с sed даст вам такие координаты:

xdotool getmouselocation 2>/dev/null | \
sed 's/x:\([0-9]\+\)[ \t]y:\([0-9]\+\)[ \t].*/\1;\2/'
# OUTPUT should by something like:  "654;453"

Если вы хотите использовать координаты (с bash):

export COORDINS=`xdotool getmouselocation 2>/dev/null | sed 's/x:\([0-9]\+\)[ \t]y:\([0-9]\+\)[ \t].*/\1;\2/'`
export XPOS=${COORDINS/;*/}
export YPOS=${COORDINS/*;/}

НТН

Ответ 4

Если вы используете xterm, вы можете создать escape-последовательность ESC [ ? 9 h, которая заставит xterm отправить управляющую программу в управляющую программу (т.е. bash) при щелчке мышью. Я не знаю, имеют ли другие терминальные эмуляторы аналогичную функциональность.

Информация о отслеживании мыши в xterm находится в http://www.xfree86.org/current/ctlseqs.html#Mouse Отслеживание

Ответ 5

I get Warning: XTEST extension unavailable on '(null)'. Some functionality may be disabled; See 'man xdotool' for more info. x:654 y:453 screen:0 window:1665

Так что это работает для вас. Вам просто нужно проанализировать вывод команды. Вы можете использовать sed script zsolt, опубликованный выше, или множество других опций:

  xdotool getmouselocation 2>/dev/null | cut -d\  -f1,2 -
  // returns something like "x:2931 y:489"

или

  xdotool getmouselocation 2>/dev/null \
   | awk 'BEGIN{RS=" ";ORS=RS} {split($0,a,":");} a[1]~/^[xy]$/{print a[2];}'
  // returns something like "2931 489 "

или

  xdotool getmouselocation 2>/dev/null | sed 's/ sc.*//; s/.://g; s/ /x/'
  // returns something like "2931x489"

Множество способов скинуть эту кошку.