Ubuntu / Gnome: เปิดแอปพลิเคชั่นในพื้นที่ทำงานเฉพาะ


10

บอกให้แอปพลิเคชันเปิดในพื้นที่ทำงานเฉพาะได้อย่างไร


ข้อมูลเพิ่มเติม:

ฉันต้องการมี C ++ IDE ในเวิร์กสเปซ 2, Java IDE ของฉันในเวิร์กสเปซ 3 และอีเมลเบราว์เซอร์และเบ็ดเตล็ดในเวิร์กสเปซสี่ ฉันยังใช้เชลล์สคริปต์ที่ทำงานเมื่อเข้าสู่ระบบ:

#!/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เพื่อกำหนดกฎสำหรับ windows ไปยังพื้นที่ทำงาน

ดูเอกสารสำหรับตัวอย่างที่แน่นอน

แต่ MrStatic ก็มีข้อเสนอแนะที่ดีเช่นกัน ลองใช้อันแรกคุณอาจไม่จำเป็นต้องใช้เชลล์สคริปต์

หากคุณต้องการให้เป็นคำสั่งที่คุณสามารถใช้ในสคริปต์เปลือกที่มีลักษณะที่wmctrl


ขอบคุณสำหรับคำแนะนำจะตรวจสอบออก - ฉันจะยังคงพิจารณาโซลูชัน CLI เท่านั้นเป็นโซลูชันที่เหนือกว่าแม้ว่าดังนั้นหากคุณมีความคิดใด ๆ สำหรับหนึ่งแจ้งให้เราทราบ
bguiz

4
ลอง wmctrl ฉันเพิ่มลิงก์ในคำตอบของฉันด้านบน
Mikel

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

และสร้างสคริปต์ (ในตัวอย่าง Thunderbird บนพื้นที่ทำงานที่สอง ( -t 1)):

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

หากต้องการทราบชื่อแอปพลิเคชันของคุณบน wmctrl คุณสามารถดูได้โดยการแตะที่เทอร์มินัลของคุณ:

wmctrl -l

และแทนที่ด้วยชื่อที่ถูกต้องในสคริปต์

เป็นคาร์ฟูลด้วยอักษรตัวใหญ่ ("ธันเดอร์เบิร์ด" ไม่ใช่ "ธันเดอร์เบิร์ด") !!

ตัวอย่างอื่น ๆ ที่มี firefox ในพื้นที่ทำงาน 3d ( -t 2):

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

ทำงานกับ Debain 10 ด้วย Cinnamon แต่ควรใช้ได้กับทุกคน


-1

ฉันค่อนข้างแน่ใจว่าเป็นไปไม่ได้ที่จะทำ เหตุผลที่เป็นเช่นนั้นคือสภาพแวดล้อมแบบวินโดว์อย่าง GNOME คาดว่าซอฟต์แวร์จะจัดการสิ่งนี้และผู้ผลิตซอฟต์แวร์คาดว่าสภาพแวดล้อมแบบวินโดวส์จะจัดการสิ่งนี้

Devilspie เป็นแนวคิดที่ดี แต่ใช้รูปแบบการจับคู่ (เช่นถ้าชื่อ == 'google-chrome') แล้วจะเกิดอะไรขึ้นถ้าฉันเปิดเบราว์เซอร์สองตัว พวกเขาทั้งสองถูกย้ายไปยังพื้นที่ทำงานเดียวกันหรือไม่ ฉันมีพื้นที่ทำงาน 6x3 = 18 แต่ละอันมีตัวอย่างของโครเมียมเป็นพิเศษ มันจะช่วยถ้าฉันสามารถเปลี่ยนชื่อโปรแกรมเหล่านี้ (เช่น 'google-chrome1', 'google-chrome2' ... ) แต่ฉันหาวิธีทำไม่ได้ ดังนั้นเราต้องใช้ wmctrl

wmctrl นั้นดีกว่า b / c เล็กน้อยนอกเหนือจากการใช้หัวเรื่องหน้าต่างคุณยังสามารถใช้ ID หน้าต่างหรือเพียงแค่ใช้หน้าต่างที่ไฮไลต์อยู่ในปัจจุบัน รหัสหน้าต่างเป็นความเจ็บปวดที่จะได้รับ 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

แต่การควบคุมจะไม่ถูกส่งกลับไปที่บรรทัดคำสั่งจนกว่า AFED จะออกจากระบบ สิ่งที่เราต้องทำเพื่อให้ได้สิ่งนี้คือการใส่&เครื่องหมาย

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% ของเวลากลับไปที่บรรทัดคำสั่งก่อนที่ตัวจัดการหน้าต่างจะเปิดหน้าต่างและไม่มีวิธีหา id หน้าต่าง เราต้องตั้งค่าเทคนิคการวนลูปที่ซับซ้อนมากเพื่อทดสอบว่ามีการสร้างหน้าต่างใหม่หรือไม่และต้องเดาว่าเป็นหน้าต่างที่เรากำลังมองหาหรือไม่

การตรวจสอบหน้าต่างที่ใช้งานผ่านการตั้งค่าสถานะ:ACTIVE:มีปัญหาเดียวกันไม่รอให้โปรแกรมทำงานเสร็จ

wmctrlนัดฉันเป็นโปรแกรมที่แปลกมาก ดูเหมือนว่ามันถูกออกแบบมาสำหรับผู้ที่ไม่มีเม้าส์หรือไม่สามารถลากโปรแกรมของพวกเขาข้ามพื้นที่ทำงานได้


OP กล่าวว่าเบราว์เซอร์ทำงานในพื้นที่ทำงานสี่ หากจำเป็นต้องเปิดเบราว์เซอร์บนพื้นที่ทำงานอื่นหลังจากสคริปต์เริ่มต้นเซสชันทำงานคำสั่งสุดท้ายในสคริปต์นั้นอาจเป็นโหมดสลีป pkill devilspie
Mikel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.