Đặt Trình khởi chạy Unity khác nhau cho mỗi không gian làm việc:
1. 2. 3. 4.
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:
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.
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
Kịch bản cần wmctrl
được cài đặt:
sudo apt-get install wmctrl
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.
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
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
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ể đó.
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ú
- 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).
- 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 là 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
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
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
Chạy nó với lệnh:
python3 /path/to/launcher_toworkspace.py
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 ppa
kị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
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 .deb
cà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 đó.