it-swarm.com.de

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

Ich habe die verschiedenen Antworten darauf, in jedem Arbeitsbereich separate Desktop-Ordner zu haben, mit Screenlets, Devilspie oder CCSM gelesen ... 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 haben, von denen jeder verschiedene Symbole für die von mir ausgeführten Umgebungen enthält. Zum Beispiel,

  • 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!

20
Dennis J

Festlegen eines anderen Unity Launcher pro Arbeitsbereich:


1.  enter image description here  2.  enter image description here  3.  enter image description here  4.  enter image description here

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. Sie wird ausgeführt, 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, benannt (nummeriert) nach Ihrem aktuellen Arbeitsbereich.

Das zweite Skript überwacht den aktuellen Arbeitsbereich. Wenn ein Arbeitsbereich geändert wurde , prüft 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 wmctrl installiert 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 den Namen trägt:

    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 __== "__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"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". 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 die folgende erstellt wurde: .launcher_data_3 in Ihrem Ausgangsverzeichnis. Sie müssen wahrscheinlich drücken Ctrl+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 Launcher für den aktuellen Arbeitsbereich zu "speichern". Es funktioniert genauso, egal auf welchem ​​Arbeitsplatz Sie sich befinden. Das Skript selbst bestimmt, was der aktuelle Arbeitsbereich ist .

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 ~/launcher_output erstellt, 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 eine Tastenkombination verwenden zu müssen; 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 als 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

Ab dem 23.04.2015 haben die Nice-Frage von Dennis J und die Ermutigung von Parto dazu geführt, dass ppa für das Skript erstellt wurde, abgedeckt auf webupd8 , einschließlich einer GUI für schaffe es.

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

enter image description here

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

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

24
Jacob Vlijm