उबंटू / सूक्ति: एक विशिष्ट कार्यक्षेत्र में एक आवेदन खोलें


10

किसी विशिष्ट कार्यक्षेत्र में खोलने के लिए कोई एप्लिकेशन कैसे बता सकता है?


और जानकारी:

मुझे कार्यक्षेत्र 2 में अपना C ++ IDE, कार्यक्षेत्र 3 में मेरा Java IDE, और कार्यक्षेत्र चार में मेरा ईमेल, ब्राउज़र और विविध होना पसंद है। मैं एक शेल स्क्रिप्ट का भी उपयोग करता हूं जो लॉग इन पर निष्पादित होती है:

#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4

बेशक वर्तमान में यह सभी वर्तमान कार्यक्षेत्र में खुलता है ... क्या मेरे लिए यह निर्दिष्ट करने का कोई तरीका है कि प्रत्येक कमांड को किस कार्यक्षेत्र में शुरू करना चाहिए?

अग्रिम में धन्यवाद!


1
यदि आपके पास हमेशा ये प्रोग्राम चल रहे हैं, तो सबसे आसान और सरल तरीका यह है कि आप उन सभी को लोड करें जहाँ आप उन्हें चाहते हैं और 'लॉग आउट करते समय एप्लिकेशन याद रखें'
Unfundednut

1
@MrStatic: सुझाव के लिए धन्यवाद, लेकिन मुझे अन्य कारणों से एक शेल स्क्रिप्ट में होने की आवश्यकता है - और इसके लिए मुझे लॉग आउट करते समय एप्लिकेशन को याद नहीं रखना चाहिए
bguiz

जवाबों:


4

आप devilspie का उपयोग नियमों को सेट करने के लिए कर सकते हैं जिसके लिए विंडोज़ किस कार्यक्षेत्र पर जाती हैं।

ठीक उसी के उदाहरण के लिए डॉक्स देखें ।

लेकिन MrStatic का एक अच्छा सुझाव भी है। कोशिश करें कि पहले एक, आपको अपनी शेल स्क्रिप्ट की भी आवश्यकता न हो।

यदि आपको इसकी आवश्यकता है तो एक कमांड के रूप में आप एक शेल स्क्रिप्ट में उपयोग कर सकते हैं, wmctrl पर एक नज़र डालें ।


सुझाव के लिए धन्यवाद, इसकी जांच करेंगे - मैं अभी भी एक CLI- एकमात्र समाधान को एक बेहतर समाधान मानूंगा, हालांकि यदि आपके पास एक के लिए कोई विचार है, तो मुझे बताएं!
bguiz

4
Wmctrl आज़माएं। मैंने अपने उत्तर में एक लिंक जोड़ा।
मिकेल

7

मैंने wmctrlउपकरण की कोशिश की है और पाया है कि मेरे लिए काम करने वाला सबसे आसान समाधान निम्नलिखित कमांड के साथ विंडो को स्थानांतरित करना है:

wmctrl -r <WindowName> -t <WorkspaceNumber>

ध्यान दें कि कार्यक्षेत्र संख्या 0. से शुरू होती है। अंतिम आप कमांड के साथ अपने पसंदीदा कार्यक्षेत्र में जा सकते हैं:

wmctrl -s <WorkspaceNumber>

1

मैं विशिष्ट कार्यस्थानों में अनुप्रयोगों के एक विशिष्ट सेट को खोलने के लिए स्क्रिप्ट में इस मूल संरचना का उपयोग करता हूं..इस उदाहरण से मेरा टर्मिनल खुलता है और इसे कार्यक्षेत्र 1 पर ले जाता है ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1

इस कोड के बारे में थोड़ा स्पष्टीकरण स्वागत योग्य होगा। यह cd से क्यों शुरू होता है? आप कब तक उम्मीद कर रहे हैं? एक विंडो नाम "me @ myspc ~" है ??
wranvaud

0

Wmctrl स्थापित करें

sudo apt install wmctrl

और एक स्क्रिप्ट बनाएं (इस उदाहरण में दूसरे कार्यक्षेत्र पर थंडरबर्ड ( -t 1)):

#!/bin/sh
(thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Wmctrl पर अपना एप्लिकेशन नाम जानने के लिए आप इसे अपने टर्मिनल पर टैप करके देख सकते हैं:

wmctrl -l

और इसे स्क्रिप्ट में सही नाम से बदलें।

कैपिटल लेटर ("थंडरबर्ड" नहीं "थंडरबर्ड") के साथ कैर्रीफ़ुल बनें !!

3D कार्यस्थान पर फ़ायरफ़ॉक्स के साथ अन्य उदाहरण ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

दालचीनी के साथ डेबिन 10 पर काम करें। लेकिन सभी के लिए काम करना चाहिए


-1

मैं काफी निश्चित हूं कि ऐसा करना असंभव है। इसका कारण यह है कि GNOME जैसे खिड़की वाले वातावरण इस से निपटने के लिए सॉफ़्टवेयर की अपेक्षा करते हैं, और सॉफ़्टवेयर निर्माता विंडोिंग वातावरण से इसे संभालने की अपेक्षा करते हैं।

डेविल्स्की एक अच्छा विचार है, लेकिन यह पैटर्न मिलान (यानी यदि नाम == 'google-chrome') करता है। तो क्या होगा अगर मैं दो ब्राउज़र खोलूं? वे दोनों एक ही कार्यक्षेत्र में चले गए? मेरे पास 6x3 = 18 कार्यक्षेत्र हैं, जिनमें से प्रत्येक क्रोम के एक विशेष उदाहरण के साथ है। अगर मैं इन कार्यक्रमों (यानी 'google-chrome1', 'google-chrome2' ...) का नाम बदल सकूं तो मुझे इसमें मदद मिलेगी, लेकिन मुझे ऐसा करने का कोई तरीका नहीं मिल रहा है। इसलिए हमें wmctrl का उपयोग करना होगा।

wmctrl विंडो टाइटल का उपयोग करने के अलावा थोड़ा बेहतर b / c है, आप विंडो आईडी का भी उपयोग कर सकते हैं या वर्तमान में हाइलाइट की गई विंडो का उपयोग कर सकते हैं। विंडो आईडी b / c पाने के लिए एक दर्द है, वे तुरंत उत्पन्न नहीं होते हैं। निचे देखो

gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

लेकिन तब तक कमांड लाइन पर नियंत्रण वापस नहीं किया जाता है जब तक कि AFER gedit बाहर नहीं निकलता है। इसके लिए हमें बस इतना करना होगा कि एक &संकेत दिया जाए

gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

लेकिन अब नियंत्रण, 99.999% समय है, कमांड लाइन पर वापस आ गया है इससे पहले कि विंडो प्रबंधकों ने विंडो लॉन्च की और विंडो आईडी खोजने का कोई तरीका नहीं है। यह देखने के लिए कि क्या कोई नई विंडो बनाई गई है, और यह देखने के लिए कि क्या वह खिड़की है जिसे हम खोज रहे हैं, यह देखने के लिए परीक्षण करने के लिए एक बहुत ही जटिल लूपिंग तकनीक स्थापित करनी होगी।

ध्वज के माध्यम से सक्रिय विंडो के लिए जाँच करने :ACTIVE:में एक ही समस्या है, यह प्रोग्राम के चलने का इंतजार नहीं करता है।

wmctrlमुझे एक बहुत ही अजीब कार्यक्रम के रूप में मारता है। ऐसा लगता है कि यह बिना माउस के लोगों के लिए डिज़ाइन किया गया था, या कार्यक्षेत्रों में अपने कार्यक्रमों को शारीरिक रूप से खींचने में असमर्थ था।


ओपी ने कहा कि ब्राउज़र कार्यक्षेत्र चार पर जाता है। यदि सत्र स्टार्टअप स्क्रिप्ट के चलने के बाद अन्य कार्यस्थानों पर ब्राउज़र खोलना संभव हो, तो उस स्क्रिप्ट की अंतिम कमांड नींद हो सकती है; pkill devilspie।
मिकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.