Come faccio a scrivere uno script per aprire una serie di programmi ciascuno su un'area di lavoro specifica?


35

Mi sono guardato intorno per un po 'e non sono riuscito a capire la risposta al mio seguente problema:

Ho un setup di sei desktop su Ubuntu 12.04 con Unity. All'avvio, ogni mattina, seguo una routine di apertura degli stessi cinque o sei programmi. Apro ciascuno su un'area di lavoro specifica. Vorrei che fosse automatizzato. C'è un modo per script o configurarlo?

Domanda aggiuntiva : per complicare ulteriormente la questione, sto eseguendo due schermi in modalità doppia vista. In realtà ho bisogno di avviare ciascun programma su una schermata specifica, preferibilmente a schermo intero.


1
Potresti trovare questo utile. Indica wmctrl, ma non l'ho usato: movingtofreedom.org/2010/08/10/…
RobotHumans,

questo potrebbe essere utile. askubuntu.com/questions/87002/…
Suhaib,

1
Venendo a questo da una visione molto semplice, c'è qualche motivo per cui non puoi lasciare la tua macchina in modalità di sospensione quando parti?
Penserei

Quando dici desktop, intendi un'area di lavoro?
p0llard,

Le attività di KDE potrebbero essere in grado di farlo.
Lumaca meccanica

Risposte:


20

L'idea di jdp407 di usare compizconfig assocerà una particolare applicazione a un particolare spazio di lavoro in modo che OGNI VOLTA quell'applicazione sia aperta, sia collocata nello spazio di lavoro corrispondente. Se ciò non è desiderato, è possibile effettuare le seguenti operazioni:

1) Installa wmctrl

sudo apt-get install wmctrl

2) Creare un file con il seguente contenuto e renderlo eseguibile

#!/bin/bash
wmctrl -s 0 #Switches to workspace 0 [workspaces are numbered from 0]
gnome-terminal & #Say you want a terminal in the 0th workspace
nautilus & #Maybe a file browser too
sleep 2 #Windows take some time to open. If you switch immediately, they'll open up in wrong workspaces. May have to change the value 2.
wmctrl -s 1 #Switches to workspace 1
firefox & #You get the idea. Continue for all workspaces
sleep 2
wmctrl -s 0 #You will be left at this workspace when the script finishes executing

3) Chiama questo script dalla .xsessionrctua home directory [se potresti dover creare questo file] per automatizzare il processo ad ogni accesso. Oppure puoi semplicemente chiamarlo da un terminale quando necessario. EDIT: mettilo in "Applicazioni di avvio", non .xsessionrc. .xsessionrc verrà eseguito anche prima che l'ambiente desktop abbia terminato il caricamento.


Potresti voler creare una sessione x personalizzata come suggerito da jdp407, in modo da avere due sessioni tra cui scegliere, una che apre automaticamente queste applicazioni e una che no. Ma questo mi sembra superfluo.


Se ritieni che passare a un'area di lavoro, aprire le applicazioni appropriate e passare alla successiva sia dispendioso in termini di tempo, puoi aprire tutte le applicazioni in un colpo solo, quindi spostare le finestre usando wmctrl. Per esempio

wmctrl -r 'Firefox' -t 1

sposterà una finestra con Firefox nel titolo nell'area di lavoro 1. Se esiste più di una finestra, wmctrlverrà spostata la prima nell'elenco di finestre gestite da . Per poterlo utilizzare, devi conoscere il titolo delle finestre che verranno create dalle applicazioni. Ecco perché non l'ho suggerito come opzione principale. Se i titoli saranno inequivocabili come nel caso delle app più comunemente utilizzate, questa è la strada da percorrere.


Apertura di applicazioni a schermo intero:

Alcune applicazioni come gnome-terminal hanno argomenti da riga di comando per aprire una finestra in stato ingrandito o in modalità schermo intero. Se esistono tali opzioni, usale. In caso contrario, utilizzare wmctrlcome segue

wmctrl -r 'prasanth@nb37' -b add,maximized_vert,maximized_horz

Questo massimizza la mia finestra terminale (già esistente).

wmctrl -r 'prasanth@nb37' -b add,fullscreen

Questo invia la finestra in modalità a schermo intero.


Scorri wmctrlla pagina man. Si può trovare l'uso per più delle sue funzionalità.


1
Apparentemente usando wmctrl per selezionare l'area di lavoro non funziona nelle distribuzioni post-Lynx. L'opzione '-s' può essere impostata solo su '0', oppure genererà un errore o non farà nulla. Fonte: movingtofreedom.org/2010/08/10/…
p0llard

Uso 12.04 con unity2d (senza effetti visivi) e funziona per me. Sembra che non funzionerà con gli effetti visivi abilitati.
S Prasanth,

wmctrlqui funziona bene (LXDE e XFCE, compositing tramite xcompgr abilitato)
Glutanimate

Funziona per me in Mint 14 con Cannella, grazie!
k102,

In Ubuntu 14.04, utilizzare wmctrl -o X,Yper passare a una finestra specifica. Se si dispone di più monitor, è possibile spostare le applicazioni sull'altro monitor utilizzando wmctrl -r "App name" -e G,X,Y,W,H. Funziona bene con effetti visivi unitari.
Nate,

10

Ci sono due "problemi" qui: il primo prevede l'apertura di un set specifico di programmi al momento del login; la seconda prevede di aprirli su aree di lavoro specifiche. Tratterò entrambi separatamente:

  1. Creazione di una sessione X personalizzata

    Questo è abbastanza facile da fare. Devi semplicemente creare uno X Session Script e quindi dire a LightDM di usarlo. Dovrai conoscere i comandi per avviare i programmi che desideri dal terminale.

    1. Terminale aperto.
    2. genere touch ~/.customxsession e premi Invio.
    3. genere gedit ~/.customxsession e premi Invio.
    4. Ora avrai un editor di testo aperto con un file vuoto.
    5. È necessario definire una sessione X in questo file. Ho creato un file di esempio "riempi gli spazi vuoti" nella parte inferiore della risposta. Penso che Ubuntu usi gnome-session come gestore delle finestre, ma forse mi sbaglio. Al momento non riesco a provarlo (laptop rotto), quindi se non funziona come previsto (ad es. Carica Gnome invece di Unity), potresti dover fare delle ricerche.
    6. Salva il file e chiudi Gedit.
    7. genere touch /usr/share/xsessions/multi.desktop e premi Invio.
    8. genere gedit /usr/share/xsessions/multi.desktop e premi Invio.
    9. Ora avrai un editor di testo aperto con un file vuoto.
    10. Copia e incolla il codice in fondo alla risposta (etichettato '/usr/share/xsessions/multi.desktop:') in Gedit.
    11. Salva il file e chiudi Gedit.
    12. Reboot. Quando arrivi alla schermata di accesso, se guardi le sessioni disponibili (fai clic sul piccolo logo Ubuntu accanto al tuo nome utente), dovresti vedere una chiamata Multi-Session. Se si accede con esso, i programmi inseriti in X Session Script dovrebbero aprirsi automaticamente.
  2. Assegnazione di programmi agli spazi di lavoro

    Anche questo è abbastanza semplice, ma necessita di alcuni software extra non installati in Ubuntu per impostazione predefinita.

    1. Installa compizconfig-settings-manager (puoi usare il Software Center o semplicemente eseguire sudo apt-get install compizconfig-settings-managernel Terminale).
    2. Apri le impostazioni di CompizConfig dalla Dash.
    3. Apri il plugin "Posiziona Windows" (è nella sezione "Gestione finestre").
    4. Fai clic su "Nuovo" nella sezione "Windows con vista fissa".
    5. Fai clic sull'icona "Più".
    6. Impostare 'Tipo' come 'Titolo finestra' e inserire il titolo della finestra di uno dei programmi nella casella 'Valore'. Assicurati che "Relazione" sia impostato su "AND" e fai clic su "Aggiungi".
    7. Imposta l'area di lavoro inserendo i numeri nelle caselle 'X' e 'Y'. Quando hai 4 aree di lavoro per 'X', '1' è lasciato e '2' è giusto, e per 'Y', '1' è in alto e '2' è in basso. Visto che hai 6 aree di lavoro, a seconda di come sono impostate le cose, l'impostazione di "Y" su "3" selezionerebbe la riga inferiore e l'impostazione "X" su "3" selezionerebbe la terza colonna.
    8. Ripetere i passaggi 4-7 per i restanti programmi a cui si desidera assegnare uno spazio di lavoro.
    9. Chiudi le impostazioni di CompizConfig.
  3. Entrando

    Quando accedi, devi dire a Ubuntu che vuoi usare la tua X Session personalizzata.

    1. Reboot.
    2. Quando arrivi alla schermata di accesso, se guardi le sessioni disponibili (fai clic sul piccolo logo Ubuntu accanto al tuo nome utente), dovresti vedere una chiamata Multi-Session. Se si accede con esso, i programmi inseriti in X Session Script dovrebbero aprirsi automaticamente ed essere assegnati alle aree di lavoro scelte.
  4. I problemi

    Molto potrebbe essere andato storto con questo, o se commetti un piccolo errore, o se ho fatto un errore durante la scrittura di questa risposta. Se qualcosa va storto, assicurati di aver seguito le istruzioni alla lettera e, se non lo hai fatto, correggi qualsiasi cosa. Se hai ancora problemi, lascia un commento.

~ / .Customxsession:

#!/usr/bin/env bash
program-command-1 &
program-command-2 &
program-command-3 &
program-command-4 &
program-command-5 &
program-command-6 &
exec gnome-session

/usr/share/xsessions/multi.desktop:

[Desktop Entry]
Name=Multi-Session
Exec=/home/your-username/.customxsession

1

Aggiungi le applicazioni richieste nel programma StarupApplications, quindi aggiungi anche questo script. Questo è il mio script: ManageWorkSpaces.sh

echo "Jeril"
wmctrl -r NetBeans IDE 7.1.1 -t 0
wmctrl -r /bin/bash -t 1
wmctrl -r Google Chrome -t 2
wmctrl -r jerilkuruvila - Skype™ -t 3

// focus sul terminale

wmctrl -a NetBeans IDE 7.1.1   -t 0 

Ma non ho idea di come gestire 2 display.


Ciao Jeril! Benvenuti in Ask Ubuntu! La tua soluzione non funziona per me. Se corro wmctrl -d, ho solo un "desktop". Hai provato questo su Unity in Ubuntu 12.10?
Flimm,

Ciao Flimm, sto usando wmctrl -r, ho 4 spazi di lavoro. La mia versione di Ubuntu è 12.04
jkuruvila
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.