Giả sử tôi đang sử dụng 4 không gian làm việc và tôi tình cờ cần nhiều hơn, đó là một quy trình tự động hoặc, nếu không thể, một cách dễ dàng để thêm nhiều không gian làm việc (thay vì cài đặt Ubuntu tweak
, v.v.).
Giả sử tôi đang sử dụng 4 không gian làm việc và tôi tình cờ cần nhiều hơn, đó là một quy trình tự động hoặc, nếu không thể, một cách dễ dàng để thêm nhiều không gian làm việc (thay vì cài đặt Ubuntu tweak
, v.v.).
Câu trả lời:
Bên dưới một phiên bản của tập lệnh backround (sẽ) sẽ tự động thêm các không gian làm việc nếu bạn đã nhập cột hoặc hàng cuối cùng của ma trận không gian làm việc.
Đây là cách nó hoạt động:
Nếu bạn đến cột hoặc hàng cuối cùng, các khung nhìn bổ sung sẽ được thêm vào:
Nếu không gian làm việc của bạn không được sử dụng trong 5-10 giây và không có cửa sổ trên đó, không gian làm việc bổ sung sẽ bị xóa lại. Tuy nhiên, bạn sẽ luôn giữ thêm một hàng bên dưới và thêm một cột bên phải của chế độ xem hiện tại của bạn:
#!/usr/bin/env python3
import subprocess
import time
import math
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
def set_workspaces(size, axis):
subprocess.Popen([
"dconf", "write", "/org/compiz/profiles/unity/plugins/core/"+axis,
str(size)
])
def get_res():
resdata = subprocess.check_output(["xrandr"]).decode("utf-8").split()
curr = resdata.index("current")
return (int(resdata[curr+1]), int(resdata[curr+3].replace(",", "")))
def wspace():
try:
sp = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
return ([int(n) for n in sp[3].split("x")],
[int(n) for n in sp[5].split(",")])
except subprocess.CalledProcessError:
pass
def clean_up(curr_col, curr_row):
try:
w_list = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
xpos = max([math.ceil((int(w[2])+span[1][0])/res[0]) for w in w_list])
min_x = max(xpos, curr_col+1, hsize)
if xpos >= hsize:
set_workspaces(min_x, "hsize")
else:
set_workspaces(min_x, "hsize")
ypos = max([math.ceil((int(w[3])+span[1][1])/res[1]) for w in w_list])
min_y = max(ypos, curr_row+1, vsize)
if ypos >= vsize:
set_workspaces(min_y, "vsize")
else:
set_workspaces(min_y, "vsize")
except subprocess.CalledProcessError:
pass
res = get_res()
t = 0
while True:
span = wspace()
if span != None:
cols = int(span[0][0]/res[0]); rows = int(span[0][1]/res[1])
currcol = int((span[1][0]+res[0])/res[0])
if all([currcol == cols, cols*rows < max_ws]):
set_workspaces(cols+1, "hsize")
currrow = int((span[1][1]+res[1])/res[1])
if all([currrow == rows, cols*rows < max_ws]):
set_workspaces(rows+1, "vsize")
if t == 10:
clean_up(currcol, currrow)
t = 0
else:
t = t+1
time.sleep(1)
add_space.py
Trong phần đầu của tập lệnh, chỉnh sửa các dòng nếu bạn thích các cài đặt khác (số lượng không gian làm việc tối đa, ma trận mặc định, ví dụ 2x2):
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
Kiểm tra- chạy nó bằng lệnh:
python3 /path/to/add_space.py
Nếu tất cả đều hoạt động tốt, hãy thêm nó vào các ứng dụng khởi động của bạn: Dash> Ứng dụng khởi động> Thêm lệnh:
/bin/bash -c "sleep 15 && python3 /path/to/add_space.py`
Như mọi khi, tập lệnh cực kỳ "thiếu nước" và không thêm bất kỳ tải đáng chú ý nào vào bộ xử lý của bạn.
Câu chuyện dưới đây là một chút phức tạp và chủ yếu là một lời giải thích về khái niệm và thủ tục , chứ không phải là mã hóa. Chỉ đọc nếu bạn quan tâm.
Cách tính các không gian làm việc cần thiết (các cột ví dụ)
Đầu ra của wmctrl -d
hình như:
0 * DG: 3360x2100 VP: 1680,1050 WA: 65,24 1615x1026 N/A
Trong đầu ra, VP: 1680,1050
cung cấp cho chúng tôi thông tin về vị trí của chúng tôi trên không gian làm việc kéo dài (ma trận của tất cả các khung nhìn). Thông tin này chỉ hữu ích nếu chúng ta cũng có độ phân giải của màn hình, ví dụ như 1680
có thể là chiều rộng của hai (không chắc, nhưng vẫn) hoặc một lần màn hình.
May mắn thay, chúng ta có thể phân tích độ phân giải của màn hình từ lệnh xrandr
.
Sau đó, nếu chúng ta biết kích thước x của màn hình 1680
và chúng tôi hiện đang bật VP: 1680,1050
, chúng tôi biết rằng chúng tôi đang ở cột thứ hai trong ma trận của không gian làm việc. Vì chúng tôi cũng biết kích thước của ma trận tổng ( DG: 3360x2100
cũng từ đầu ra của wmctrl -d
), chúng tôi biết ma trận hiện tại bao gồm hai cột (3360/1680) và chúng tôi đang ở "cuối cùng".
Tập lệnh sau đó sẽ gửi một lệnh để thêm một cột vào ma trận bằng lệnh:
dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>
Đây là nguyên tắc.
Cách tính các không gian làm việc cần loại bỏ (các cột ví dụ)
Cứ sau 10 giây, tập lệnh sẽ chạy lệnh liệt kê tất cả các cửa sổ đang mở, với lệnh:
wmctrl -lG
Điều này cũng cung cấp cho chúng tôi thông tin về vị trí của cửa sổ, trông giống như:
0x04604837 0 3425 24 1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
Trong đầu ra, 3425
là vị trí x của cửa sổ. Con số này tuy nhiên liên quan đến không gian làm việc hiện tại (bên trái). Để biết vị trí tuyệt đối của cửa sổ (x-khôn ngoan) trong ma trận không gian làm việc, chúng ta phải thêm số đầu tiên của thông tin chế độ xem hiện tại (ví dụ: VP: 1680,1050
từ đầu ra của wmctrl -d
).
Tuy nhiên, vì lý do đơn giản, giả sử chúng ta đang ở chế độ xem 1,1
(khung nhìn topleft), vì vậy vị trí tương đối của cửa sổ bằng với vị trí tuyệt đối của nó.
Vì độ phân giải của màn hình là 1680
, chúng tôi biết cửa sổ nằm trên cột 3425/1680
, được làm tròn lên, vì mọi thứ ở giữa 3360 and 5040
nằm trên cùng một cột trong ma trận (từ 3 đến 4 lần độ phân giải). Để tính toán chính xác, chúng tôi sử dụng math.ceil()
( python
)
Vì tập lệnh cũng thực hành quy tắc để luôn có thêm một không gian làm việc ở bên phải / bên dưới, nên chúng ta cần đặt số lượng cột thành giá trị cao nhất là:
Và kịch bản cũng vậy :)
Các hàng được quản lý theo cùng một quy trình.
Về mặt kỹ thuật, không có phím tắt để thay đổi kích thước không gian làm việc, nhưng bạn có thể sử dụng tập lệnh đơn giản dưới đây và liên kết nó với một phím tắt.
.local/share/applications
thư mục hoặc bất cứ nơi nào bạn thích.chmod 755 /path/to/script
Ví dụ: tôi có thiết lập này:
Kịch bản bị ràng buộc ShiftCtrlAltI. Nhưng CtrlAltIcó thể làm việc quá. Tôi cung cấp đầy đủ đường dẫn đến kịch bản, đó là
/home/xieerqi/resize-workspaces.sh
Và đây là cách nó sẽ trông như thế nào:
Kịch bản
#!/bin/bash
# Author : Serg Kolo
# Date: Sept 19, 2015
# Purpose: simple script to resize
# unity workspaces
# Written for: http://askubuntu.com/q/676046/295286
HEIGHT=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize)
WIDTH=$(gsettings get org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize)
NEWSIZE=$(zenity --entry --text="Current desktop set-up $HEIGHT x $WIDTH. Enter new setup in HEIGHTxWIDTH format" --width=250 | tr 'x' ' ' )
ARRAY=( $NEWSIZE )
[ -z ${ARRAY[1]} ] && exit
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ hsize ${ARRAY[0]}
gsettings set org.compiz.core:/org/compiz/profiles/unity/plugins/core/ vsize ${ARRAY[1]}
Rất đơn giản để sử dụng, rất đơn giản để thiết lập