Asumsikan saya menggunakan 4 ruang kerja dan saya membutuhkan lebih banyak, apakah ada proses otomatis atau, jika tidak mungkin, cara mudah untuk menambahkan lebih banyak ruang kerja (daripada menginstal Ubuntu tweak
dll.).
Asumsikan saya menggunakan 4 ruang kerja dan saya membutuhkan lebih banyak, apakah ada proses otomatis atau, jika tidak mungkin, cara mudah untuk menambahkan lebih banyak ruang kerja (daripada menginstal Ubuntu tweak
dll.).
Jawaban:
Di bawah versi skrip backround (yang) yang secara otomatis akan menambahkan ruang kerja jika Anda memasukkan kolom atau baris terakhir dari matriks ruang kerja Anda.
Begini Cara kerjanya:
Jika Anda tiba di kolom atau baris terakhir, viewports tambahan ditambahkan:
Jika ruang kerja Anda tidak digunakan selama 5-10 detik dan tidak ada jendela di sana, ruang kerja tambahan akan dihapus lagi. Namun Anda akan selalu menyimpan satu baris tambahan di bawah ini, dan satu kolom tambahan di kanan viewport Anda saat ini:
#!/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
Di bagian kepala skrip, edit baris jika Anda suka pengaturan lain (jumlah maksimum ruang kerja, matriks default misalnya 2x2):
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
Uji-jalankan dengan perintah:
python3 /path/to/add_space.py
Jika semua berfungsi dengan baik, tambahkan ke aplikasi startup Anda: Dash> Aplikasi Startup> Tambahkan perintah:
/bin/bash -c "sleep 15 && python3 /path/to/add_space.py`
Seperti biasa, skrip sangat "rendah jus", dan tidak menambah beban yang terlihat ke prosesor Anda.
Cerita di bawah ini agak rumit dan sebagian besar merupakan penjelasan tentang konsep dan prosedur , daripada pengkodean. Hanya baca jika Anda tertarik.
Cara menghitung ruang kerja yang dibutuhkan (kolom contoh)
Output dari wmctrl -d
terlihat seperti:
0 * DG: 3360x2100 VP: 1680,1050 WA: 65,24 1615x1026 N/A
Dalam output, VP: 1680,1050
beri kami informasi tentang di mana kami berada di ruang kerja spanning (matriks semua viewports). Informasi ini hanya berguna jika kita juga memiliki resolusi layar, karena misalnya 1680
bisa menjadi lebar dua (tidak mungkin, tetapi masih) atau satu kali layar.
Untungnya, kita dapat mengurai resolusi layar dari perintah xrandr
.
Kemudian jika kita tahu ukuran x layar 1680
dan saat ini kita aktif VP: 1680,1050
, kita tahu kita berada di kolom kedua dalam matriks ruang kerja. Karena kita juga tahu ukuran matriks total ( DG: 3360x2100
, juga dari output wmctrl -d
), kita tahu matriks saat ini mencakup dua kolom (3360/1680), dan kita berada pada yang "terakhir".
Script kemudian akan mengirim instruksi untuk menambahkan kolom ke matriks dengan perintah:
dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>
Inilah prinsipnya.
Cara menghitung ruang kerja yang akan dihapus (kolom contoh)
Sekali per 10 detik, skrip menjalankan perintah untuk mencantumkan semua jendela yang saat ini dibuka, dengan perintah:
wmctrl -lG
Ini memberi kami informasi tentang posisi jendela juga, terlihat seperti:
0x04604837 0 3425 24 1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
Dalam output, 3425
adalah posisi x dari jendela. Namun angka ini relatif terhadap ruang kerja saat ini (sisi kiri). Untuk mengetahui posisi absolut dari jendela (x-wise) dalam workspace-matrix, kita harus menambahkan nomor pertama dari informasi viewport saat ini (misalnya VP: 1680,1050
, dari output wmctrl -d
).
Namun mari kita, untuk alasan kesederhanaan, anggap kita berada di viewport 1,1
(topleft viewport), sehingga posisi relatif jendela sama dengan posisi absolutnya.
Karena resolusi layarnya 1680
, kita tahu bahwa jendela berada pada kolom 3425/1680
, dibulatkan ke atas, karena semuanya 3360 and 5040
berada di kolom yang sama dalam matriks (antara 3 dan 4 kali resolusi). Untuk perhitungan yang tepat, kami menggunakan math.ceil()
( python
)
Karena skrip juga mempraktikkan aturan untuk selalu memiliki ruang kerja tambahan di kanan / bawah, kita perlu mengatur jumlah kolom ke nilai tertinggi :
Dan skripnya :)
Baris dikelola dengan prosedur yang persis sama.
Secara teknis, tidak ada pintasan untuk mengubah ukuran ruang kerja, tetapi Anda dapat menggunakan skrip sederhana di bawah dan ikat ke pintasan.
.local/share/applications
folder, atau di mana pun Anda suka.chmod 755 /path/to/script
Misalnya, saya memiliki pengaturan ini:
Script terikat ShiftCtrlAltI. Tetapi CtrlAltIbisa bekerja juga. Saya memberikan path lengkap ke skrip, yaitu
/home/xieerqi/resize-workspaces.sh
Dan beginilah tampilannya:
Naskah
#!/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]}
Sangat mudah digunakan, sangat mudah diatur