जवाबों:
xdotoolसूचक स्थान ( xdotool getmouselocation), और हाल के संस्करणों को उजागर करता है (2.20110530.1 के बाद से) यह दर्शाता है कि उस स्थान पर कौन सी खिड़की है । कोई भी xwininfo, wmctrlया पुराने संस्करण xdotoolदिखाई नहीं देते हैं , एक खिड़की की स्क्रीन की स्थिति से मेल खाने का एक तरीका है जहां यह दिखाई देता है।
अंतर्निहित एक्स लाइब्रेरी कॉल XQueryPointer( QueryPointerसंदेश के अनुरूप ) है। इस कॉल (उपयोग 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)
$(XQueryPointer)करना 0, और xwininfo -rootइस स्थिति के लिए कॉल करना इस विचित्रता का समाधान करता है .. धन्यवाद ..
root_id.valueयदि मुद्रण की कोशिश करें child_id.value == 0।
if child_id.value == 0: print root_id.value else: print child_id.value :)
sed /x[0-9]\\++/q\;d <(xwininfo -tree -id $(XQueryPointer))
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:'आपको कुछ ऐसा दे सकता है जिससे आप आईडी को पार कर सकते हैं।
xwinfo |grep window id:' &और इसके द्वारा इसका पालन करके इसे गैर-संवादात्मक बनाया जा सकता है xdotool click 1... लेकिन clickइससे अग्रभूमि के जोखिम xdotoolको माउस पकड़ लेता है। मैं नाममात्र की नींद का उपयोग नहीं करता, क्योंकि यह जवाब पटरी पर है, इसलिए मैं यह देखने के लिए एक प्रतीक्षा करूंगा कि क्या कुछ और इनलाइन हो जाए ...
यह कोशिश करो, यह केवल xdotool का उपयोग करता है, लेकिन इसका संस्करण कम से कम "2.20110530.1" है
xdotool getmouselocation --shell | grep WINDOW
विंडो आईडी सीधे प्राप्त करने के लिए आप इसका उपयोग कर सकते हैं:
sedGetValue='s/.*=\(.*\)/\1/'
windowId=`xdotool getmouselocation --shell 2>/dev/null |grep WINDOW |sed "$sedGetValue"`
echo $windowId
xdotool getmouselocation --shell | grep WINDOW | awk -F "=" '{print $2}'
ऐसा करने के लिए xdotool काफी अच्छा है।
चलाएँ xdotool getactivewindowऔर आपको परिणाम (int) दिखाई देगा विंडो किसी भी मॉनिटर पर हो सकती है। बस पढ़ें जहां एक क्लिक के लिए x11 पॉइंटर स्थित है :), और कोई बात नहीं अगर यह एक दूरस्थ खिड़की, एक vncserver या क्यूब डेस्कटॉप वातावरण का तीसरा डेस्कटॉप है। बस काम करता है।
आप इसे बेहतर परीक्षण के लिए नींद का उपयोग करके खेल सकते हैं sleep 3; xdotool click 1+2; xdotool getactivewindow।
मैंने देखा है कि की getwindowsfocusतुलना में एक ही मूल्य देता है getactivewindow।
यदि आप मैन्युअल रूप से क्लिक करते हैं तो आपको संदर्भ मेनू दिखाई देगा, लेकिन वर्तमान माउस स्थान पर क्लिक करने और वांछित आईडी प्राप्त करने के लिए दोनों क्लिक पर 1 + 2 फायर करें।
कोशिश करो :)
यदि आपके पास अजगर-एक्सलिब तक पहुंच है , तो यहां गिल्स के उत्तर के बराबर एक छोटा और अधिक पायथोनिक है :
from Xlib.display import Display
display = Display()
window = display.screen().root
result = window.query_pointer()
print(result.child.id)
मैंने पीटर.ओ के उत्तर के साथ खिलवाड़ किया और साथ आया:
xdotool click 1|xwininfo|grep 'Window id:'
ArchWiki के पास इसका अच्छा जवाब है:
activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
activeWinId=${activeWinLine:40}
इसका उपयोग करके sedआप इसे एक ही पंक्ति में कर सकते हैं, जो संभवतः इसे करने का सबसे पठनीय तरीका है:
activeWin="$(xprop -root | sed -n 's/^_NET_ACTIVE_WINDOW(WINDOW): window id # //p')"
ध्यान दें कि xdotoolमेरे डेबियन न्यूनतम X11 में गायब था जबकि xpropशामिल किया गया था (इसी तरह sed)।
यदि आप कांटा नहीं लगाना चाहते हैं और sedन ही grepआप इसे पूरी तरह से पाठ परिवर्तन कर सकते हैं bash, जो कि शायद थोड़ा xpropबदलाव के मामले में थोड़ा अधिक सुरक्षित है :
activeWin="$(xprop -root)"
activeWin="${activeWin#*_NET_ACTIVE_WINDOW(WINDOW):}'
activeWin="${activeWin%%?_NET_*}'
activeWin="${activeWin##* }'
वैसे भी, इस तरह के एक सरल कार्य को संग्रहित करना अभी भी एक अजीब तरीका है।
xprop -root 2>/dev/null | sed -n '/^_NET_ACTIVE_WINDOW/ s/.* // p'
xdotool getwindowsfocusएक कंसोल से चल रहा है और चारों ओर माउस ले जा सकते हैं। जब तक आप माउस पर क्लिक नहीं करेंगे या कीबोर्ड (alt + टैब, आदि) पर क्लिक करते हैं, तब तक मान समान होगा
xdotool click 1लिए टिप्पणी में उल्लिखित अतुल्यकालिक विधि द्वारा .. गैर-शून्य डेस्कटॉप आईडी वैध इंसोमुच है क्योंकि यह उचित छवि देता है .... क्या डेस्कटॉप के लिए उस मान को वापस करने के लिए अजगर स्क्रिप्ट के लिए कुछ सरल ट्वीक है? ?import -window $nonzeroID screen.png