कमांड का उपयोग करके कार्यक्षेत्र 1 से 2 तक अनुप्रयोगों को कैसे स्थानांतरित किया जाए


12

क्या कोई तरीका है जो मैं कमांड लाइन पर एक कार्यक्षेत्र में चल रहे एप्लिकेशन को दूसरे पर स्विच कर सकता हूं? मैं Ubuntu 10.04 का उपयोग करता हूं


नीचे दिए गए सुझावों के अनुसार अद्यतन करें

 wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020  0 bond x-nautilus-desktop
0x04e00004  0 bond bond@bond: ~
0x0482a380  0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072  0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome

अब जब मैं टाइप करता हूँ

wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.

तो इसका ठीक से उपयोग कैसे करें ऊपर में क्या गलती है?

UPDATE2
मैंने कोशिश की

wmctrl -r 0x05000072 -t 2

लेकिन खिड़कियों पर कोई प्रभाव नहीं पड़ा और वे एक ही कार्य स्थान पर रहीं।


मैंने -r और -i के उपयोग के बारे में बेहतर जानकारी के साथ अपना जवाब अपडेट किया है। तर्क -r को "उद्धरण चिह्नों" में संलग्न किया जाना चाहिए यदि इसमें रिक्त स्थान शामिल हैं। यदि तर्क -r विंडो आईडी है, तो आपको कमांड लाइन पर -i निर्दिष्ट करना होगा।

जवाबों:


14

यदि आप मेटलाइज़ (यूनिटी 2-डी) जैसे कंप्लेंट विंडो मैनेजर का उपयोग कर रहे हैं, तो आप विंडो को दूसरे डेस्कटॉप पर स्विच करने के लिए wmctrl का उपयोग कर सकते हैं। वाक्य-विन्यास है wmctrl -r :ACTIVE: -t <DESKTOP>। आप अपने वर्तमान डेस्कटॉप का उपयोग करके भी बदल सकते हैं wmctrl -s <DESKTOP>। डेस्कटॉप नंबर 0. एक लाइन पर शुरू होते हैं, यह होगा:

wmctrl -r :ACTIVE: -t 1; wmctrl -s 1

यदि आप सक्रिय एक के अलावा एक विंडो को दूसरे डेस्कटॉप पर स्विच करना चाहते हैं, तो शीर्षक से पाठ का उपयोग तर्क -r के रूप में करें। उदाहरण के लिए:

wmctrl -r "Chromium" -t 1

वैकल्पिक रूप से आप wmctrl -lउपलब्ध विंडो को सूचीबद्ध करने और विशेष स्ट्रिंग के बजाय आईडी नंबर को आर-पास करने के लिए उपयोग कर सकते हैं :ACTIVE:। एक आईडी पास करते समय, आपको -i भी जोड़ना होगा। उदाहरण के लिए:

$ wmctrl -l
0x03e00189  0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2

(wmctrl को उबंटू पर स्थापित किया जा सकता है sudo apt-get install wmctrl।) वर्तमान में, यह मानक एकता के साथ काम नहीं करता है, दुर्भाग्य से।


@skyblue महान जानकारी। एक बात मैं स्पष्ट नहीं कर रहा हूं कि मुझे डेस्कटॉप विंडो नहीं पता है और यह भी कि मैं जो देख रहा हूं, वह मान लें कि क्रोम चल रहा है और मैं चाहता हूं कि क्रोम मेरे वर्तमान डेस्कटॉप से ​​दूसरे में स्विच हो जाए तो कैसे जाना है इसके लिए।
पंजीकृत उपयोगकर्ता

यदि आप क्रोम ब्राउज़र का उपयोग कर रहे हैं (जिसमें शीर्षक में "क्रोमियम" है, तो आपको wmctrl -r "Chromium" -t 1उनके उत्तर में स्काईब्लू उल्लेख के रूप में उपयोग करने में सक्षम होना चाहिए , जब तक आप यूनिटी -2 डी जैसे एक कंप्लेंट विंडो प्रबंधक का उपयोग कर रहे हों।
जॉन ग्रुबर

3

यहाँ मेरी एक स्क्रिप्ट है जो आप से पूछते हैं: https://github.com/norswap/wmov/blob/master/wmov.sh

यह वर्तमान रूप में, यह विंडोज़ को भेज सकता है (सब्स्टेंसिंग शीर्षक के खिलाफ केस-असंवेदनशील स्ट्रिंग, जैसे कि wmctrl -rविकल्प के लिए) का चयन करके अन्य डेस्कटॉप के लिए, या तो एक स्पष्ट डेस्कटॉप नंबर चुनकर, या वर्तमान से डेस्कटॉप की दिशा का संकेत करके। डेस्कटॉप।

उदाहरण के लिए:

./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
                         # the current desktop (if any)

यह वास्तव में desgua की पोस्ट में वर्णित के रूप में काम करता है। यह अन्य कार्यक्षेत्रों में विंडोज़ भेजने की क्षमता भी है।


मुझे यह समाधान पसंद है, क्योंकि यह विंडो नाम के आंशिक मैचों के साथ खिड़कियों की पहचान कर सकता है, विशेष रूप से उपयोगी जब प्रोग्राम संदर्भ के आधार पर उनके नाम का हिस्सा संशोधित करते हैं। खिड़कियों को नाम से पुकारना उनके पीआईडी ​​को देखने से ज्यादा आसान है। दोष यह है कि यदि नाम में एक ही स्ट्रिंग के साथ कई विंडो हैं, तो कोई यह अनुमान नहीं लगा सकता है कि कौन सा wmov.sh हड़प जाएगा।
एंड्रयू पी।

3

इसके साथ ऐसा करना संभव है xdotool, लेकिन यदि आप compizइस समाधान का उपयोग कर रहे हैं तो लागू नहीं हो सकता है, इसलिए कृपया इसे ध्यान में रखें।

किसी विशेष कार्यक्षेत्र में एक विशेष विंडो (सक्रिय विंडो) को स्विच करने के लिए, आप उपयोग कर सकते हैं

xdotool getactivewindow set_desktop_for_window 1

या एक स्क्रिप्ट के लिए आप किसी विशेष प्रोग्राम की विंडो को दिए गए कार्यक्षेत्र में बदलना चाहते हैं:

xdotool search --class firefox set_desktop_for_window %@ 1

यह कमांड firefoxविंडो को खोजता है और उन्हें कार्यक्षेत्र 1 में स्थानांतरित करता है, जहां वे न्यूनतम दिखाई देंगे। firefoxडिफ़ॉल्ट डेस्कटॉप पर लौटने के लिए, बस कमांड के अंत में 1 को 0 से बदलें। दूसरे कार्यक्षेत्र में एक अलग विंडो भेजने के लिए, बस firefoxदूसरे प्रोग्राम के नाम के साथ बदलें ।

यह महत्वपूर्ण है कि आप पैरामीटर %@से पारित खिड़कियों का प्रतिनिधित्व करने के लिए उपयोग करते हैं --search, जैसे कि आप नहीं करते हैं कि विंडोज़ को स्थानांतरित नहीं किया जाएगा।

अधिक जानकारी के लिए, देखें man xdotoolऔर उबंटू ऑनलाइन का प्रबंधन करता है।



1

सबसे पहले, कोलन :ACTIVE:सक्रिय विंडो को इंगित करने के लिए जादू टोकन का हिस्सा है । आप इसे सामान्य रूप से नहीं चाहते हैं। दूसरा, आपको उनमें रिक्त स्थान के साथ तार उद्धृत करने की आवश्यकता है।

आप विंडो आईडी ( 0x...प्रत्येक पंक्ति के आरंभ में) भी प्राप्त कर सकते हैं और शीर्षक काम करने की कोशिश करने के बजाय इसका उपयोग कर सकते हैं।

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing

विंडो आईडी प्राप्त करने का एक और तरीका है, xwininfoऔर फिर उस विंडो पर क्लिक करें जिसका आईडी आप चाहते हैं।
गीकॉशर

मैंने आपकी विधि की कोशिश की लेकिन विचाराधीन विंडो पर इसका कोई प्रभाव नहीं पड़ा।
पंजीकृत उपयोगकर्ता

@ पंजीकृत उपयोगकर्ता: विंडो प्रबंधक क्या है? ( wmctrl -m)
जाइकोसॉर

विलंबित उत्तर के लिए खेद है wmctrl -m नाम: compiz वर्ग: N / A PID: N / A विंडो प्रबंधक का "डेस्कटॉप दिखा रहा है" मोड: OFF
पंजीकृत उपयोगकर्ता

मानव संसाधन विकास मंत्री। Compiz plugins का उपयोग करने के सुझावों के आधार पर, मैं अनुमान लगाने जा रहा हूं, कि Compiz वास्तव में पूर्ण EWMH कल्पना को लागू नहीं करता है इसलिए wmctrlकाम नहीं कर रहा है। (विशेष रूप से, इसे PropertyChangeविशेष गुणों के लिए रूट विंडो पर घटनाओं के लिए सुनना पड़ता है और फिर उन गुणों की सामग्री पर कार्य करना होता है।)
geekosaur

0

इस प्रश्न के हल के रूप में दी गई थोड़ी स्क्रिप्ट को संशोधित करके , निम्नलिखित "वर्तमान कार्यक्षेत्र में एक विंडो" (compiz में) लाता है:

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME="$1"

wmctrl -xlG | awk -v NAME="$NAME" '$7==NAME {print $1}' | while read WINS; do wmctrl -ir "$WINS" -e "0,0,0,$SCREEN_W,$SCREEN_H"; done

exit 0

यदि एक मनमाना कार्यक्षेत्र वांछित है, तो यह संबंधित $SCREEN_W/ को जोड़ने / बदलने की बात है $SCREEN_H, क्योंकि कई बार कार्यक्षेत्र एक विंडो लक्ष्य से दूर है।


0

प्रयत्न:

wmctrl -r “window name(or any string in the title)” -t `wmctrl -d | grep “workspace name” | cut -d" " -f1`

मुझे समझाने दो: wmctrl शो की मदद से

    -r <WIN> -t <DESK>   Move the window to the specified desktop.
    <DESK>               A desktop number. Desktops are counted from zero.
    <WIN>          This argument specifies the window. By default it's
                   interpreted as a string. The string is matched
                   against the window titles and the first matching
                   window is used. The matching isn't case sensitive
                   and the string may appear in any position
                   of the title.

                   The -i option may be used to interpret the argument
                   as a numerical window ID represented as a decimal
                   number. If it starts with "0x", then
                   it will be interpreted as a hexadecimal number.

wmctrl -d सभी कार्यस्थानों को सूचीबद्ध कर सकता हूं, मेरे कंप्यूटर में अब निम्न के रूप में दिखाया गया है:

0 - DG: 1600x900 VP: N / A WA: 0,0 1600x868 कोड
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 प्ले 
2 - DG: 1600x900 VP: N / A WA: 0,01600x868 शोध

* का अर्थ है वर्तमान कार्यक्षेत्र

BTW, wmctrl -lसभी विंडोज़ (जो आप पहले से ही जानते हैं) को सूचीबद्ध करने के लिए है, मेरे कंप्यूटर में अब वे हैं:

0x05400008 1 उपयोगकर्ता-लिनक्समिंट टर्मिनल
0x03a0008e 0 उपयोगकर्ता-लिनक्समिंट मोज़िला फ़ायरफ़ॉक्स


चूंकि "DESK" नंबर होना चाहिए, मैं grep “workspace name” | cut -d" " -f1इसे प्राप्त करने के लिए उपयोग करता हूं ।

उदाहरण के लिए, यदि मैं फ़ायरफ़ॉक्स को कार्यक्षेत्र "कोड" पर ले जाना चाहता हूं, तो मैं उपयोग कर सकता हूं:

wmctrl -r "firefox" -t 0 

या

wmctrl -r "moz" -t `wmctrl -d | grep "code" | cut -d" " -f1`

परंतु

wmctrl -r -i 0x03a0008e -t `wmctrl -d | grep "code" | cut -d" " -f1`

बस मुझे एक बार काम करो, और मुझे पता नहीं क्यों!

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