Làm cách nào để có một Trình khởi chạy Unity khác nhau với các biểu tượng khác nhau trên mỗi không gian làm việc?


20

Tôi đã đọc qua các câu trả lời khác nhau để có các thư mục máy tính để bàn riêng biệt trong mỗi Không gian làm việc bằng cách sử dụng Screenlets, devilspie hoặc CCSM ... nhưng đó không phải là câu trả lời cho câu hỏi của tôi. Tôi đã cài đặt 14.04 LTS vài ngày trước và đã thành công khi có hầu hết các ứng dụng của tôi và một số ứng dụng mới để chạy. Điều tôi muốn là có 4 không gian làm việc riêng biệt, mỗi không gian có một số biểu tượng khác nhau cho môi trường tôi chạy. Ví dụ,

  • Workspace 1 - dành riêng cho các ứng dụng khoa học và toán học
  • Workspace 2 - dành riêng cho các công cụ âm nhạc
  • Không gian làm việc 3 - cho các mạch điện tử và mô phỏng
  • Workspace 4 - để duyệt web và tính toán chung

Hãy nghĩ về một máy tính bảng Android nơi mỗi màn hình có thể chứa các biểu tượng riêng biệt.

Rõ ràng là phải làm thế nào để làm điều này, nhưng tôi không thể tìm thấy câu trả lời. Tôi mới 4 ngày tuổi trên Ubuntu, vì vậy xin đừng cho rằng tôi biết mình đang làm gì!


Bạn có nghĩa là một bộ biểu tượng trình khởi chạy khác nhau cho mỗi không gian làm việc? Yummy tôi thích điều đó, nhưng tôi phải chạy, sẽ làm việc vào ngày mai nếu đó là những gì bạn muốn nói. Làm ơn cho tôi biết.
Jacob Vlijm

Vâng, đó là Jacob. Có các công cụ cụ thể (như LTspice) để mô phỏng mạch không liên quan đến âm nhạc.
Dennis J

Có thể được thực hiện mà không có nghi ngờ. Có thể là ngày mai hoặc SUnday :).
Jacob Vlijm

Cảm ơn Jacob. Chỉ cần bắt đầu cho một ngày, vì vậy tôi sẽ thử. Điều này nghe giống như những gì tôi yêu cầu !!! Tôi sẽ nhận được vào nó và báo cáo lại.
Dennis J

Jacob, tôi chưa bắt đầu điều này. Trước khi tôi bắt đầu, tôi muốn tạo một hình ảnh sao lưu. Tôi không chắc chắn rằng Sao lưu trong Cài đặt hệ thống sẽ khôi phục toàn bộ phân vùng. Đã nghiên cứu Clonezilla, có vẻ như là một công cụ tốt để tạo / khôi phục hình ảnh. Theo cách đó, nếu có sự cố xảy ra, tôi có thể quay lại trước khi tôi làm hỏng nó. Có một ổ đĩa 1TB mới trên đường trong tuần này. Tôi sẽ cần sử dụng Clonezilla để di chuyển hệ thống tới nó. Các kịch bản trông giống như tôi có thể theo dõi chúng, và tôi sẽ báo cáo lại ngay khi tôi bắt đầu. Cảm ơn đã theo dõi, tôi cá là những người khác cũng sẽ đánh giá cao những gì bạn đã làm.
Dennis J

Câu trả lời:


24

Đặt Trình khởi chạy Unity khác nhau cho mỗi không gian làm việc:


1. nhập mô tả hình ảnh ở đây 2. nhập mô tả hình ảnh ở đây 3. nhập mô tả hình ảnh ở đây 4. nhập mô tả hình ảnh ở đây

Giải pháp bên dưới giúp bạn dễ dàng có một bộ biểu tượng trình khởi chạy khác nhau trên mỗi không gian làm việc, bất kể bạn có bao nhiêu không gian làm việc.

Thiết lập bao gồm hai phần:

  1. Tổ hợp phím tắt (một) để "ghi nhớ" bộ biểu tượng trình khởi chạy cho không gian làm việc hiện tại.

  2. Một tập lệnh để chạy trong nền, theo dõi không gian làm việc hiện tại và đặt Trình khởi chạy Unity tương ứng. Nó hoạt động bất cứ khi nào người dùng chuyển đổi không gian làm việc.

Làm thế nào nó hoạt động

Hai kịch bản nhỏ có liên quan:

Các đầu kịch bản không có một điều đơn giản: nó viết các nội dung của phóng hiện tại vào một tập tin (ẩn) trong thư mục chính của bạn, đặt tên (đánh số) sau khi không gian làm việc hiện tại của bạn.

Các thứ hai kịch bản giữ một mắt trên không gian làm việc hiện nay là gì. Nếu có sự thay đổi không gian làm việc , tập lệnh sẽ thấy nếu một tệp dữ liệu (launcher-) tương ứng tồn tại (được tạo bởi tập lệnh đầu tiên). Nếu vậy, nó sẽ đọc tệp và thay đổi Trình khởi chạy Unity, như được ghi nhớ trong tệp.

Đó là nó.

Làm thế nào để thiết lập

  1. Kịch bản cần wmctrlđược cài đặt:

    sudo apt-get install wmctrl
    
  2. Tạo một thư mục trong đó cả hai tập lệnh sẽ được lưu trữ. Đó là các nhà nhập khẩu rằng cả hai tập lệnh được giữ cùng nhau trong một thư mục, vì chúng chia sẻ chức năng và một bộ nhập từ bộ kia. Vì lý do tương tự, điều quan trọng là bạn đặt tên cho chúng chính xác như được chỉ ra dưới đây.

  3. Sao chép từng tập lệnh bên dưới vào một tệp trống (khác nhau), lưu chúng vào thư mục (được tạo trong 2.), được đặt tên chính xác là:

    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. Thêm tập lệnh đầu tiên ( set_workspace.py) vào tổ hợp phím tắt mà bạn chọn: Cài đặt hệ thống> "Bàn phím"> "Phím tắt"> "Phím tắt tùy chỉnh". Nhấp vào "+" và thêm lệnh:

    python3 /path/to/set_workspace.py
    
  5. Chạy tổ hợp phím và xem nếu một tệp, như: .launcher_data_3được tạo trong thư mục chính của bạn. Bạn có thể sẽ cần nhấn Ctrl+ Hđể hiển thị tệp (các tệp, bắt đầu bằng một ẩn .theo mặc định).

    Điều hướng qua các không gian làm việc của bạn và lặp lại quy trình: đặt kết hợp các biểu tượng trình khởi chạy và nhấn tổ hợp phím của bạn để "ghi nhớ" bộ cho không gian làm việc cụ thể đó.

  6. Bạn đang thực sự thực hiện ngay bây giờ. Chạy thử kịch bản nền bằng lệnh (từ cửa sổ đầu cuối, giữ cho nó chạy):

    python3 /path/to/launcher_perworkspace.py
    

    Nếu tất cả đều hoạt động tốt và trình khởi chạy của bạn chuyển đổi trên mỗi không gian làm việc, hãy thêm lệnh sau vào các ứng dụng Khởi động của bạn: Dash> Ứng dụng khởi động> Thêm:

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

Ghi chú

  1. Nếu bạn muốn thay đổi tập hợp các biểu tượng trình khởi chạy cho một không gian làm việc cụ thể, chỉ cần điều hướng đến không gian làm việc, thêm / xóa các biểu tượng theo ý muốn và nhấn tổ hợp phím của bạn (không cần phải khởi động lại tập lệnh nền).
  2. Từ (các) nhận xét, tôi có cảm giác có một số hiểu lầm trên phím tắt để ghi nhớ Trình khởi chạy hiện tại cho không gian làm việc hiện tại. Bạn chỉ cần một phím tắt để "lưu" trình khởi chạy hiện tại cho không gian làm việc hiện tại. Nó sẽ hoạt động chính xác như nhau, bất kể bạn đang ở không gian làm việc nào. Chính kịch bản sẽ xác định không gian làm việc hiện tại gì .

Chỉnh sửa

Từ nhận xét của bạn, tôi hiểu rằng bạn không chắc chắn để chạy (các) tập lệnh và bạn sợ bạn sẽ làm hỏng trình khởi chạy hiện tại của mình.

Tôi khá chắc chắn rằng đó là quá nhiều (hoặc quá ít :)) tôn trọng những gì kịch bản đang làm. Tuy nhiên, bạn chỉ có thể sao lưu Unity Launcher hiện tại bằng lệnh:

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

Điều này sẽ tạo một tệp ~/launcher_output, chứa lệnh hoàn chỉnh để khôi phục Trình khởi chạy Unity của bạn về tình huống ban đầu. Trong trường hợp khẩn cấp, chỉ cần sao chép nội dung của tệp và dán vào thiết bị đầu cuối.

Nhưng một lần nữa, thực sự không có khả năng bạn sẽ làm rối trình khởi chạy của mình, trừ khi bạn thay đổi tập lệnh theo cách thủ công.


EDIT QUAN TRỌNG (2)

Theo yêu cầu trong một bình luận, qua đây một phiên bản chạy mà không phải sử dụng bất kỳ kết hợp phím tắt nào ; chỉ cần chạy tập lệnh và bắt đầu thiết lập các trình khởi chạy của bạn trên các không gian làm việc cụ thể. Tập lệnh sẽ tạo các tệp (vô hình) trong thư mục chính của bạn, để ghi nhớ bộ trình khởi chạy (Unity-) của bạn trên các không gian làm việc khác nhau.

Tôi đã thử điều này trong "phiên bản 1" của tập lệnh, nhưng luôn "nhúng" hai kiểm tra trình khởi chạy giữa hai kiểm tra không gian làm việc hóa ra là mẹo để ngăn chặn hành vi không mong muốn (lưu dữ liệu không chính xác) khi di chuyển nhanh qua các không gian làm việc.

Cách sử dụng

  1. Giống như phiên bản đầu tiên, tập lệnh này sử dụng wmctrl:

    sudo apt-get cài đặt wmctrl

  2. Sao chép tập lệnh vào một tập tin trống, lưu nó dưới dạng launcher_toworkspace.py

  3. Chạy nó với lệnh:

    python3 /path/to/launcher_toworkspace.py
    
  4. Nếu nó hoạt động như mong đợi, hãy thêm lệnh sau vào Ứng dụng khởi động của bạn:

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

Kịch bản

#!/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()

chú thích

Nếu bạn thiết lập không gian làm việc của mình với phiên bản trước của tập lệnh, thì chúng cũng sẽ hoạt động cho phiên bản này.

PPA

Theo 2015-04-23, câu hỏi hay của Dennis J, và sự khích lệ của Parto, đã dẫn đến việc tạo ra một ppakịch bản, được trình bày trên webupd8 , bao gồm cả GUI để quản lý nó.

ppa:vlijm/lswitcher

Để cài đặt nó, hãy chạy:

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

nhập mô tả hình ảnh ở đây

Kể từ bây giờ, nó được đóng gói cho Trusty & Utopic. Tôi sẽ thêm những người khác sau khi thử nghiệm. Tôi cũng sẽ thêm một trình .debcài đặt, nhưng tôi khuyên bạn nên sử dụng ppa, vì thông thường loại này được cập nhật mọi lúc mọi nơi.

Vì vị trí của dữ liệu chế độ xem đã thay đổi từ ~/thành ~/.config/lswitcher, bạn sẽ phải thiết lập lại Unity Launcher nếu bạn sử dụng tập lệnh trước đó.


Điều này có thể mà không cần sử dụng các phím tắt? Cách tôi hình dung nó như sau: Khi ở trong không gian làm việc, chỉ có một bộ biểu tượng được hiển thị; Khi tôi chuyển sang không gian làm việc hai, trình khởi chạy trống ngoại trừ biểu tượng dấu gạch ngang và thùng rác - sau đó tôi thêm các biểu tượng tôi muốn được lưu tự động. Lặp lại cho các không gian làm việc khác. Có lẽ bạn thậm chí có thể tạo GUI cho nó - sẽ cung cấp cho bạn +500 nếu bạn làm cho nó hoạt động. GUI là tùy chọn.
Parto

1
@Parto WOW, bạn biết làm thế nào để thu hút sự chú ý của ai đó :) Điều đó là có thể chắc chắn, nhưng sẽ cần nhiều luồng để làm cho nó hoạt động trơn tru (đã thử nó trong một kịch bản theo dõi "đơn âm"). Mong đợi một câu trả lời trong vài ngày tới :).
Jacob Vlijm

1
Tuyệt vời. Tôi sẽ chờ đợi ... mặc dù câu hỏi hay, tự hỏi làm thế nào tôi không nghĩ về điều đó.
Parto

1
@Parto Tôi phải nói rằng tôi rất ấn tượng bởi sự hào phóng của bạn. Tôi đang lên kế hoạch làm việc hơn nữa về nó và có thể tạo ra ppa, bao gồm GUI để bắt đầu / dừng, tùy chọn, vv Cảm ơn bạn đã thúc đẩy! Bằng cách này, máy tính để bàn của bạn trông tuyệt vời!
Jacob Vlijm

1
Bất cứ lúc nào. Mọi người cần một cú hích ngay bây giờ và sau đó. Hơn nữa, bạn cũng đã giúp tôi trước đây - chỉ coi đó là một lời cảm ơn. Về 'dự án' này, một ppa sẽ rất tuyệt vì không phải ai cũng có kỹ thuật.
Parto
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.