ワークスペースごとに異なるUnityランチャーを設定する:
1. 2. 3. 4。
以下のソリューションにより、ワークスペースの数に関係なく、ワークスペースごとに異なるランチャーアイコンのセットを簡単に作成できます。
セットアップには2つの部分が含まれます。
現在のワークスペースのランチャーアイコンのセットを「記憶」する(1つの)ショートカットキーの組み合わせ。
バックグラウンドで実行するスクリプト。現在のワークスペースを追跡し、対応するUnityランチャーを設定します。ユーザーがワークスペースを切り替えるたびに機能します。
使い方
2つの小さなスクリプトが含まれます。
最初のスクリプトは1つの単純なことを行います。それはあなたの現在のワークスペースの後に自分のホームディレクトリにある(隠された)ファイル、名前の(番号)に現在のランチャの内容を書き込みます。
第二のスクリプトは現在のワークスペースであるものに目を保持します。ワークスペースの変更がある場合、スクリプトは対応する(ランチャー)データファイルが存在するかどうかを確認します(最初のスクリプトで作成されます)。その場合、ファイルに記憶されているように、ファイルを読み取り、Unityランチャーを変更します。
それでおしまい。
設定方法
スクリプトwmctrl
をインストールする必要があります。
sudo apt-get install wmctrl
両方のスクリプトが保存されるディレクトリを作成します。機能を共有し、一方が他方からインポートするため、両方のスクリプトを1つのディレクトリにまとめておくことが重要です。同じ理由で、以下に示すとおりに正確に名前を付けることが重要です。
(別の)空のファイルに以下のスクリプトのそれぞれをコピーし、(で作成したディレクトリにそれらを保存し2.
、)を正確に指名:
set_workspace.py
#!/usr/bin/env python3
import subprocess
import os
workspace_data = os.environ["HOME"]+"/.launcher_data_"
key = ["gsettings get ", "gsettings set ", "com.canonical.Unity.Launcher favorites"]
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)
def remember_current():
currlauncher = subprocess.check_output(["/bin/bash", "-c", key[0]+key[2]]).decode("utf-8").strip()
f = workspace_data+current()
open(f, "w").write(currlauncher)
if __name__ == "__main__":
remember_current()
launcher_perworkspace.py
#!/usr/bin/env python3
import subprocess
import set_workspace
import time
workspace_data = set_workspace.workspace_data
key = set_workspace.key
def check_datafile(desktop):
f = workspace_data+str(desktop)
try:
new_launcher = open(f).read()
command = key[1]+key[2]+' "'+str(new_launcher)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
except FileNotFoundError:
pass
curr_dt1 = set_workspace.current()
check_datafile(curr_dt1)
while True:
time.sleep(1)
curr_dt2 = set_workspace.current()
if curr_dt2 != curr_dt1:
check_datafile(curr_dt2)
curr_dt1 = curr_dt2
set_workspace.py
選択したショートカットキーの組み合わせに最初のスクリプト()を追加します:[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]。「+」をクリックして、コマンドを追加します。
python3 /path/to/set_workspace.py
キーの組み合わせを実行し、次のようなファイル.launcher_data_3
がホームディレクトリに作成されているかどうかを確認します。ファイルを表示するには、おそらくCtrl+ を押す必要がありHます(aで始まるファイルは.
デフォルトでは非表示です)。
ワークスペースをナビゲートして手順を繰り返します。ランチャーアイコンの組み合わせを設定し、キーの組み合わせを押して、その特定のワークスペースのセットを「記憶」します。
これでほぼ完了です。次のコマンドを使用してバックグラウンドスクリプトをテスト実行します(ターミナルウィンドウから実行し続けます)。
python3 /path/to/launcher_perworkspace.py
すべてが正常に機能し、ランチャーがワークスペースごとに切り替わる場合は、次のコマンドをスタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加:
/bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
ノート
- 特定のワークスペースのランチャーアイコンのセットを変更する場合は、ワークスペースに移動し、必要に応じてアイコンを追加/削除し、キーの組み合わせを押します(バックグラウンドスクリプトを再起動する必要はありません)。
- コメントから、現在のワークスペースの現在のランチャーを記憶するショートカットに誤解があるように感じます。現在のワークスペースの現在のランチャーを「保存」するには、キーボードショートカットが1つだけ必要です。どのワークスペースを使用していても、まったく同じように機能します。スクリプト自体は、どのような決定しますです、現在のワークスペース。
編集
あなたのコメントから、私はあなたがスクリプトを実行する自信がないこと、そしてあなたがあなたの現在のランチャーを台無しにすることを恐れていることを理解しています。
スクリプトが実行していることに対する敬意が多すぎる(または少なすぎる:))と確信しています。ただし、次のコマンドを使用して、現在のUnityランチャーを簡単にバックアップできます。
printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output
これにより~/launcher_output
、Unity Launcherを初期状態に復元する完全なコマンドを含むfileが作成されます。緊急の場合は、ファイルのコンテンツをコピーしてターミナルに貼り付けてください。
ただし、スクリプトを手動で変更しない限り、ランチャーが台無しになることはほとんどありません。
重要な編集(2)
使用しなくても、ここバージョンの実行そのコメントに要求されるように任意のショートカットの組み合わせを、スクリプトを実行して、特定のワークスペースでランチャーのセットアップを開始するだけです。スクリプトは、ホームディレクトリに(非表示の)ファイルを作成し、さまざまなワークスペース上の(Unity-)ランチャーのセットを記憶します。
スクリプトの「バージョン1」でこれを試しましたが、2つのワークスペースチェックの間に常に2つのランチャーチェックを「埋め込む」ことが、ワークスペースをすばやく移動する際の望ましくない動作(不正なデータの保存)を防ぐためのトリックであることが判明しました。
使い方
最初のバージョンと同様に、このスクリプトはwmctrl
次を使用します。
sudo apt-get install wmctrl
スクリプトを空のファイルにコピーして、名前を付けて保存します launcher_toworkspace.py
次のコマンドで実行します:
python3 /path/to/launcher_toworkspace.py
期待どおりに機能する場合は、次のコマンドをスタートアップアプリケーションに追加します。
/bin/bash -c "sleep 15&&python3 /path/to/launcher_toworkspace.py"
スクリプト
#!/usr/bin/env python3
import subprocess
import os
import time
datadir = os.environ["HOME"]+"/.config/lswitcher"
if not os.path.exists(datadir):
os.makedirs(datadir)
workspace_data = datadir+"/launcher_data_"
key = [
"gsettings get ",
"gsettings set ",
"com.canonical.Unity.Launcher favorites",
]
def get_launcher():
return subprocess.check_output(
["/bin/bash", "-c", key[0]+key[2]]
).decode("utf-8").strip()
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()
currlauncher1 = get_launcher()
while True:
time.sleep(1)
currlauncher2 = get_launcher()
curr_ws2 = current()
datafile = workspace_data+curr_ws2
if curr_ws2 == curr_ws1:
if currlauncher2 != currlauncher1:
open(datafile, "wt").write(currlauncher2)
else:
if not os.path.exists(datafile):
open(datafile, "wt").write(currlauncher2)
else:
curr_set = open(datafile).read()
command = key[1]+key[2]+' "'+str(curr_set)+'"'
subprocess.Popen(["/bin/bash", "-c", command])
curr_ws1 = curr_ws2
currlauncher1 = get_launcher()
注意
スクリプトの以前のバージョンでワークスペースをセットアップした場合、それらはこのバージョンでも機能するはずです。
PPA
2015-04-23のとおり、デニスJのいい質問と、Partoの励ましによりppa
、スクリプトを管理するGUIを含むwebupd8で説明されているforスクリプトの作成に至りました。
ppa:vlijm/lswitcher
それをインストールするには、次を実行します:
sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher
現在、Trusty&Utopic用にパッケージ化されています。テスト後に他を追加します。.deb
インストーラーも追加しますがppa
、通常この種のものは時々更新されるため、を使用することをお勧めします。
ビューポートデータの場所がから~/
に変更されたため~/.config/lswitcher
、前のスクリプトを使用した場合は、Unityランチャーを再度セットアップする必要があります。