4つのワークスペースを使用していて、さらに必要な場合、自動化されたプロセスがあるか、不可能な場合は(Ubuntu Tweak
などをインストールする代わりに)ワークスペースを偶然追加する簡単な方法があると仮定します。
ワークスペースマトリックスの最後の列または行を入力した場合にワークスペースを自動的に追加する(the)バックラウンドスクリプトのバージョンの下。
これがどのように機能するか:
最後の列または行に到達すると、追加のビューポートが追加されます。
ワークスペースが5〜10秒間使用されない場合andウィンドウがない場合、追加のワークスペースは再び削除されます。ただし、常に現在のビューポートの右に1行追加し、右に1列追加します。
#!/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
として保存しますスクリプトのヘッドセクションで、他の設定(ワークスペースの最大数、デフォルトのマトリックス、2x2など)が必要な場合は、行を編集します。
# --- set default workspaces below (horizontally, vertically)
hsize = 2
vsize = 2
# --- set the maximum number of workspaces below
max_ws = 10
次のコマンドでテスト実行します:
python3 /path/to/add_space.py
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します。[ダッシュ]> [スタートアップアプリケーション]> [コマンドを追加]:
/bin/bash -c "sleep 15 && python3 /path/to/add_space.py`
いつものように、このスクリプトは非常に「低負荷」であり、プロセッサに目立った負荷を追加しません。
以下の話は少し複雑で、ほとんどはコーディングではなくconceptとprocedureの説明です。興味がある場合にのみ読んでください。
必要なワークスペースの計算方法(列の例)
wmctrl -d
の出力は次のようになります。
0 * DG: 3360x2100 VP: 1680,1050 WA: 65,24 1615x1026 N/A
出力では、VP: 1680,1050
は、スパニングワークスペース(すべてのビューポートのマトリックス)のどこにいるかに関する情報を提供します。この情報は、画面の解像度も持っている場合にのみ役立ちます。 1680
は、2の幅(可能性は低いですが、まだ)または1回の画面の幅になります。
幸いなことに、コマンドxrandr
から画面の解像度を解析できます。
次に、画面のxサイズが1680
であり、現在VP: 1680,1050
にあることがわかっている場合、ワークスペースのマトリックスの2列目にあることがわかります。合計マトリックスのサイズ(DG: 3360x2100
、wmctrl -d
の出力)もわかっているため、現在のマトリックスには2つの列(3360/1680)が含まれ、 " 1。
スクリプトは、コマンドによってマトリックスに列を追加する指示を送信します。
dconf write /org/compiz/profiles/unity/plugins/core/hsize <current_viewport_column+1>
これが原則です。
削除するワークスペースの計算方法(列の例)
10秒に1回、スクリプトはコマンドを実行して、現在開いているすべてのウィンドウを一覧表示します。
wmctrl -lG
これにより、次のようなウィンドウの位置に関する情報も得られます。
0x04604837 0 3425 24 1615 1026 jacob-System-Product-Name Niet-opgeslagen document 2 - gedit
出力では、3425
はウィンドウのx位置です。ただし、この図は現在のワークスペースに対して(左側)です。ワークスペースマトリックス内のウィンドウの絶対位置(x方向)を知るには、現在のビューポート情報の最初の数(たとえば、VP: 1680,1050
の出力からのwmctrl -d
)を追加する必要があります。
ただし、簡単にするために、ビューポート1,1
(左上のビューポート)にいると仮定します。したがって、ウィンドウの相対位置equals絶対位置です。
画面の解像度は1680
であるため、3425/1680
の間はすべてマトリックスの同じ列(3〜4倍)にあるため、ウィンドウは3360 and 5040
列に切り上げられます。解決)。適切な計算のために、math.ceil()
(python
)を使用します
スクリプトalsoは、常に右/下に余分なワークスペースがあるようにルールを実践するため、列数をtheest value ofに設定する必要があります。
そして、スクリプトは:)
行はまったく同じ手順で管理されます。
技術的には、ワークスペースのサイズを変更するためのショートカットはありませんが、以下の単純なスクリプトを使用してショートカットにバインドできます。
.local/share/applications
フォルダーに保存するか、任意の場所に保存します。chmod 755 /path/to/script
で実行可能になっていることを確認してくださいたとえば、私はこのセットアップを持っています:
スクリプトはにバインドされています ShiftCtrlAltI。しかし CtrlAltI うまくいくかもしれない。スクリプトの完全なパスを指定します
/home/xieerqi/resize-workspaces.sh
そして、次のようになります。
スクリプト
#!/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]}
非常に使いやすく、セットアップが非常に簡単