i3wm: lance les applications sur des espaces de travail spécifiques au démarrage de i3

56

Comment puis-je démarrer des applications sur des espaces de travail spécifiques dans i3 lorsqu'il démarre?

Pourquoi cela ne fonctionne-t-il pas dans mon fichier de configuration? :

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1
Pente
la source

Réponses:

61

Selon la page Arch Wiki i3 , pour lancer automatiquement une application sur un espace de travail spécifique, vous utilisez i3-msg:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
jasonwryan
la source
4
Oui, une ligne comme des exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'œuvres. Mais, je trouve un peu étrange d'utiliser execsur ce i3-msgqui est une commande destinée à exécuter les commandes i3. Pourquoi ne puis-je pas écrire directement workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1dans mon fichier de configuration?
Gradient
3
Cela ouvre tout dans Workspace 1 pour moi.
cmc
4
Fonctionne pour la plupart des applications. Cependant, google-chrome-stableil reste toujours ouvert sur le dernier espace de travail de ma configuration. Par exemple, avec cette configuration , Chrome s'ouvre sur l'espace de travail 4 à côté de htop.
danijar
3
Notez que i3 fournit maintenant des fonctionnalités de sauvegarde / restauration de la mise en page qui rendent inutile l’appel de i3-msg dans la plupart des cas.
Wieland
1
La sauvegarde / restauration de la mise en page @Wieland est différente du démarrage automatique ; le premier ne traite que de la configuration des pièges à hirondelle pour les fenêtres de programme, tandis que le second lance une instance d'application telle que demandée par l'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
photo du visage
la source
Cela fonctionne pour certaines applications, mais pas pour d'autres. Je soupçonne que cela pourrait être lié à la chaîne utilisée dans l' classargument. Est-il possible de savoir exactement à quelle classe une application est associée?
Luís de Sousa
@ LuísdeSousa vous xprop | grep CLASSdans le terminal, le pointeur de votre souris se transforme en croix, vous cliquez sur le programme que vous souhaitez obtenir la classe de et utilisez la deuxième variable qui apparaît dans votre terminal. Exemple de résultat pour Chrome:WM_CLASS(STRING) = "google-chrome", "Google-chrome"
kittenparry
@kittenparry. Merci pour la suggestion, mais en utilisant toujours la chaîne de la xpropcommande, les fenêtres ne sont pas affectées à l'espace de travail souhaité.
Luís de Sousa
1
@ LuísdeSousa, certains programmes ne fonctionnent pas comme Spotify. Pour eux, vous pourriez écrire quelque chose de similaire à ceci for_window [class="Spotify"] move to workspace $ws10$ws10est votre variable d’espace de travail.
chatonparry
10

C'est un démarrage automatique uniquement au démarrage de l'espace de travail, pas un démarrage automatique lorsque i3 démarre, mais j'ai pensé que cela pourrait être utile.

Par exemple, pour lancer mon navigateur Web dans le deuxième espace de travail nommé "Web", voici ce que j'ai fait dans ma configuration:

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

Lorsque j'appuie sur la touche 2, mon navigateur Web démarre, mais lorsqu'il est déjà ouvert, il ne le relance pas, il passe simplement à l'espace de travail Web.

Remarque: la mise en page peut parfois être agaçante, ce n'est pas obligatoire.

Pour plus de détails voir ma conf

Tyjak
la source
1
Vous pouvez le faire facilement en attribuant un espace de travail . Par exemple, pour passer pidginau 3ème espace de travail à chaque lancement, je l’ai dans la config assign [class="Pidgin"] $tag3.
Bonjour Angel
L'affectation à un espace de travail est différente. La solution de @ tyjak provoquera le lancement d'une application lorsque vous ouvrez un espace de travail particulier. L'affectation d'une application à un espace de travail entraîne le déplacement de cette application vers un espace de travail chaque fois que vous l'ouvrez.
Mike
5

Je viens de le faire fonctionner à la fin de mon ~/.config/i3/configdossier:

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox
robru
la source
Selon Arch Linux i3 Exemple pour Firefox: Définissez d’abord votre variable set $ws1 "Firefox", puis insérez la ligne suivantefor_window [class="Firefox"] move to workspace $ws1
Markus Weber
0

Il suffit d'utiliser assign [class="<use your program name here e.g. - Firefox>"] $workspace<eg. 5>. Ça marche pour moi.

Tanmoy Nandi
la source