現在のマウス座標をbashで取得する必要がありますが、xdotoolが機能しません。どうすればいいですか?
すべてのsed/awk/cutを回避するには、次を使用できます
xdotool getmouselocation --Shell
特に、
eval $(xdotool getmouselocation --Shell)
位置をシェル変数X
、Y
およびSCREEN
に配置します。その後、
echo $X $Y
後で使えるスニペットを提供しますxdotool mousemove
またはその他の用途。
いくつかの位置に順次クリックするための私の追加は、positions.txtファイルです(いくつかのeval/echo runによって与えられます):
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
これを試してください:
_# Real time mouse position.
watch -t -n 0.0001 xdotool getmouselocation
_
これにより、マウスを移動すると、マウスの位置が「x」と「y」にリアルタイムで表示されます。座標をファイルに保存して後で参照したり、スクリプトで使用してこれらのマウスの動きを次のように自動化したりできます。
_# Save real time mouse coordinates to file.
while true; do xdotool getmouselocation | sed -e 's/ screen:0 window:[^ ]*//g' >> coordinates.txt; done
_
This ^はonlyマウスの座標を座標.txtに記録します。記録中に行われたアクションを繰り返す場合は、スクリプトの各行を使用できます。単純な_ctrl+c
_は、記録セッションを終了するために行います。
これは、AFKの自動化やその他の目的でxdotool
がいかに素晴らしく実用的であるかのほんの一部です。カスタムボットでも:D
(編集)
_x:
_と_y:
_をsed
コマンドから削除する必要がある場合は、論理OR _|
_を追加できます。拡張正規表現の_-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バージョンで同じように機能しない場合があります。
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の前で)次のような2行で表示されると想定しています。
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/*;/}
HTH
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
したがって、IS機能します。コマンドの出力を解析するだけで済みます。上記のsedスクリプト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"
この猫の皮をむく方法はたくさんあります。
Xtermを使用している場合、エスケープシーケンスESC [ ? 9 h
を発行すると、マウスでクリックしたときにxtermが制御プログラム(bashなど)にエスケープシーケンスを送信します。他の端末エミュレータに同様の機能があるかどうかはわかりません。
Xtermでのマウス追跡に関する情報は http://www.xfree86.org/current/ctlseqs.html#Mouse Trackingにあります