क्या टर्मिनल का उपयोग करके विभिन्न खिड़कियों पर एक "बंद" घटना का अनुकरण करने का एक तरीका है?


15

मैंने उबंटू से पूछें कि कमांड के gnome-terminalमाध्यम से सभी उदाहरणों से बाहर निकलें, लेकिन जैसा कि आप सभी पढ़ सकते हैं gnome-terminalऐसा प्रतीत नहीं होता है कि SIGमैं इस "बंद" घटना का अनुकरण करने के लिए उपयोग कर सकता हूं। तो यह मुझे पूछने के लिए आगे ले जाता है, क्या गनोम / केडीई / एलएक्सडीई / {आपके विंडो / डेस्कटॉप मैनेजर / पर्यावरण को यहां रखने का एक तरीका है} "क्लोज बटन में क्लिक करें" घटना का अनुकरण करने के लिए? मैं है पढ़ अलग सवाल है कि इस से कोई संबंध हो सकता था, लेकिन इस का जवाब नहीं है।

मैं जो देख रहा हूं वह एक वैश्विक कमांड के लिए है (यदि मौजूद है) विभिन्न परिदृश्यों में ऐसा करने के लिए। यदि कोई भी मौजूद नहीं है, तो कृपया बताएं कि "बंद" बटन कैसे काम करता है।

उपयोग करने योग्य:

जवाबों:


16

मेरा मानना ​​है कि संबंधित मैन पेज XKillClient है । आप xdotoolकिसी टर्मिनल से क्लिक किए जा रहे क्लोज बटन का अनुकरण कर सकते हैं ।

उदाहरण

यह मानते हुए कि मेरे पास एक gnome-terminalओपन है और इसका नाम "saml @ grinchy: / home" है।

  1. विंडो आईडी प्राप्त करें

    $ xdotool search --name "saml@grinchy:/home"
    96488188
    
  2. इसे Alt+ भेजेंF4

    $ xdotool windowactivate --sync 96488188 key --clearmodifiers \
         --delay 100 alt+F4
    

आप पहले कमांड को दूसरे में एम्बेड करके उन्हें एक साथ रख सकते हैं:

$ xdotool windowactivate --sync $( ...1st command...) key --clearmodifiers \
         --delay 100 alt+F4

आप xdotoolएक ही समय में दोनों को करने से खुद को बचा सकते हैं :

$ xdotool search --name "saml@grinchy:~" key alt+f4

वैश्विक स्तर पर

आप इसे अनुकूलित कर सकते हैं जो मैंने इसे उसी नाम की खिड़कियों पर चलाने के लिए प्रदान किया है:

$ xdotool search --name "saml@grinchy:~"
96488779
96468996

या अन्य विशेषताओं द्वारा खिड़कियों पर। आप xwininfoकिसी विशेष विंडो के बारे में अधिक जानने के लिए उपयोग कर सकते हैं। इसे चलाएं और फिर बस रुचि की खिड़की पर क्लिक करें:

$ xwininfo

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

xwininfo: Window id: 0x5c04d4b "saml@grinchy:~"

  Absolute upper-left X:  14
  Absolute upper-left Y:  74
  Relative upper-left X:  14
  Relative upper-left Y:  74
  Width: 941
  Height: 361
  Depth: 32
  Visual: 0x62
  Visual Class: TrueColor
  Border width: 0
  Class: InputOutput
  Colormap: 0x5c00003 (not installed)
  Bit Gravity State: NorthWestGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: no
  Corners:  +14+74  -485+74  -485-465  +14-465
  -geometry 132x24+14+74

X11 विंडो के साथ काम करते समय अन्य उपयोगी उपकरण xdpyinfo& हैं xpropxdpyinfoएक्स सर्वर के बारे में जानकारी प्राप्त करने के लिए इस्तेमाल किया जा सकता है। तो आप यह पता लगा सकते हैं कि किस विंडो में फोकस है:

$ xdpyinfo |grep focus
focus:  window 0x5c00005, revert to Parent

xpropऔर xwininfoएक -idस्विच ले सकते हैं ताकि आप उन्हें उस पर क्लिक करने के बजाय विंडो आईडी प्रदान कर सकें, जिसमें आप रुचि रखते हैं:

$ xprop -id 0x5c00001|grep -i class
WM_CLASS(STRING) = "gnome-terminal", "Gnome-terminal"

संदर्भ


मुझे लगता है कि हम और भी अधिक उपयोग करने को सरल बना सकते हैं xdotool search --name "saml@grinchy:~" key alt+f4, समस्या यह है कि मैंने यह नहीं पाया है कि यह कई खिड़कियों के साथ कैसे किया जाता है जिनका नाम समान है ...
Braiam

@ ब्रायम - क्या उनके बारे में कुछ अनोखा है? जब आप खिड़की का आह्वान करते हैं तो आप गनोम को बता सकते हैं कि आप क्या उपाधि चाहते हैं।
स्लम

@Braiam - उदाहरण के लिए:wmctrl -r :ACTIVE: -N "MyWindowTitle
SLM

1
मैं सभी खिड़कियों को भेजने के लिए यहां दिए गए उदाहरण का उपयोग करने की कोशिश कर रहा हूं key alt+F4(यदि आकार बदला जा सकता है, तो Alt + F4 क्यों नहीं), लेकिन भाग्य के बिना। और धन्यवाद: डी।
Braiam

1
माउस ओवररेटेड है: /। और मैंने सवाल हल किया, xdotool search --name "gedit|terminal|office" key --window %@ alt+F4किसी भी खिड़की की तलाश करेगा जिसमें शीर्षक नाम में जीडिट, टर्मिनल या कार्यालय है और alt + F4 कमांड भेजें।
Braiam

1

मुझे xdotoolपरतदार / छोटी गाड़ी मिली , कभी-कभी यह बंद होने के बजाय अग्रभूमि की खिड़की को बंद कर देता है। यह उस तरीके के कारण प्रतीत होता है जिस तरह से सीधे विंडो घटनाओं को भेजने के बजाय विंडो को अग्रभूमि में लाने के बाद कुंजी भेजा जाता है, और यह एक बहुत ही कष्टप्रद मुद्दा है। मैं उपयोग करने का सुझाव wmctrlदेता हूं , जो सीधे कीस्ट्रोक्स भेजे बिना एक विंडो को बंद कर देता है।

आप सीधे नाम से मिलान करके एक विंडो बंद कर सकते हैं, जैसे ये दोनों "शीर्षकहीन दस्तावेज़ 1 - जीएडिट" विंडो बंद कर देंगे:

wmctrl -c "gedit"
wmctrl -c "Untitled"

आप -Fकेवल सटीक मैचों पर विचार करने के लिए विकल्प का उपयोग कर सकते हैं :

wmctrl -F -c "Untitled Document 1 - gedit"

या आप सीधे आईडी दे सकते हैं:

wmctrl -i -c "121634821"

अधिक उपयोग उदाहरण / दस्तावेज यहां देखे जा सकते हैं

एक चीज जो मुझे बहुत उपयोगी लगती है xdotoolवह है --syncतर्क का उपयोग करने तक प्रतीक्षा करने की क्षमता । दो को एक कमांड में इस तरह से किया जाता है:

xdotool search --sync --name "gedit" | xargs wmctrl -i -c

यदि आप एक मैक पर हैं, तो आपको संभवतः -I{}पैरामीटर की आवश्यकता होगी :

xdotool search --sync --name "gedit" | xargs -I{} wmctrl -i -c {}

यदि आप कई खिड़कियों का समर्थन करना चाहते हैं, तो आपको विकल्प के साथ हर बार अधिकतम 1 तर्क पर xargsकॉल करना चाहिए । तर्क के रूप में स्पष्ट रूप से कई खिड़कियों का समर्थन नहीं करता है:wmctrl-nwmctrl

xdotool search --sync --name "gedit" | xargs -I{} -n 1 wmctrl -i -c {}

यह तब तक प्रतीक्षा करेगा जब तक कि कम से कम 1 ऐसी खिड़की न हो, और फिर उन सभी को बंद कर देता है।


क्या मुझे "आप सुनिश्चित हैं" शीघ्र संवाद बॉक्स मिलेगा?
ब्रिअम

@Braiam हां आप करेंगे, मैंने अभी इसका परीक्षण किया है। केवल अगर कोई प्रोग्राम टर्मिनल (जैसे top) में चल रहा है , तो जब वह बंद बटन पर क्लिक करता है।
jmiserez

मैं xdotool search --sync --name "Software Updater" | xargs wmctrl -i -cट्रस्टी पर चला , और सॉफ्टवेयर अपडेटर शुरू किया। अब से, सॉफ़्टवेयर अपडेटर ठीक से प्रदर्शित नहीं होता है। बस शीर्षक पट्टी प्रदर्शित करता है। अपडेट-प्रबंधक को पुनर्स्थापित करने से मदद नहीं मिली।
जर्नो

ख़ुशी से लॉग आउट और Xfce सत्र में वापस मदद की।
जारो

मैं xdotool या xprop उपयोगिताओं के साथ "gedit" नहीं ढूँढ सकता। यह केवल "गेडिट" के लिए सच है, मैं अन्य कार्यक्रम पा सकता हूं। कमांड xdotool खोज --sync --name "gedit" परिणाम नहीं देता है। क्या कोई मदद कर सकता है? उबंटू 17
गोंकी

-1

pkill (1) वह होना चाहिए जो आपको चाहिए।


3
नहीं, यह मेरे परीक्षण में से किसी पर भी "क्लोज़" इवेंट का अनुकरण नहीं करेगा (एक gedit, LibreOffice और टर्मिनल खोलें, कुछ लिखें, कमांड भेजें), अगर मैं --signalस्विच का उपयोग करता हूं killया अलग नहीं है killall। मैं उम्मीद कर रहा हूँ कि आप बचाना चाहते हैं? चेतावनी।
Braiam

आप सही हैं, लगता है मैंने आपके सवाल को गलत बताया है।
schaiba
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.