各ワークスペースに異なるアイコンを持つ異なるUnityランチャーを取得する方法は?


20

Screenlets、devilspie、またはCCSMを使用して、各ワークスペースに個別のデスクトップフォルダーを配置することに対するさまざまな回答を読みましたが、それは私の質問に対する答えではありません。数日前に14.04 LTSをインストールしましたが、ほとんどのアプリといくつかの新しいアプリを実行できるようになりました。私が望むのは、それぞれが実行する環境に合わせていくつかの異なるアイコンを持つ4つのワークスペースを用意することです。例えば、

  • ワークスペース1 –科学および数学アプリ専用
  • ワークスペース2 –音楽ツール専用
  • ワークスペース3 –電子回路およびシミュレーション用
  • ワークスペース4 – Webブラウジングと一般的なコンピューティング用

各画面に個別のアイコンを含めることができるAndroidタブレットを考えてください。

これを行う方法は明らかなはずですが、答えが見つかりません。私はUbuntuで4日目なので、私が何をしているのか知っていると思い込まないでください!


ワークスペースごとに異なるランチャーアイコンのセットですか?おいしいよ。でも、もしそれがあなたの言っていることなら、明日もそれに取り組むつもりだ。私にお知らせください。
ジェイコブVlijm

はい、それはジェイコブです。音楽に関係のない回路シミュレーション用の特定のツール(LTspiceなど)があります。
デニスJ

間違いなく行うことができます。おそらく明日かSUnday :)。
ジェイコブVlijm

ジェイコブありがとうございます。その日のために始めたばかりなので、試してみます。これはまさに私が求めたもののように聞こえます!!! 私はそれに入り、報告します。
デニスJ

ジェイコブ、私はまだこれを始めていません。開始する前に、バックアップイメージを作成します。[システム設定]の[バックアップ]でパーティション全体が復元されるかどうかはわかりません。Clonezillaを研究してきましたが、画像を作成/復元するための優れたツールのようです。そうすれば、何かがうまくいかない場合、私はそれを台無しにする前に戻ることができます。今週予定されている新しい1TBドライブがあります。Clonezillaを使用してシステムを移動する必要があります。これらのスクリプトは、私がそれらに従うことができるように見えるので、すぐに報告します。フォローアップのおかげで、他の人もあなたがやったことを高く評価するでしょう。
デニスJ

回答:


24

ワークスペースごとに異なるUnityランチャーを設定する:


1. ここに画像の説明を入力してください 2. ここに画像の説明を入力してください 3. ここに画像の説明を入力してください 4。 ここに画像の説明を入力してください

以下のソリューションにより、ワークスペースの数に関係なく、ワークスペースごとに異なるランチャーアイコンのセットを簡単に作成できます。

セットアップには2つの部分が含まれます。

  1. 現在のワークスペースのランチャーアイコンのセットを「記憶」する(1つの)ショートカットキーの組み合わせ。

  2. バックグラウンドで実行するスクリプト。現在のワークスペースを追跡し、対応するUnityランチャーを設定します。ユーザーがワークスペースを切り替えるたびに機能します。

使い方

2つの小さなスクリプトが含まれます。

最初のスクリプトは1つの単純なことを行います。それはあなたの現在のワークスペースの後に自分のホームディレクトリにある(隠された)ファイル、名前の(番号)に現在のランチャの内容を書き込みます。

第二のスクリプトは現在のワークスペースであるものに目を保持します。ワークスペースの変更がある場合、スクリプトは対応する(ランチャー)データファイルが存在するかどうかを確認します(最初のスクリプトで作成されます)。その場合、ファイルに記憶されているように、ファイルを読み取り、Unityランチャーを変更します。

それでおしまい。

設定方法

  1. スクリプトwmctrlをインストールする必要があります。

    sudo apt-get install wmctrl
    
  2. 両方のスクリプトが保存されるディレクトリを作成します。機能を共有し、一方が他方からインポートするため、両方のスクリプトを1つのディレクトリにまとめておくことが重要です。同じ理由で、以下に示すとおりに正確に名前を付けることが重要です。

  3. (別の)空のファイルに以下のスクリプトのそれぞれをコピーし、(で作成したディレクトリにそれらを保存し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
  4. set_workspace.py選択したショートカットキーの組み合わせに最初のスクリプト()を追加します:[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]。「+」をクリックして、コマンドを追加します。

    python3 /path/to/set_workspace.py
    
  5. キーの組み合わせを実行し、次のようなファイル.launcher_data_3がホームディレクトリに作成されているかどうかを確認します。ファイルを表示するには、おそらくCtrl+ を押す必要がありHます(aで始まるファイルは.デフォルトでは非表示です)。

    ワークスペースをナビゲートして手順を繰り返します。ランチャーアイコンの組み合わせを設定し、キーの組み合わせを押して、その特定のワークスペースのセットを「記憶」します。

  6. これでほぼ完了です。次のコマンドを使用してバックグラウンドスクリプトをテスト実行します(ターミナルウィンドウから実行し続けます)。

    python3 /path/to/launcher_perworkspace.py
    

    すべてが正常に機能し、ランチャーがワークスペースごとに切り替わる場合は、次のコマンドをスタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加:

    /bin/bash -c "sleep 15&&python3 /path/to/launcher_perworkspace.py"
    

ノート

  1. 特定のワークスペースのランチャーアイコンのセットを変更する場合は、ワークスペースに移動し、必要に応じてアイコンを追加/削除し、キーの組み合わせを押します(バックグラウンドスクリプトを再起動する必要はありません)。
  2. コメントから、現在のワークスペースの現在のランチャーを記憶するショートカットに誤解があるように感じます。現在のワークスペースの現在のランチャーを「保存」するには、キーボードショートカットが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つのランチャーチェックを「埋め込む」ことが、ワークスペースをすばやく移動する際の望ましくない動作(不正なデータの保存)を防ぐためのトリックであることが判明しました。

使い方

  1. 最初のバージョンと同様に、このスクリプトはwmctrl次を使用します。

    sudo apt-get install wmctrl

  2. スクリプトを空のファイルにコピーして、名前を付けて保存します launcher_toworkspace.py

  3. 次のコマンドで実行します:

    python3 /path/to/launcher_toworkspace.py
    
  4. 期待どおりに機能する場合は、次のコマンドをスタートアップアプリケーションに追加します。

    /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ランチャーを再度セットアップする必要があります。


キーボードショートカットを使用せずにこれは可能ですか?視覚化の方法は次のとおりです。ワークスペース1では、アイコンのセットのみが表示されます。ワークスペース2に切り替えると、ダッシュアイコンとゴミ箱アイコンを除いてランチャーが空になります。次に、自動的に保存される必要なアイコンを追加します。他のワークスペースについても繰り返します。たぶん、あなたはそれのためにGUIを作成することさえできます-あなたがそれを機能させるならば、あなたに+500を与えるでしょう。GUIはオプションです。
パート

1
@Parto WOW、あなたは誰かの注意を引く方法を知っています:)それは確かに可能ですが、スムーズに動作させるには複数のスレッドが必要です(「モノ」トラックスクリプトで試してみました)。数日中に回答を期待してください:)。
ジェイコブVlijm

1
驚くばかり。私は待っています...いい質問ですが、どうして私はそれを考えなかったのでしょうか。
Parto

1
@Parto私はあなたの寛大さに感銘を受けたと言わなければなりません。私はそれでさらに作業することを計画しており、多分ppa、起動/停止するGUI、設定などを作成します。プッシュしてくれてありがとう!ちなみにデスクトップは見栄えがいいです!
ジェイコブVlijm

1
どんなときも。誰もが時々プッシュを必要とします。さらに、あなたは以前にも私を助けてくれました-それをありがとうと考えてください。この「プロジェクト」については、誰もが技術に恵まれているわけではないので、PPAは良いでしょう。
パート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.