Wie erhält man einen anderen Unity Launcher mit verschiedenen Symbolen in jedem Arbeitsbereich?

20

Ich habe die verschiedenen Antworten darauf, in jedem Arbeitsbereich separate Desktop- Ordner zu haben, mithilfe von Screenlets, Devilspie oder CCSM durchgelesen, aber das ist nicht die Antwort auf meine Frage. Ich habe vor ein paar Tagen 14.04 LTS installiert und hatte guten Erfolg damit, die meisten meiner Apps und einige neue zum Laufen zu bringen. Ich möchte 4 separate Arbeitsbereiche mit jeweils unterschiedlichen Symbolen für die von mir ausgeführten Umgebungen haben. Beispielsweise,

  • Arbeitsbereich 1 - für Apps für Naturwissenschaften und Mathematik
  • Arbeitsbereich 2 - speziell für Musikinstrumente
  • Arbeitsbereich 3 - für elektronische Schaltungen und Simulationen
  • Arbeitsbereich 4 - zum Surfen im Internet und für allgemeine Datenverarbeitung

Stellen Sie sich ein Android-Tablet vor, auf dem jeder Bildschirm separate Symbole enthalten kann.

Es muss offensichtlich sein, wie man das macht, aber ich kann keine Antwort finden. Ich bin 4 Tage alt auf Ubuntu, also gehe bitte nicht davon aus, dass ich weiß, was ich tue!

Dennis J
quelle
Sie meinen einen anderen Satz von Launcher- Symbolen pro Arbeitsbereich? Lecker, das gefällt mir, aber ich muss rennen, werde morgen daran arbeiten, wenn du das meinst. Lass es mich wissen, bitte.
Jacob Vlijm
Ja, das ist es, Jacob. Es gibt spezielle Tools (wie LTspice) für die Schaltungssimulation, die für die Musik nicht relevant sind.
Dennis J
Kann ohne Zweifel durchgeführt werden. Wahrscheinlich morgen oder Sonntag :).
Jacob Vlijm
Vielen Dank, Jacob. Ich fange gerade erst an für den Tag, also werde ich es versuchen. Das hört sich genau so an, wie ich es gewünscht habe !!! Ich werde darauf eingehen und berichten.
Dennis J
Jacob, ich habe das noch nicht angefangen. Bevor ich anfange, möchte ich ein Backup-Image erstellen. Ich bin nicht sicher, ob Backups in den Systemeinstellungen die gesamte Partition wiederherstellen. Haben Clonezilla recherchiert, sieht aus wie ein gutes Werkzeug, um ein Image zu erstellen / wiederherzustellen. Auf diese Weise kann ich auf etwas zurückgreifen, das schief geht, bevor ich es vermasselt habe. Diese Woche ist eine neue 1-TB-Festplatte unterwegs. Ich muss Clonezilla verwenden, um das System dorthin zu verschieben. Die Skripte sehen so aus, als ob ich ihnen folgen kann, und ich melde mich, sobald ich loslege. Vielen Dank für das Follow-up, ich wette, andere werden es zu schätzen wissen, was Sie ebenfalls getan haben.
Dennis J

Antworten:

24

Festlegen eines anderen Unity Launcher pro Arbeitsbereich:


1. Bildbeschreibung hier eingeben 2. Bildbeschreibung hier eingeben 3. Bildbeschreibung hier eingeben 4. Bildbeschreibung hier eingeben

Mit der folgenden Lösung können Sie problemlos verschiedene Launcher-Symbole pro Arbeitsbereich festlegen, unabhängig davon, wie viele Arbeitsbereiche Sie haben.

Das Setup besteht aus zwei Teilen:

  1. Eine (eine) Tastenkombination, um sich die Startersymbole für den aktuellen Arbeitsbereich zu merken.

  2. Ein Skript, das im Hintergrund ausgeführt wird, den aktuellen Arbeitsbereich verfolgt und den entsprechenden Unity Launcher festlegt. Es handelt sich immer dann, wenn der Benutzer den Arbeitsbereich wechselt.

Wie es funktioniert

Zwei kleine Skripte sind beteiligt:

Das erste Skript macht eine einfache Sache: Es schreibt den Inhalt des aktuellen Launchers in eine (versteckte) Datei in Ihrem Home-Verzeichnis, die nach Ihrem aktuellen Arbeitsbereich benannt (nummeriert) ist.

Das zweite Skript überwacht den aktuellen Arbeitsbereich. Wenn sich der Arbeitsbereich ändert , erkennt das Skript, ob eine entsprechende (Launcher-) Datendatei vorhanden ist (die vom ersten Skript erstellt wurde). In diesem Fall wird die Datei gelesen und der in der Datei gespeicherte Unity Launcher geändert.

Das ist es.

Wie stellt man das ein

  1. Das Skript muss wmctrlinstalliert sein:

    sudo apt-get install wmctrl
    
  2. Erstellen Sie ein Verzeichnis, in dem beide Skripte gespeichert werden. Es ist wichtig, dass beide Skripte in einem Verzeichnis zusammengehalten werden, da sie Funktionen gemeinsam nutzen und eines vom anderen importiert. Aus dem gleichen Grund ist es wichtig, dass Sie sie genau wie unten angegeben benennen.

  3. Kopieren Sie jedes der folgenden Skripte in eine (andere) leere Datei und speichern Sie sie in dem Verzeichnis (erstellt in 2.), das genau wie folgt benannt ist:

    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. Fügen Sie das erste Skript ( set_workspace.py) zu einer Tastenkombination Ihrer Wahl hinzu: Systemeinstellungen> "Tastatur"> "Verknüpfungen"> "Benutzerdefinierte Verknüpfungen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:

    python3 /path/to/set_workspace.py
    
  5. Führen Sie die Tastenkombination aus und prüfen Sie, ob eine Datei wie: .launcher_data_3in Ihrem Ausgangsverzeichnis erstellt wurde. Sie müssen wahrscheinlich Ctrl+ drücken H, um die Datei sichtbar zu machen (Dateien, die mit einem beginnen, .sind standardmäßig unsichtbar).

    Navigieren Sie durch Ihre Arbeitsbereiche und wiederholen Sie den Vorgang: Legen Sie eine Kombination von Startsymbolen fest und drücken Sie die Tastenkombination, um sich den Satz für diesen bestimmten Arbeitsbereich zu merken.

  6. Sie sind jetzt praktisch fertig. Führen Sie das Hintergrundskript mit dem Befehl aus (lassen Sie es in einem Terminalfenster laufen):

    python3 /path/to/launcher_perworkspace.py
    

    Wenn alles einwandfrei funktioniert und Ihr Launcher pro Arbeitsbereich wechselt, fügen Sie den Startanwendungen den folgenden Befehl hinzu: Dash> Startanwendungen> Hinzufügen:

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

Anmerkungen

  1. Wenn Sie die Startsymbole für einen bestimmten Arbeitsbereich ändern möchten, navigieren Sie einfach zum Arbeitsbereich, fügen Sie Symbole hinzu oder entfernen Sie sie, und drücken Sie die Tastenkombination (das Hintergrundskript muss nicht neu gestartet werden).
  2. Aus den Kommentaren ergibt sich das Gefühl, dass die Verknüpfung ein Missverständnis enthält, um den aktuellen Launcher für den aktuellen Arbeitsbereich zu speichern. Sie benötigen nur eine Tastenkombination, um den aktuellen Starter für den aktuellen Arbeitsbereich zu "speichern". Es funktioniert genauso, egal auf welchem ​​Arbeitsplatz Sie sich befinden. Das Skript selbst bestimmen , was ist der aktuelle Arbeitsbereich.

Bearbeiten

Aus Ihrem Kommentar geht hervor, dass Sie sich nicht sicher sind, ob Sie die Skripte ausführen sollen, und befürchten, dass Sie Ihren aktuellen Launcher durcheinander bringen werden.

Ich bin mir ziemlich sicher, dass das zu viel (oder zu wenig :) Respekt für das ist, was das Skript tut. Sie können Ihren aktuellen Unity Launcher jedoch einfach mit dem folgenden Befehl sichern:

printf 'gsettings set com.canonical.Unity.Launcher favorites "' > ~/launcher_output&&printf "$(gsettings get com.canonical.Unity.Launcher favorites)">>~/launcher_output&&printf '"'>>~/launcher_output

Dadurch wird eine Datei erstellt ~/launcher_output, die den vollständigen Befehl zum Wiederherstellen des Unity Launcher in der Ausgangssituation enthält. Kopieren Sie im Notfall einfach den Inhalt der Datei und fügen Sie ihn in das Terminal ein.

Aber auch hier ist es sehr unwahrscheinlich, dass Sie Ihren Launcher durcheinander bringen, es sei denn, Sie ändern das Skript manuell.


WICHTIGE ÄNDERUNG (2)

Wie in einem Kommentar gefordert, hiermit eine Version, die ausgeführt wird, ohne dass eine Tastenkombination verwendet werden muss; Führen Sie einfach das Skript aus und richten Sie Ihre Startprogramme in den jeweiligen Arbeitsbereichen ein. Das Skript erstellt (unsichtbare) Dateien in Ihrem Ausgangsverzeichnis, um sich an Ihre (Unity-) Starter auf den verschiedenen Arbeitsbereichen zu erinnern.

Ich habe dies in "Version 1" des Skripts versucht, aber immer "eingebettet" die zwei Starterprüfungen zwischen zwei Arbeitsbereichprüfungen erwies sich als der Trick, um unerwünschtes Verhalten (Speichern falscher Daten) beim schnellen Durchlaufen der Arbeitsbereiche zu verhindern.

Wie benutzt man

  1. Wie die erste Version verwendet dieses Skript wmctrl:

    sudo apt-get install wmctrl

  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter launcher_toworkspace.py

  3. Führen Sie es mit dem Befehl aus:

    python3 /path/to/launcher_toworkspace.py
    
  4. Fügen Sie den Startup Applications den folgenden Befehl hinzu, wenn es erwartet funktioniert:

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

Das Drehbuch

#!/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()

Hinweis

Wenn Sie Ihre Arbeitsbereiche mit der vorherigen Version des Skripts eingerichtet haben, sollten sie auch für diese Version funktionieren.

PPA

Bis zum 23.04.2015 haben die nette Frage von Dennis J und die Ermutigung von Parto dazu geführt, ein ppafür das Skript, das auf webupd8 behandelt wird, zu erstellen , einschließlich einer GUI, um es zu verwalten.

ppa:vlijm/lswitcher

Führen Sie zum Installieren Folgendes aus:

sudo add-apt-repository ppa:vlijm/lswitcher
sudo apt-get update
sudo apt-get install lswitcher

Bildbeschreibung hier eingeben

Seitdem ist es für Trusty & Utopic verpackt. Ich werde andere nach dem Testen hinzufügen. Ich werde auch ein .debInstallationsprogramm hinzufügen , aber ich würde vorschlagen, das zu verwenden ppa, da diese Art von Dingen normalerweise von Zeit zu Zeit aktualisiert wird.

Da sich der Speicherort der Ansichtsfensterdaten von ~/zu geändert hat ~/.config/lswitcher, müssen Sie Ihren Unity Launcher erneut einrichten, wenn Sie das vorherige Skript verwendet haben.

Jacob Vlijm
quelle
Ist dies möglich, ohne die Tastaturkürzel zu verwenden? So stelle ich es mir vor: Im Arbeitsbereich 1 werden nur einige Symbole angezeigt. Wenn ich zu Arbeitsbereich zwei wechsle, ist der Starter leer, außer den Bindestrich- und Papierkorbsymbolen. Dann füge ich die gewünschten Symbole hinzu, die automatisch gespeichert werden. Wiederholen Sie diesen Vorgang für die anderen Arbeitsbereiche. Vielleicht können Sie sogar eine GUI dafür erstellen - Sie erhalten +500, wenn Sie es zum Laufen bringen. Die GUI ist optional.
Parto
1
@Parto WOW, du weißt, wie man die Aufmerksamkeit von jemandem auf sich zieht :) Das ist sicher möglich, aber es würde mehrere Threads erfordern, um reibungslos zu funktionieren (probiert es in einem "Mono" -Spurskript aus). Erwarten Sie eine Antwort in den nächsten Tagen :).
Jacob Vlijm
1
Genial. Ich werde warten ... nette Frage, frage mich, wie ich das nicht gedacht habe.
Parto
1
@Parto Ich muss sagen, ich bin beeindruckt von Ihrer Großzügigkeit. Ich plane, weiter daran zu arbeiten und vielleicht eine ppaGUI zum Starten / Stoppen, Einstellungen usw. zu erstellen . Danke für den Push! Ihr Desktop sieht übrigens toll aus!
Jacob Vlijm
1
Jederzeit. Jeder braucht ab und zu einen Schub. Darüber hinaus haben Sie mir auch schon einmal geholfen - bedanken Sie sich einfach. Über dieses "Projekt" wäre ein ppa nett, da nicht jeder technisch versiert ist.
Parto