i3wm: avvia le applicazioni su aree di lavoro specifiche all'avvio di i3


56

Come posso avviare applicazioni su aree di lavoro specifiche in i3 all'avvio?

Perché questo non funziona nel mio file di configurazione? :

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1

Risposte:


61

Secondo la pagina Arch Wiki i3 , per avviare automaticamente un'applicazione in uno spazio di lavoro specifico, si utilizza i3-msg:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'

4
Sì, una linea come exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'funziona. Ma trovo un po 'strano usare execsu i3-msgquale sia un comando pensato per eseguire comandi i3. Perché non riesco a scrivere direttamente workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1nel mio file di configurazione?
Pendenza

3
Questo apre tutto per me in Workspace 1.
cmc

4
Funziona con la maggior parte delle app. Tuttavia google-chrome-stablesi apre sempre sull'ultimo spazio di lavoro nella mia configurazione. Ad esempio, con questa configurazione , Chrome si apre nell'area di lavoro 4 accanto a htop.
danijar,

3
Nota che i3 ora offre funzionalità di salvataggio / ripristino del layout che rendono nella maggior parte dei casi inutili chiamate i3-msg.
Wieland,

1
Il salvataggio / ripristino del layout di @Wieland è diverso dall'avvio automatico ; il primo si occupa solo di impostare trappole di rondine per le finestre del programma mentre il secondo avvia un'istanza di un'applicazione come richiesto dall'OP.
Antony Thomas,

12
# This is what I use in ie config
# custom variables for workspaces
set $ws1 "1< txt >"
set $ws2 "2> fm "
set $ws3 "3< Web >"
set $ws4 4
set $ws5 5
set $ws6 6
set $ws7 7
set $ws8 8
set $ws9 9


##==================================================##
#                         *** Workspace specific settings ***                     #
##=================================================##
# Assign Workspaces:
assign [class="Firefox"] $ws3
assign [class="Chromium"] $ws3
assign [class="Google-chrome-beta"] $ws3
assign [class="^Geany"] $ws1

Questo funziona per alcune applicazioni, ma non per altre. Ho il sospetto che potrebbe essere correlato con la stringa utilizzata classnell'argomento. Esiste un modo per sapere esattamente a quale classe è associata un'applicazione?
Luís de Sousa il

@ LuísdeSousa tu xprop | grep CLASSnel terminale, il puntatore del mouse si trasforma in un mirino, fai clic sul programma di cui vuoi ottenere la classe e usi la seconda variabile che compare nel tuo terminale. Esempio di risultato per Chrome:WM_CLASS(STRING) = "google-chrome", "Google-chrome"
kittenparry il

@kittenparry. Grazie per il suggerimento, ma usando ancora la stringa dal xpropcomando le finestre non sono assegnate allo spazio di lavoro desiderato.
Luís de Sousa,

1
@ LuísdeSousa alcuni programmi non funzionano come Spotify. Per loro potresti scrivere qualcosa di simile a questo for_window [class="Spotify"] move to workspace $ws10dove si $ws10trova la tua variabile dell'area di lavoro.
kittenparry

10

È un avvio automatico solo all'avvio dell'area di lavoro, non un avvio automatico all'avvio di i3 ma ho pensato che potesse essere utile.

Ad esempio, per avviare il mio browser Web nella seconda area di lavoro denominata "web", è ciò che ho fatto nella mia configurazione:

bindsym $mod+2 workspace 2:web; layout tabbed; exec [ $(ps h -C vimb | wc -l) = 0 ] && /usr/bin/vimb -s

Quando premo il tasto 2, il mio browser Web si avvia ma quando è già aperto non lo riavvia, passa semplicemente allo spazio di lavoro Web.

Nota: la parte del layout può essere fastidiosa a volte, non è un requisito.

Per maggiori dettagli vedi la mia conf


1
Puoi farlo molto facilmente assegnando spazio di lavoro . Ad esempio, per passare pidginalla terza area di lavoro ad ogni suo lancio, ho nella configurazione assign [class="Pidgin"] $tag3.
Ciao Angelo

L'assegnazione a un'area di lavoro è diversa. La soluzione di @ tyjak provocherà l'avvio di un'applicazione all'apertura di un determinato spazio di lavoro. L'assegnazione di un'applicazione a un'area di lavoro comporterà il trasferimento di tale applicazione in un'area di lavoro ogni volta che la si apre.
Mike,

5

Ho appena funzionato con questo alla fine del mio ~/.config/i3/configfile:

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox

Secondo Arch Linux i3 Esempio per Firefox: prima imposta la tua variabile set $ws1 "Firefox"e poi inserisci la seguente rigafor_window [class="Firefox"] move to workspace $ws1
Markus Weber

0

Basta usare assign [class="<use your program name here e.g. - Firefox>"] $workspace<eg. 5>. Funziona per me.

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.