Bashのマウスポインタの下でXウィンドウIDを見つける方法は?

Bashのマウスポインタの下でXウィンドウIDを見つける方法は?

Bashスクリプトでマウスポインタの下にあるXウィンドウのIDを取得する方法はありますか?

(編集)プロセスは非対話型でなければなりません。

答え1

xdotoolポインタ位置(xdotool getmouselocation)を公開し、最新バージョン(2.20110530.1ベース)は、その場所にどのウィンドウがあるかを示します。。表示される画面位置にウィンドウを一致させる方法がないようxwininfoです。wmctrlxdotool

デフォルトのXライブラリ呼び出しは次のとおりです。XQueryPointer(メッセージに対応QueryPointer)以下は、この呼び出しの簡単なPythonラッパースクリプトです(使用:ctypes)。エラーチェックはほとんど省略されます。これは画面0を使用していると仮定します(モニターに複数の画面がある可能性があることを知らない場合は無視してください)。

#! /usr/bin/env python
import sys
from ctypes import *
Xlib = CDLL("libX11.so.6")
display = Xlib.XOpenDisplay(None)
if display == 0: sys.exit(2)
w = Xlib.XRootWindow(display, c_int(0))
(root_id, child_id) = (c_uint32(), c_uint32())
(root_x, root_y, win_x, win_y) = (c_int(), c_int(), c_int(), c_int())
mask = c_uint()
ret = Xlib.XQueryPointer(display, c_uint32(w), byref(root_id), byref(child_id),
                         byref(root_x), byref(root_y),
                         byref(win_x), byref(win_y), byref(mask))
if ret == 0: sys.exit(1)
print child_id.value

使用例:

xwininfo -tree -id $(XQueryPointer)

答え2

このxwininfoコマンドはこの種の出力を提供しますが、情報を取得したいウィンドウをクリックする必要があります。

% xwininfo
xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0xa0000d "flask"

...

これにより、xwininfo | grep 'Window id:'IDを解析できる何かを提供できます。

答え3

これを試してみてください。 xdotoolのみを使用しますが、バージョンは「2.20110530.1」以降です。

xdotool getmouselocation --shell | grep WINDOW

ウィンドウIDを直接取得するには、次のコマンドを使用できます。

sedGetValue='s/.*=\(.*\)/\1/' # or more readable: sedGetValue='s".*=\(.*\)"\1"' # as / \ confuses me
windowId=`xdotool getmouselocation --shell 2>/dev/null |grep WINDOW |sed "$sedGetValue"`
echo $windowId

答え4

xdotoolで十分です。

実行するxdotool getactivewindowと、結果ウィンドウがすべてのモニターに表示されることがあります。クリックを待っているx11ポインタの場所を読んでください:)リモートウィンドウでもvncserverでも、キューブデスクトップ環境の3番目のデスクトップでも構いません。それはすべてです。

より良いテストのために睡眠中に遊ぶことができますsleep 3; xdotool click 1+2; xdotool getactivewindow

getwindowsfocus返された値がと等しいことがわかりましたgetactivewindow

手動でクリックするとコンテキストメニューが表示されますが、1 + 2をクリックすると現在のマウス位置をクリックすると2回クリックされ、目的のIDが得られます。

試してみてください:)

関連情報