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

20

Ho letto le varie risposte per avere cartelle desktop separate in ogni area di lavoro utilizzando Screenlet, devilspie o CCSM ... ma questa non è la risposta alla mia domanda. Ho installato 14.04 LTS alcuni giorni fa e ho avuto un buon successo ottenendo la maggior parte delle mie app e alcune nuove da eseguire. Quello che vorrei è avere 4 spazi di lavoro separati, ognuno con alcune icone differenti per gli ambienti che gestisco. Ad esempio,

  • Area di lavoro 1 - dedicata alle app di scienza e matematica
  • Area di lavoro 2 - dedicata agli strumenti musicali
  • Area di lavoro 3 - per circuiti elettronici e simulazioni
  • Area di lavoro 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 so cosa sto facendo!

    
posta Dennis J 10.04.2015 - 16:18
fonte

1 risposta

24

Impostazione di Unity Launcher diverso per area di lavoro:


1. 2. 3. < em> 4.

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

Il setup include due parti:

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

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

Come funziona

Sono coinvolti due piccoli script:

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

Lo script secondo tiene d'occhio quello che è l'attuale spazio di lavoro. Se c'è uno spazio di lavoro modifica , lo script vede se esiste un file di dati corrispondente (launcher-) (creato dal primo script). In tal caso, legge il file e altera l'Unity Launcher, come ricordato nel file.

Questo è tutto.

Come impostare

  1. Lo script richiede wmctrl da installare:

    sudo apt-get install wmctrl
    
  2. Crea una directory in cui verranno salvati entrambi gli script . È importante che entrambi gli script siano tenuti insieme in una directory, poiché condividono la funzionalità e un'importazione 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. ), esattamente chiamata 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 & gt; "Tastiera" & gt; "Scorciatoie" & gt; "Scorciatoie personalizzate". Fai clic su "+" e aggiungi il comando:

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

    Naviga attraverso gli spazi di lavoro e ripeti la procedura: imposta una combinazione di icone di avvio e premi la combinazione di tasti per "ricordare" l'insieme per lo spazio di lavoro specifico.

  6. Hai praticamente finito adesso. 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 programma di avvio cambia per area di lavoro, aggiungi il seguente comando alle applicazioni di avvio: Dash & gt; Applicazioni di avvio & gt; Aggiungere:

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

Note

  1. Se vuoi modificare l'insieme delle icone di avvio per un'area di lavoro specifica, accedi semplicemente allo spazio di lavoro, aggiungi / rimuovi le icone come preferisci e premi la combinazione di tasti (non è necessario riavviare lo script di sfondo).
  2. Dai commenti ho l'impressione che ci sia qualche incomprensione sul collegamento per ricordare l'attuale Launcher per l'attuale area di lavoro. Hai solo bisogno di una scorciatoia da tastiera one per "salvare" il programma di avvio corrente per lo spazio di lavoro corrente. Funzionerà esattamente allo stesso modo, indipendentemente dall'area di lavoro in cui ti trovi. Lo script stesso determinerà quale è l'area di lavoro corrente.

Modifica

Dal tuo commento, capisco che non sei sicuro di eseguire gli script e hai paura di rovinare il tuo programma di avvio corrente.

Sono abbastanza sicuro che sia troppo (o troppo poco :)) il rispetto per ciò che lo script sta facendo. Tuttavia, puoi semplicemente eseguire il backup di 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 il tuo Unity Launcher nella situazione iniziale. In caso di emergenza, è sufficiente copiare il contenuto del file e incollarlo nel terminale.

Ma di nuovo, è improbabile che rovinerai il tuo launcher, a meno che non cambi lo script manualmente.

IMPORTANTE MODIFICA (2)

Come richiesto in un commento, con la presente una versione che funziona senza dover usare la combinazione di tasti qualsiasi ; basta eseguire lo script e avviare la configurazione dei programmi di avvio nelle aree di lavoro specifiche. Lo script creerà i file (invisibili) nella tua home directory, per ricordare la tua serie di launcher (Unity-) nelle diverse aree di lavoro.

Ho provato questo in "versione 1" dello script, ma sempre "incorporando" i due controlli di avvio tra due controlli dello spazio di lavoro si è rivelato essere il trucco per prevenire comportamenti indesiderati (salvataggio di dati errati) quando ci si sposta rapidamente attraverso il aree 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 tue applicazioni di avvio:

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

Lo script

#!/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 aree di lavoro con la versione precedente dello script, dovrebbero funzionare anche per questa versione.

PPA

Come per il 2015-04-23, la bella domanda di Dennis J, e l'incoraggiamento di Parto, hanno portato a creare un ppa per lo script, covered on 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

Da adesso, è confezionato per Trusty & amp; Utopico. Ne aggiungerò altri dopo i test. Aggiungerò anche un% installer% co_de, ma suggerirei di usare .deb , poiché di solito questo genere di cose viene aggiornato di tanto in tanto.

Poiché la posizione dei dati della vista è cambiata da ppa a ~/ , dovrai impostare nuovamente Unity Launcher se hai utilizzato lo script precedente.

    
risposta data Jacob Vlijm 12.04.2015 - 09:15
fonte

Leggi altre domande sui tag