Ubuntu 14.04の1つのワークスペースでのみdockyを使用可能にし、他のワークスペースでは使用できないようにする方法はありますか?.
現在のワークスペースに応じて、Docky
ランチャーを開始/停止するバックグラウンドスクリプトの下で、 この答え とまったく同じメカニズムに基づいています。
メカニズム自体はかなりテスト済みです。とはいえ、リンクされた質問では、異なるUnityランチャーの設定と異なる壁紙の設定Docky
の開始/停止ではなく、ワークスペースごと。しかし、それは何の違いもないはずであり、私がテストした時間では、単一のエラーなしで実行されました。
スクリプトにはwmctrl
が必要です:
Sudo apt-get install wmctrl
以下のスクリプトを空のファイルにコピーし、docky_perworkspace.py
として保存します
スクリプトをテスト実行します。
Docky
次のコマンドでスクリプトを開始します。
python3 /path/to/docky_perworkspace.py
これで、Dockyがすべてのワークスペースで実行されます。あなたがしたくないDocky
を表示して実行したいワークスペースに移動します(ワークスペースで):
pkill docky
N.B. pkill docky
を使用し、独自のメニューからdockyを閉じないでください!
すべて正常に動作する場合は、スタートアップアプリケーションに追加します。ダッシュ>スタートアップアプリケーション>コマンドを追加:
/bin/bash -c "sleep 15&&python3 /path/to/docky_perworkspace.py"
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/docky_run"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/docky_set_"
def get_runs():
try:
subprocess.check_output(["pgrep", "docky"]).decode("utf-8")
return True
except:
return False
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()
runs1 = get_runs()
while True:
time.sleep(1)
runs2 = get_runs()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if runs2 != runs1:
open(datafile, "wt").write(str(runs2))
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(str(runs2))
else:
curr_set = eval(open(datafile).read())
if all([curr_set == True, runs2 == False]):
subprocess.Popen(["docky"])
Elif all([curr_set == False, runs2 == True]):
subprocess.Popen(["pkill", "docky"])
curr_ws1 = curr_ws2
runs1 = get_runs()
スクリプトは、現在のワークスペースを追跡します(ワークスペースの数に関係なく)。ワークスペースごとに、ファイルは/.config/docky_run
に作成され、参照するワークスペースにdockyが存在するかどうかが「書き込まれる」(True
またはFalse
)
同じワークスペースにとどまっているが、dockyが開始または強制終了されている(そのpid
が表示または終了する)場合、スクリプトは参照しているワークスペースに変更を加えたのがあなたであることを「理解」し、ファイルが更新されます。
ただし、workspaceが変更された場合、スクリプトはファイルが存在するかどうかを確認し、ファイルを読み取り、dockyを起動または強制終了します(または必要でない場合は何もしません)。ファイルの内容と現在の状況。ファイルがまだ存在していない場合(初めてスクリプトを開始してから初めてワークスペースを使用しているため)、ファイルが作成され、現在(最後)の状態に設定されます。
ワークスペースごとの設定はファイルに記憶されるため、再起動後も記憶されます。