キーボードショートカットを構成して、Alt +左を押すと左のワークスペースに移動し、Alt +右を押すと右のワークスペースに移動しますが、循環するキーのセットが1つ必要です。理想的には、
workspace 1 + Alt + tab ---> worskspace 2
workspace 2 + Alt + tab ---> worskspace 3
workspace 3 + Alt + tab ---> worskspace 4
workspace 4 + Alt + tab ---> worskspace 1
問題は最後の行です。作業スペース4から作業スペース1に戻る方法がありません。正しいモジュロ4に移動するにはどうすればよいですか?
小さなスクリプトを使用すると、ワークスペース(実際にはビューポート)を参照することが非常によくできます。
#!/usr/bin/env python3
import subprocess
import sys
move = sys.argv[1]
# get the needed info from wmctrl -d
wsdata = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
# retrieve total size of workspace
ws = [int(n) for n in wsdata[3].split("x")]
# panel/launcher height/width
pans = [int(n) for n in wsdata[7].split(",")]
# work area
wa = [int(n) for n in wsdata[8].split("x")]
# x/y resolution
res_h = pans[0]+wa[0]; res_v = pans[1]+wa[1]
# current position in the spanning workspace
VP = [int(n) for n in wsdata[5].split(",")]
def last_h():
# test if we are on the last viewport horizontally
return VP[0]+res_h == ws[0]
def first_h():
# test if we are on the first viewport horizontally
return VP[0] == 0
def last_v():
# test if we are on the last viewport vertically
return VP[1]+res_v == ws[1]
def first_v():
# test if we are on the first viewport vertically
return VP[1] == 0
if move == "next":
if last_h() == False:
command = str(VP[0]+res_h)+","+str(VP[1])
Elif last_v() == True:
command = "0,0"
else:
command = "0,"+str(VP[1]+res_v)
if move == "prev":
if first_h() == False:
command = str(VP[0]-res_h)+","+str(VP[1])
Elif first_v() == True:
command = str(ws[0]-res_h)+","+str(ws[1]-res_v)
else:
command = str(ws[0]-res_h)+","+str(VP[1]-res_v)
subprocess.Popen(["wmctrl", "-o", command])
スクリプトには wmctrl が必要です:
Sudo apt-get install wmctrl
スクリプトを空のファイルにコピーし、through_viewports.py
として保存します
2つのコマンドを2つの異なるショートカットキーに追加します。
python3 /path/to/through_viewports.py next
次のビューポートに移動します。
python3 /path/to/through_viewports.py prev
前のビューポートに移動するには
[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を開きます。 +
をクリックして、両方のコマンドを好きなショートカットに追加します。
以上ですスクリプトは、ビューポートの設定方法を検出し、ビューポートを循環します。
Unityでは、ビューポートは1つの大きなマトリックスに配置されます。これにより、Unityデスクトップが存在する単一のワークスペースがすべて一緒になります。
次のコマンドを使用します。
wmctrl -d
出力では、マトリックス内の現在の場所を見つけるために必要なすべての情報を読み取ることができます。
0 * DG: 5120x2400 VP: 0,0 WA: 65,24 1215x776 N/A
5120x2400
は、すべてのビューポート(マトリックス)の合計サイズです0,0
は、マトリックス内の現在のビューポートのx/y位置です(左上、ピクセル)。WA: 65,24 1215x776
から、画面の解像度を導出できます(65,24
はランチャー/パネルの幅/高さ、1215x776
は残りの領域です)正しい情報が得られたら、スクリプトはマトリックス内のターゲット位置を計算し、次のコマンドで設定します。
wmctrl -o x,y
12.04では、gconf-editorでキーを編集してこの問題を解決しましたが、16.04では同じキーがなかったため、次のように機能しました。
Sudo apt-get install compizconfig-settings-manager
gUIの詳細設定ユーティリティをインストールします。
ccsm
起動します。次にデスクトップウォール>ビューポートスイッチング>ラップアラウンドを許可に移動し、ボックスをオンにしました。