Come ottenere un Unity Launcher diverso con icone diverse su ogni area di lavoro?


20

Ho letto le varie risposte ad avere cartelle desktop separate in ogni area di lavoro usando Screenlets, devilspie o CCSM ... ma questa non è la risposta alla mia domanda. Ho installato 14.04 LTS qualche giorno fa e ho avuto un buon successo nel far funzionare la maggior parte delle mie app e alcune nuove. Quello che vorrei è avere 4 aree di lavoro separate, ognuna con alcune icone diverse per gli ambienti che eseguo. Per esempio,

  • Workspace 1: dedicato alle app di scienza e matematica
  • Workspace 2 - dedicato agli strumenti musicali
  • Workspace 3 - per circuiti elettronici e simulazioni
  • Workspace 4 - per la navigazione web e l'elaborazione generale

Pensa a un tablet Android in cui ogni schermata può contenere icone separate.

Deve essere ovvio come farlo, ma non riesco a trovare una risposta. Ho 4 giorni su Ubuntu, quindi per favore non dare per scontato che io sappia cosa sto facendo!


Intendi un diverso set di icone di avvio per area di lavoro? Buonissimo, mi piace, ma devo correre, ci lavorerò domani, se è questo che intendi. Per favore mi faccia sapere.
Jacob Vlijm,

Sì, ecco Jacob. Esistono strumenti specifici (come LTspice) per la simulazione di circuiti che non hanno rilevanza per la musica.
Dennis J,

Può essere fatto senza dubbio. Probabilmente domani o sabato :).
Jacob Vlijm,

Grazie Jacob. Ho appena iniziato la giornata, quindi ci proverò. Questo suona esattamente come quello che ho chiesto !!! Ci entrerò e riferirò.
Dennis J,

Jacob, non l'ho ancora iniziato. Prima di iniziare, voglio creare un'immagine di backup. Non sono sicuro che i backup nelle impostazioni di sistema ripristinino l'intera partizione. Ho studiato Clonezilla, sembra un buon strumento per creare / ripristinare un'immagine. In questo modo, se qualcosa va storto, posso tornare prima di aver sbagliato. Questa settimana è in arrivo un nuovo disco da 1 TB. Dovrò usare Clonezilla per spostare il sistema su di esso. Gli script sembrano come se potessi seguirli e riferirò non appena inizierò. Grazie per il follow-up, scommetto che anche gli altri apprezzeranno ciò che hai fatto.
Dennis J,

Risposte:


24

Impostazione di Unity Launcher diverso per area di lavoro:


1. inserisci qui la descrizione dell'immagine 2. inserisci qui la descrizione dell'immagine 3. inserisci qui la descrizione dell'immagine 4. inserisci qui la descrizione dell'immagine

La soluzione seguente consente di avere facilmente un diverso set di icone di avvio per area di lavoro, indipendentemente dal numero di aree di lavoro disponibili.

L'installazione include due parti:

  1. Una (una) combinazione di tasti di scelta rapida per "ricordare" l'insieme delle icone di avvio per l'area di lavoro corrente.

  2. Uno script da eseguire in background, tenendo traccia di quale sia l'area di lavoro corrente e impostando l'Unità Launcher corrispondente. Agisce ogni volta che l'utente cambia area di lavoro.

Come funziona

Sono coinvolti due piccoli script:

Il primo script fa una cosa semplice: scrive il contenuto del programma di avvio corrente in un file (nascosto) nella directory home, denominato (numerato) dopo lo spazio di lavoro corrente.

La seconda sceneggiatura tiene d'occhio l'attuale area di lavoro. Se si verifica una modifica dell'area di lavoro , lo script rileva se esiste un file di dati (launcher-) corrispondente (creato dal primo script). In tal caso, legge il file e modifica Unity Launcher, come ricordato nel file.

Questo è tutto.

Come impostare

  1. Lo script deve wmctrlessere installato:

    sudo apt-get install wmctrl
    
  2. Creare una directory in cui verranno memorizzati entrambi gli script . È importante che entrambi gli script siano tenuti insieme in una directory, poiché condividono la funzionalità e una importa dall'altra. Per lo stesso motivo, è importante nominarli esattamente come indicato di seguito.

  3. Copia ciascuno degli script di seguito in un (diverso) file vuoto, salvali nella directory (creata in 2.), identificati esattamente come:

    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. Aggiungi il primo script ( set_workspace.py) a una combinazione di tasti di scelta rapida di tua scelta: Impostazioni di sistema> "Tastiera"> "Scorciatoie"> "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:

    python3 /path/to/set_workspace.py
    
  5. Esegui la combinazione di tasti e vedi se .launcher_data_3viene creato un file come: nella tua home directory. Probabilmente dovrai premere Ctrl+ Hper rendere visibile il file (i file, a partire da a .sono invisibili per impostazione predefinita).

    Navigare attraverso le aree di lavoro e ripetere la procedura: impostare una combinazione di icone di avvio e premere la combinazione di tasti per "ricordare" il set per quello specifico spazio di lavoro.

  6. Adesso hai praticamente finito. Esegui il test dello script in background con il comando (da una finestra del terminale, mantienilo in esecuzione):

    python3 /path/to/launcher_perworkspace.py
    

    Se tutto funziona correttamente e il tuo launcher cambia per area di lavoro, aggiungi il seguente comando alle tue applicazioni di avvio: Dash> Applicazioni di avvio> Aggiungi:

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

Gli appunti

  1. Se si desidera modificare il set di icone di avvio per un'area di lavoro specifica, è sufficiente spostarsi nell'area di lavoro, aggiungere / rimuovere icone a piacere e premere la combinazione di tasti (non è necessario riavviare lo script in background).
  2. Dai commenti ho la sensazione che ci siano dei malintesi sul collegamento per ricordare l'attuale Launcher per lo spazio di lavoro corrente. È sufficiente una scorciatoia da tastiera per "salvare" il programma di avvio corrente per l'area di lavoro corrente. Funzionerà esattamente allo stesso modo, indipendentemente dallo spazio di lavoro in cui ti trovi. Lo script stesso determinerà qual è l'area di lavoro corrente.

modificare

Dal tuo commento, capisco che non sei sicuro di eseguire gli script e hai paura che confonderai il tuo attuale lanciatore.

Sono abbastanza sicuro che sia troppo (o troppo poco :)) rispetto per ciò che la sceneggiatura sta facendo. Tuttavia, puoi semplicemente eseguire il backup del tuo Unity Launcher corrente con il comando:

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

Questo creerà un file ~/launcher_output, contenente il comando completo per ripristinare Unity Launcher alla situazione iniziale. In caso di emergenza, è sufficiente copiare il contenuto del file e incollarlo nel terminale.

Ma ancora una volta, è davvero improbabile che rovinerai il tuo launcher, a meno che tu non cambi manualmente lo script.


MODIFICA IMPORTANTE (2)

Come richiesto in un commento, con la presente una versione funziona senza dover utilizzare alcuna combinazione di collegamenti; basta eseguire lo script e iniziare a configurare i lanciatori nelle aree di lavoro specifiche. Lo script creerà file (invisibili) nella tua home directory, per ricordare il tuo set di lanciatori (Unity-) nelle diverse aree di lavoro.

Ho provato questo nella "versione 1" dello script, ma sempre "incorporando" i due controlli di avvio tra due controlli dello spazio di lavoro si sono rivelati il ​​trucco per prevenire comportamenti indesiderati (salvataggio di dati errati) quando ci si sposta rapidamente attraverso gli spazi di lavoro.

Come usare

  1. Come la prima versione, questo script utilizza wmctrl:

    sudo apt-get install wmctrl

  2. Copia lo script in un file vuoto, salvalo come launcher_toworkspace.py

  3. Eseguilo con il comando:

    python3 /path/to/launcher_toworkspace.py
    
  4. Se funziona come previsto, aggiungi il seguente comando alle applicazioni di avvio:

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

Il copione

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

Nota

Se imposti le tue aree di lavoro con la versione precedente dello script, dovrebbero funzionare anche per questa versione.

PPA

Secondo il 23-04-2015, la bella domanda di Dennis J e l'incoraggiamento di Parto hanno portato alla creazione di uno ppascript, coperto su webupd8 , inclusa una GUI per gestirlo.

ppa:vlijm/lswitcher

Per installarlo, esegui:

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

inserisci qui la descrizione dell'immagine

Da adesso, è confezionato per Trusty & Utopic. Aggiungerò altri dopo il test. Aggiungerò anche un programma di .debinstallazione, ma suggerirei di usare il ppa, poiché di solito questo tipo di cose viene aggiornato di tanto in tanto.

Poiché la posizione dei dati del riquadro di visualizzazione è cambiata da ~/a ~/.config/lswitcher, dovrai configurare di nuovo Unity Launcher se hai utilizzato lo script precedente.


È possibile senza usare le scorciatoie da tastiera? Il modo in cui lo visualizzo è il seguente: Quando si è nell'area di lavoro uno, viene mostrato solo un set di icone; quando passo allo spazio di lavoro due, il programma di avvio è vuoto tranne le icone del trattino e del cestino - quindi aggiungo le icone che voglio che vengono salvate automaticamente. Ripetere l'operazione per le altre aree di lavoro. Forse puoi persino creare una GUI per esso - ti darà +500 se lo fai funzionare. La GUI è facoltativa.
Parto,

1
@Parto WOW, sai come attirare l'attenzione di qualcuno :) Questo è certo, ma ci sarebbero voluti più thread per farlo funzionare senza problemi (provato in uno script di traccia "mono"). Aspettatevi una risposta nei prossimi giorni :).
Jacob Vlijm,

1
Eccezionale. Aspetterò ... bella domanda però, mi chiedo come non ci abbia pensato.
Parto,

1
@Parto Devo dire che sono colpito dalla tua generosità. Sto programmando di lavorarci ulteriormente e forse creerò una ppa, compresa la GUI per avviare / interrompere, le preferenze, ecc. Grazie per la spinta! Il tuo desktop sembra fantastico a proposito!
Jacob Vlijm,

1
In qualsiasi momento. Tutti hanno bisogno di una spinta di tanto in tanto. Inoltre mi hai già aiutato prima - consideralo un ringraziamento. A proposito di questo "progetto", un ppa sarebbe bello dato che non tutti sono tecnici.
Parto,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.