ฉันจะสคริปต์เพื่อเปิดชุดโปรแกรมแต่ละรายการในพื้นที่ทำงานเฉพาะได้อย่างไร


35

ฉันมองไปรอบ ๆ และไม่สามารถหาคำตอบสำหรับปัญหาต่อไปนี้:

ฉันมีการติดตั้งหกเดสก์ท็อปบน Ubuntu 12.04 พร้อม Unity ในการเริ่มต้นทุกเช้าฉันต้องผ่านกิจวัตรการเปิดโปรแกรมห้าหรือหกรายการเหมือนกัน ฉันเปิดแต่ละรายการในพื้นที่ทำงานเฉพาะ ฉันอยากได้ระบบอัตโนมัตินี้ มีวิธีสคริปต์หรือกำหนดค่านี้

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


1
คุณอาจพบว่ามีประโยชน์ มันชี้ไปที่ wmctrl แต่ฉันไม่ได้ใช้มัน: movingtofreedom.org/2010/08/10/…
RobotHumans

สิ่งนี้อาจเป็นประโยชน์ askubuntu.com/questions/87002/…
Suhaib

1
มาที่นี่จากมุมมองที่ง่ายมากมีเหตุผลใดที่คุณไม่สามารถออกจากเครื่องในโหมด suspend เมื่อคุณออกไป ฉันคิดว่ามันจะเป็นการแก้ไขที่รวดเร็วสำหรับคุณในขณะที่คุณกำลังหาวิธีแก้ไขปัญหาที่ถาวรมากขึ้น ...
Adeyfk

เมื่อคุณพูดถึงเดสก์ท็อปคุณหมายถึงพื้นที่ทำงานหรือไม่
p0llard

กิจกรรมของ KDE อาจทำสิ่งนี้ได้
หอยทากวิศวกรรม

คำตอบ:


20

แนวคิดของ jdp407 ในการใช้ compizconfig จะเชื่อมโยงแอปพลิเคชันเฉพาะกับเวิร์กสเปซเฉพาะเพื่อให้เปิดแอปพลิเคชันทุกครั้งที่วางไว้ในพื้นที่ทำงานที่เกี่ยวข้อง หากไม่ต้องการคุณสามารถทำสิ่งต่อไปนี้:

1) ติดตั้ง wmctrl

sudo apt-get install wmctrl

2) สร้างไฟล์ที่มีเนื้อหาต่อไปนี้และทำให้สามารถเรียกใช้งานได้

#!/bin/bash
wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0]
gnome-terminal & #Say you want a terminal in the 0th workspace
nautilus & #Maybe a file browser too
sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2.
wmctrl -s 1 #Switches to workspace 1
firefox & #You get the idea. Continue for all workspaces
sleep 2
wmctrl -s 0 #You will be left at this workspace when the script finishes executing

3) โทรหาสคริปต์นี้จาก.xsessionrcในโฮมไดเร็กตอรี่ของคุณ [หากคุณต้องสร้างไฟล์นี้] เพื่อให้กระบวนการอัตโนมัติในแต่ละการเข้าสู่ระบบ หรือคุณสามารถโทรจากเทอร์มินัลเมื่อจำเป็น แก้ไข: วางไว้ใน "แอปพลิเคชันเริ่มต้น" ไม่ใช่. xsessionrc .xsessionrc จะทำงานก่อนที่สภาพแวดล้อมเดสก์ท็อปจะเสร็จสิ้นการโหลด


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


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

wmctrl -r 'Firefox' -t 1

จะเลื่อนหน้าต่างที่มี Firefox ในหัวเรื่องไปยังพื้นที่ทำงาน 1 หากมีมากกว่าหนึ่งหน้าต่างอยู่หน้าต่างแรกที่อยู่ในรายการหน้าต่างที่จัดการโดยwmctrlจะถูกย้าย คุณจะต้องรู้ชื่อของหน้าต่างที่แอปพลิเคชันสร้างขึ้นเพื่อใช้งาน นั่นเป็นเหตุผลที่ฉันไม่ได้แนะนำสิ่งนี้เป็นตัวเลือกหลัก หากชื่อจะไม่ชัดเจนเช่นกรณีที่มีแอพที่ใช้บ่อยที่สุดนี่คือวิธีที่จะไป


การเปิดแอปพลิเคชันในแบบเต็มหน้าจอ:

แอปพลิเคชั่นบางตัวเช่น gnome-terminal มีอาร์กิวเมนต์บรรทัดคำสั่งเพื่อเปิดหน้าต่างในสถานะขยายใหญ่สุดหรือในโหมดเต็มหน้าจอ หากตัวเลือกดังกล่าวมีอยู่ให้ใช้ มิฉะนั้นให้ใช้wmctrlดังนี้

wmctrl -r 'prasanth@nb37' -b add,maximized_vert,maximized_horz

นี่เป็นการขยายหน้าต่างเทอร์มินัลของฉัน (มีอยู่แล้ว) ให้สูงสุด

wmctrl -r 'prasanth@nb37' -b add,fullscreen

สิ่งนี้จะส่งหน้าต่างไปที่โหมดเต็มหน้าจอ


ผ่านwmctrlหน้าคนของ คุณอาจพบว่ามีประโยชน์ในการใช้งานมากขึ้น


1
เห็นได้ชัดว่าใช้ wmctrl เพื่อเลือกพื้นที่ทำงานไม่ทำงานในการกระจายโพสต์คม ตัวเลือก '-s' สามารถตั้งค่าเป็น '0' เท่านั้นหรือจะทำให้เกิดข้อผิดพลาดหรือไม่ทำอะไรเลย ที่มา: movingtofreedom.org/2010/08/10/…
p0llard

ฉันใช้ 12.04 กับ unity2d (ไม่มีเอฟเฟ็กต์ภาพ) และใช้งานได้สำหรับฉัน ดูเหมือนว่ามันจะไม่ทำงานเมื่อเปิดใช้งานเอฟเฟ็กต์ภาพ
S Prasanth

wmctrlใช้งานได้ดีที่นี่ (LXDE และ XFCE, การคอมโพสิตผ่าน xcompgr ที่เปิดใช้งาน)
Glutanimate

ใช้งานได้ดีสำหรับฉันใน Mint 14 กับ Cinnamon ขอบคุณ!
k102

ใน Ubuntu 14.04 ใช้wmctrl -o X,Yเพื่อย้ายไปยังวิวพอร์ตเฉพาะ ถ้าคุณมีจอภาพหลายจอคุณสามารถย้ายการใช้งานกับจอภาพอื่น ๆ wmctrl -r "App name" -e G,X,Y,W,Hที่ใช้ ทำงานได้ดีกับเอฟเฟ็กต์เอกภาพ
เนท

10

มีสอง 'ปัญหา' ที่นี่: แรกเกี่ยวข้องกับการเปิดชุดโปรแกรมเฉพาะเมื่อคุณเข้าสู่ระบบ; ที่สองเกี่ยวข้องกับการทำให้พวกเขาเปิดในพื้นที่ทำงานเฉพาะ ฉันจะจัดการกับทั้งสองแยกต่างหาก:

  1. การสร้างเซสชัน X ที่กำหนดเอง

    มันค่อนข้างง่ายที่จะทำ คุณเพียงแค่ต้องสร้าง X Session Script จากนั้นบอกให้ LightDM ใช้งาน คุณจะต้องรู้คำสั่งเพื่อเปิดโปรแกรมที่คุณต้องการจากเทอร์มินัล

    1. เปิด Terminal
    2. พิมพ์touch ~/.customxsessionและกด Enter
    3. พิมพ์gedit ~/.customxsessionและกด Enter
    4. ตอนนี้คุณจะเปิดเท็กซ์เอดิเตอร์พร้อมไฟล์เปล่า
    5. คุณต้องกำหนด X Session ในไฟล์นี้ ฉันได้สร้างไฟล์ 'เติมในช่องว่าง' ตัวอย่างที่ด้านล่างของคำตอบ ฉันคิดว่า Ubuntu ใช้ gnome-session เนื่องจากเป็นตัวจัดการหน้าต่าง แต่ฉันอาจผิด ฉันไม่สามารถทดสอบได้ในขณะนี้ (แล็ปท็อปขาด) ดังนั้นถ้ามันไม่ทำงานตามที่คาดไว้ (เช่นโหลด Gnome แทน Unity) คุณอาจต้องทำการวิจัย
    6. บันทึกไฟล์และปิด Gedit
    7. พิมพ์touch /usr/share/xsessions/multi.desktopและกด Enter
    8. พิมพ์gedit /usr/share/xsessions/multi.desktopและกด Enter
    9. ตอนนี้คุณจะเปิดเท็กซ์เอดิเตอร์พร้อมไฟล์เปล่า
    10. คัดลอกและวางรหัสที่ด้านล่างของคำตอบ (ระบุว่า '/usr/share/xsessions/multi.desktop:') ลงใน Gedit
    11. บันทึกไฟล์และปิด Gedit
    12. Reboot เมื่อคุณไปที่หน้าจอเข้าสู่ระบบหากคุณดูเซสชันที่มีอยู่ (คลิกโลโก้ Ubuntu เล็ก ๆ ถัดจากชื่อผู้ใช้ของคุณ) คุณจะเห็นหนึ่งชื่อเรียกว่า Multi-Session หากคุณลงชื่อเข้าใช้ด้วยโปรแกรมที่คุณใส่ใน X Session Script ควรเปิดโดยอัตโนมัติ
  2. การกำหนดโปรแกรมให้กับพื้นที่ทำงาน

    นี่เป็นเรื่องที่ค่อนข้างง่าย แต่ต้องการซอฟต์แวร์เพิ่มเติมที่ไม่ได้ติดตั้งใน Ubuntu โดยค่าเริ่มต้น

    1. ติดตั้ง compizconfig-settings-manager (คุณสามารถใช้ Software Center หรือเรียกใช้sudo apt-get install compizconfig-settings-managerใน Terminal)
    2. เปิดการตั้งค่า CompizConfig จาก Dash
    3. เปิดปลั๊กอิน 'วาง Windows' (อยู่ในส่วน 'การจัดการหน้าต่าง')
    4. คลิก 'ใหม่' ในส่วน 'Windows with viewport คงที่'
    5. คลิกไอคอน 'บวก'
    6. ตั้ง 'ประเภท' เป็น 'ชื่อหน้าต่าง' และป้อนชื่อหน้าต่างของหนึ่งในโปรแกรมในกล่อง 'ค่า' ตรวจสอบให้แน่ใจว่าได้ตั้งค่า 'ความสัมพันธ์' เป็น 'และ' แล้วคลิก 'เพิ่ม'
    7. ตั้งค่าเวิร์กสเปซโดยป้อนตัวเลขลงในกล่อง 'X' และ 'Y' เมื่อคุณมี 4 เวิร์กสเปซสำหรับ 'X', '1' จะถูกทิ้งไว้และ '2' นั้นถูกต้องและสำหรับ 'Y', '1' จะอยู่ด้านบนและ '2' จะอยู่ด้านล่าง เมื่อคุณเห็นเวิร์กสเปซ 6 อันขึ้นอยู่กับการตั้งค่าสิ่งต่าง ๆ การตั้งค่า 'Y' เป็น '3' จะเป็นการเลือกแถวล่างและการตั้งค่า 'X' ถึง '3' จะเป็นการเลือกคอลัมน์ที่ 3
    8. ทำซ้ำขั้นตอนที่ 4-7 สำหรับโปรแกรมที่เหลือที่คุณต้องการกำหนดพื้นที่ทำงานให้
    9. ปิดการตั้งค่า CompizConfig
  3. เข้าสู่ระบบ

    เมื่อคุณเข้าสู่ระบบคุณต้องบอก Ubuntu ว่าคุณต้องการใช้ X Session ที่กำหนดเองของคุณ

    1. Reboot
    2. เมื่อคุณไปที่หน้าจอเข้าสู่ระบบหากคุณดูเซสชันที่มีอยู่ (คลิกโลโก้ Ubuntu เล็ก ๆ ถัดจากชื่อผู้ใช้ของคุณ) คุณจะเห็นหนึ่งชื่อเรียกว่า Multi-Session หากคุณเข้าสู่ระบบด้วยโปรแกรมที่คุณใส่ใน X Session Script ควรเปิดโดยอัตโนมัติและกำหนดให้กับพื้นที่ทำงานที่คุณเลือก
  4. ปัญหาที่เกิดขึ้น

    มีหลายสิ่งหลายอย่างที่อาจจะผิดพลาดกับเรื่องนี้ไม่ว่าคุณจะทำผิดเล็กน้อยหรือถ้าฉันทำผิดพลาดเมื่อเขียนคำตอบนี้ หากมีข้อผิดพลาดตรวจสอบให้แน่ใจว่าคุณได้ทำตามคำแนะนำในจดหมายและแก้ไขสิ่งใดถ้าคุณไม่ได้ทำ หากคุณยังคงมีปัญหาแสดงความคิดเห็น

~ / .customxsession:

#!/usr/bin/env bash
program-command-1 &
program-command-2 &
program-command-3 &
program-command-4 &
program-command-5 &
program-command-6 &
exec gnome-session

/usr/share/xsessions/multi.desktop:

[Desktop Entry]
Name=Multi-Session
Exec=/home/your-username/.customxsession

1

เพิ่มแอปพลิเคชันที่ต้องการในโปรแกรม StarupApplications จากนั้นเพิ่มสคริปต์นี้เช่นกัน นี่คือสคริปต์ของฉัน: ManageWorkSpaces.sh

echo "Jeril"
wmctrl -r NetBeans IDE 7.1.1 -t 0
wmctrl -r /bin/bash -t 1
wmctrl -r Google Chrome -t 2
wmctrl -r jerilkuruvila - Skype™ -t 3

// มุ่งเน้นไปที่สถานี

wmctrl -a NetBeans IDE 7.1.1   -t 0 

แต่ฉันไม่รู้เกี่ยวกับการจัดการจอแสดงผล 2 จอ


สวัสดี Jeril! ยินดีต้อนรับสู่ถาม Ubuntu! ทางออกของคุณใช้ไม่ได้สำหรับฉัน ถ้าฉันเรียกใช้wmctrl -dฉันมี "เดสก์ท็อป" เดียวเท่านั้น คุณได้ทดสอบสิ่งนี้บน Unity ใน Ubuntu 12.10 หรือไม่?
Flimm

สวัสดี Flimm ฉันใช้ wmctrl -r ฉันมีพื้นที่ทำงาน 4 แห่ง รุ่น Ubuntu ของฉันคือ 12.04
jkuruvila
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.