วิธีรับ Unity Launcher ที่แตกต่างกันด้วยไอคอนแตกต่างกันในแต่ละเวิร์กสเปซ


20

ฉันอ่านคำตอบต่าง ๆ เพื่อแยกโฟลเดอร์เดสก์ท็อปในแต่ละพื้นที่ทำงานโดยใช้ Screenlets, devilspie หรือ CCSM ... แต่นั่นไม่ใช่คำตอบสำหรับคำถามของฉัน ฉันติดตั้ง LTS 14.04 สองสามวันที่ผ่านมาและประสบความสำเร็จเป็นอย่างดีในการใช้แอพส่วนใหญ่และแอปใหม่ให้ทำงาน สิ่งที่ฉันต้องการคือมีพื้นที่ทำงานแยกต่างหาก 4 แห่งแต่ละแห่งมีไอคอนแตกต่างกันสำหรับสภาพแวดล้อมที่ฉันเรียกใช้ ตัวอย่างเช่น,

  • พื้นที่ทำงาน 1 - อุทิศให้กับแอปวิทยาศาสตร์และคณิตศาสตร์
  • พื้นที่ทำงาน 2 - อุทิศให้กับเครื่องมือดนตรี
  • พื้นที่ทำงาน 3 - สำหรับวงจรอิเล็กทรอนิกส์และการจำลอง
  • เวิร์กสเปซ 4 - สำหรับการท่องเว็บและการคำนวณทั่วไป

นึกถึงแท็บเล็ต Android ที่แต่ละหน้าจอสามารถมีไอคอนแยกกัน

ต้องชัดเจนว่าจะทำอย่างไร แต่ฉันไม่สามารถหาคำตอบได้ ฉันอายุ 4 วันใน Ubuntu ดังนั้นโปรดอย่าคิดว่าฉันรู้ว่าฉันกำลังทำอะไรอยู่!


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

ใช่นั่นคือยาโคบ มีเครื่องมือเฉพาะ (เช่น LTspice) สำหรับการจำลองวงจรที่ไม่มีความเกี่ยวข้องกับดนตรี
เดนนิส J

สามารถทำได้อย่างไม่ต้องสงสัย อาจเป็นในวันพรุ่งนี้หรือวันเสาร์ :)
Jacob Vlijm

ขอบคุณยาโคบ เพิ่งเริ่มต้นวันใหม่ฉันจะลองดู ฟังดูเหมือนสิ่งที่ฉันขอ !!! ฉันจะเข้าไปดูแล้วรายงานกลับ
Dennis J

ยาโคบฉันยังไม่ได้เริ่มเลย ก่อนที่ฉันจะเริ่มฉันต้องการสร้างภาพสำรอง ฉันไม่แน่ใจว่าการสำรองข้อมูลในการตั้งค่าระบบจะคืนค่าพาร์ติชันทั้งหมด ได้รับการค้นคว้า Clonezilla ดูเหมือนว่าเป็นเครื่องมือที่ดีในการสร้าง / เรียกคืนภาพ ด้วยวิธีนี้หากมีสิ่งผิดปกติฉันสามารถกลับไปก่อนที่ฉันจะทำให้มันยุ่ง มีไดรฟ์ 1TB ใหม่มาในสัปดาห์นี้ ฉันจะต้องใช้ Clonezilla เพื่อย้ายระบบไป สคริปต์ดูเหมือนว่าฉันสามารถติดตามพวกเขาและฉันจะรายงานกลับทันทีที่ฉันไป ขอบคุณสำหรับการติดตามฉันเดิมพันคนอื่น ๆ จะขอบคุณสิ่งที่คุณทำเช่นกัน
Dennis J

คำตอบ:


24

การตั้งค่า Unity Launcher ต่อพื้นที่ทำงาน:


1. ป้อนคำอธิบายรูปภาพที่นี่ 2. ป้อนคำอธิบายรูปภาพที่นี่ 3. ป้อนคำอธิบายรูปภาพที่นี่ 4. ป้อนคำอธิบายรูปภาพที่นี่

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

การตั้งค่าประกอบด้วยสองส่วน:

  1. ชุดคีย์ลัด (หนึ่ง) เพื่อ "จดจำ" ชุดไอคอนตัวเรียกใช้งานสำหรับเวิร์กสเปซปัจจุบัน

  2. สคริปต์ที่ทำงานในพื้นหลังติดตามพื้นที่ทำงานปัจจุบันและการตั้งค่า Unity Launcher ที่เกี่ยวข้อง มันทำหน้าที่เมื่อใดก็ตามที่ผู้ใช้สลับพื้นที่ทำงาน

มันทำงานอย่างไร

มีสคริปต์เล็ก ๆ สองเรื่องที่เกี่ยวข้อง:

แรกสคริปต์ไม่สิ่งง่ายๆ: มันจะเขียนเนื้อหาของปล่อยปัจจุบันเป็น (ซ่อน) แฟ้มในไดเรกทอรีบ้านของคุณชื่อ (เลข) หลังจากพื้นที่ทำงานของคุณในปัจจุบัน

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

แค่นั้นแหละ.

วิธีการตั้งค่า

  1. สคริปต์wmctrlจะต้องติดตั้ง:

    sudo apt-get install wmctrl
    
  2. สร้างไดเรกทอรีที่เก็บสคริปต์ทั้งสอง มันเป็นตัวนำเข้าที่สคริปต์ทั้งสองจะถูกเก็บไว้ด้วยกันในไดเรกทอรีเดียวเนื่องจากพวกเขาแบ่งปันฟังก์ชั่นการใช้งานและอีกหนึ่งการนำเข้าจากที่อื่น ด้วยเหตุผลเดียวกันเป็นสิ่งสำคัญที่คุณต้องตั้งชื่อให้ตรงตามที่ระบุไว้ด้านล่าง

  3. คัดลอกสคริปต์แต่ละตัวด้านล่างลงในไฟล์เปล่า (ต่างกัน) บันทึกไว้ในไดเรกทอรี (สร้างขึ้นใน2.) ชื่อตรงตาม:

    set_workspace.py

    #!/usr/bin/env python3
    import subprocess    
    import os
    
    workspace_data = os.environ["HOME"]+"/.launcher_data_"
    key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
    
    def get_res():
        # get resolution
        xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
        pos = xr.index("current")
        return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]
    
    def current():
        # get the current viewport
        res = get_res()
        vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
        dt = [int(n) for n in vp_data[3].split("x")]
        cols = int(dt[0]/res[0])
        curr_vpdata = [int(n) for n in vp_data[5].split(",")]
        curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
        return str(curr_col+curr_row*cols)
    
    def remember_current():  
        currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
        f = workspace_data+current()
        open(f, "w").write(currlauncher)
    
    if __name__ == "__main__":
        remember_current()

    launcher_perworkspace.py

    #!/usr/bin/env python3
    import subprocess
    import set_workspace
    import time
    
    workspace_data = set_workspace.workspace_data
    key = set_workspace.key
    
    def check_datafile(desktop):
        f = workspace_data+str(desktop)
        try:
            new_launcher = open(f).read()
            command = key[1]+key[2]+' "'+str(new_launcher)+'"'
            subprocess.Popen(["/bin/bash", "-c", command])
        except FileNotFoundError:
            pass
    
    curr_dt1 = set_workspace.current()
    check_datafile(curr_dt1)
    
    while True:
        time.sleep(1)
        curr_dt2 = set_workspace.current()
        if curr_dt2 != curr_dt1:
            check_datafile(curr_dt2)
        curr_dt1 = curr_dt2
  4. เพิ่มสคริปต์แรก ( set_workspace.py) ลงในคีย์ผสมที่คุณเลือก: การตั้งค่าระบบ> "คีย์บอร์ด"> "ทางลัด"> "ทางลัดที่กำหนดเอง" คลิกที่ "+" และเพิ่มคำสั่ง:

    python3 /path/to/set_workspace.py
    
  5. เรียกใช้คีย์ผสมและดูว่าไฟล์เช่น: .launcher_data_3ถูกสร้างในโฮมไดเร็กตอรี่ของคุณหรือไม่ คุณอาจต้องกดCtrl+ Hเพื่อทำให้ไฟล์นั้นปรากฏ (ไฟล์ที่เริ่มต้นด้วย a .จะไม่ปรากฏให้เห็นตามค่าเริ่มต้น)

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

  6. คุณทำจริงแล้ว ทดสอบสคริปต์พื้นหลังด้วยคำสั่ง (จากหน้าต่างเทอร์มินัลเรียกใช้ต่อไป):

    python3 /path/to/launcher_perworkspace.py
    

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

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
    

หมายเหตุ

  1. หากคุณต้องการเปลี่ยนชุดไอคอนเรียกใช้งานสำหรับเวิร์กสเปซเฉพาะให้ไปที่เวิร์กสเปซเพิ่ม / ลบไอคอนตามที่คุณต้องการและกดคีย์ผสมของคุณ (ไม่จำเป็นต้องรีสตาร์ทสคริปต์พื้นหลัง)
  2. จากความคิดเห็นที่ฉันได้รับความรู้สึกที่มีความเข้าใจผิดบางอย่างบนทางลัดที่จะจำ Launcher ปัจจุบันสำหรับพื้นที่ทำงานปัจจุบัน คุณจะต้องเป็นหนึ่งในแป้นพิมพ์ลัดที่จะ "ช่วย" ปล่อยปัจจุบันสำหรับพื้นที่ทำงานปัจจุบัน มันจะทำงานเหมือนกันทุกประการไม่ว่าคุณจะใช้พื้นที่ทำงานแบบใด สคริปต์ที่ตัวเองจะกำหนดสิ่งที่เป็นพื้นที่ทำงานปัจจุบัน

แก้ไข

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

ฉันค่อนข้างมั่นใจว่ามากเกินไป (หรือน้อยเกินไป :)) เคารพสิ่งที่สคริปต์กำลังทำอยู่ อย่างไรก็ตามคุณสามารถสำรอง Unity Launcher ปัจจุบันได้ง่ายๆด้วยคำสั่ง:

printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output

สิ่งนี้จะสร้างไฟล์~/launcher_outputที่มีคำสั่งที่สมบูรณ์เพื่อเรียกคืน Unity Launcher ของคุณกลับสู่สถานการณ์เริ่มต้น ในกรณีฉุกเฉินเพียงคัดลอกเนื้อหาของไฟล์และวางในเทอร์มินัล

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


การแก้ไขที่สำคัญ (2)

ตามที่ร้องขอในความคิดเห็นขอรุ่นที่ทำงานโดยไม่ต้องใช้การรวมทางลัดใด ๆ เพียงแค่เรียกใช้สคริปต์และเริ่มตั้งค่าตัวเรียกใช้งานของคุณบนพื้นที่ทำงานเฉพาะ สคริปต์จะสร้างไฟล์ (มองไม่เห็น) ในโฮมไดเร็กตอรี่ของคุณเพื่อจดจำชุดตัวเรียกใช้ (Unity-) ของคุณในพื้นที่ทำงานที่แตกต่างกัน

ฉันลองใช้สคริปต์ "รุ่น 1" แต่ "ฝัง" ตัวเรียกใช้ตัวตรวจสอบสองตัวระหว่างพื้นที่ทำงานสองชุดกลายเป็นกลอุบายเพื่อป้องกันพฤติกรรมที่ไม่พึงประสงค์ (บันทึกข้อมูลที่ไม่ถูกต้อง) เมื่อเคลื่อนที่ผ่านพื้นที่ทำงานอย่างรวดเร็ว

วิธีใช้

  1. เช่นเดียวกับเวอร์ชันแรกสคริปต์นี้ใช้wmctrl:

    sudo apt-get install wmctrl

  2. คัดลอกสคริปต์ลงในไฟล์ว่างแล้วบันทึกเป็น launcher_toworkspace.py

  3. รันด้วยคำสั่ง:

    python3 /path/to/launcher_toworkspace.py
    
  4. หากทำงานได้ตามที่คาดไว้ให้เพิ่มคำสั่งต่อไปนี้ลงในแอปพลิเคชันเริ่มต้นของคุณ:

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
    

บท

#!/usr/bin/env python3
import subprocess    
import os
import time

datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"

key = [
    "gsettings get ",
    "gsettings set ",
    "com.canonical.Unity.Launcher favorites",
    ]

def get_launcher():
    return subprocess.check_output(
        ["/bin/bash", "-c", key[0]+key[2]]
        ).decode("utf-8").strip()

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current():
    # get the current viewport
    res = get_res()
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

curr_ws1 = current()
currlauncher1 = get_launcher()

while True:
    time.sleep(1)
    currlauncher2 = get_launcher()
    curr_ws2 = current()
    datafile = workspace_data+curr_ws2
    if curr_ws2 == curr_ws1:
        if currlauncher2 != currlauncher1:
            open(datafile, "wt").write(currlauncher2)
    else:
        if not os.path.exists(datafile):
            open(datafile, "wt").write(currlauncher2)
        else:
            curr_set = open(datafile).read()
            command = key[1]+key[2]+' "'+str(curr_set)+'"'
            subprocess.Popen(["/bin/bash", "-c", command])
    curr_ws1 = curr_ws2
    currlauncher1 = get_launcher()

บันทึก

หากคุณตั้งค่าพื้นที่ทำงานของคุณด้วยสคริปต์เวอร์ชันก่อนหน้าพวกเขาควรใช้งานกับเวอร์ชันนี้ด้วย

PPA

ตาม 2015-04-23 คำถามที่ดีของเดนนิสเจและการสนับสนุนของ Parto ได้นำไปสู่การสร้างppaสคริปต์ครอบคลุม webupd8รวมถึง GUI ในการจัดการ

ppa:vlijm/lswitcher

หากต้องการติดตั้งให้เรียกใช้:

sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher

ป้อนคำอธิบายรูปภาพที่นี่

ตั้งแต่ตอนนี้มันถูกจัดทำขึ้นสำหรับ Trusty & Utopic ฉันจะเพิ่มคนอื่น ๆ หลังจากการทดสอบ ฉันจะเพิ่มตัว.debติดตั้งด้วย แต่ฉันขอแนะนำให้ใช้ppaเพราะโดยปกติแล้วสิ่งประเภทนี้จะได้รับการอัปเดตทุกครั้ง

เนื่องจากที่ตั้งของข้อมูลวิวพอร์ตเปลี่ยนจาก~/เป็น~/.config/lswitcherคุณจะต้องตั้งค่า Unity Launcher อีกครั้งหากคุณใช้สคริปต์ก่อนหน้า


เป็นไปได้โดยไม่ใช้แป้นพิมพ์ลัดหรือไม่ ฉันเห็นภาพมันเป็นด้านล่าง: เมื่ออยู่ในพื้นที่ทำงานหนึ่งชุดไอคอนเท่านั้นที่จะปรากฏ เมื่อฉันสลับไปยังพื้นที่ทำงานสองตัวเรียกใช้งานนั้นว่างเปล่ายกเว้นไอคอนเส้นประและถังขยะ - จากนั้นฉันเพิ่มไอคอนที่ฉันต้องการซึ่งจะถูกบันทึกโดยอัตโนมัติ ทำซ้ำสำหรับพื้นที่ทำงานอื่น ๆ บางทีคุณอาจสร้าง GUI ได้ - จะให้ +500 ถ้าคุณใช้งานได้ GUI เป็นตัวเลือก
Parto

1
@Parto WOW คุณรู้วิธีรับความสนใจจากใครบางคน :) เป็นไปได้แน่นอน แต่จะต้องใช้หลายเธรดเพื่อให้ทำงานได้อย่างราบรื่น (ลองใช้สคริปต์ติดตามแบบ "โมโน") คาดหวังคำตอบในอีกไม่กี่วันข้างหน้า :)
Jacob Vlijm

1
น่ากลัว ฉันจะรอ ... คำถามที่ดี แต่สงสัยว่าฉันไม่ได้คิดอย่างนั้น
Parto

1
@Parto ฉันต้องบอกว่าฉันประทับใจในความใจดีของคุณ ฉันวางแผนที่จะทำงานต่อไปและอาจจะสร้างppaรวมถึง GUI เพื่อเริ่ม / หยุดการตั้งค่า ฯลฯ ขอบคุณสำหรับการผลักดัน! เดสก์ท็อปของคุณดูดีมาก!
Jacob Vlijm

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