i3wm: inicie aplicativos em áreas de trabalho específicas quando o i3 for iniciado

56

Como iniciar aplicativos em áreas de trabalho específicas no i3 quando ele é iniciado?

Por que isso não está funcionando no meu arquivo de configuração? :

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1
Gradiente
fonte

Respostas:

61

De acordo com a página do Arch Wiki i3 , para iniciar automaticamente um aplicativo em um espaço de trabalho específico, use i3-msg:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
jasonwryan
fonte
4
Sim, uma linha como exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'funciona. Mas, acho que é um pouco estranho para usar execno i3-msgque é um comando destinado a executar i3 comandos. Por que não consigo escrever diretamente workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1no meu arquivo de configuração?
Gradiente
3
Isso apenas abre tudo no espaço de trabalho 1 para mim.
CMC
4
Funciona para a maioria dos aplicativos. No entanto, google-chrome-stablesempre é aberto no último espaço de trabalho na minha configuração. Por exemplo, com essa configuração , o Chrome é aberto na área de trabalho 4 ao lado de htop.
danijar
3
Observe que o i3 agora oferece recursos de economia / restauração de layout que tornam desnecessário chamar i3-msg na maioria dos casos.
Wieland
11
O salvamento / restauração do layout @Wieland é diferente do início automático ; o primeiro trata apenas da configuração de traps de andorinha para janelas de programas, enquanto o último inicia uma instância de um aplicativo conforme solicitado pelo 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
Tiros na Cabeça
fonte
Isso funciona para alguns aplicativos, mas não para outros. Eu suspeito que isso possa estar relacionado à string usada no classargumento. Existe alguma maneira de saber exatamente a qual classe um aplicativo está associado?
Luís de Sousa
@ LuísdeSousa você xprop | grep CLASSno terminal, o ponteiro do mouse muda para uma mira, você clica no programa em que deseja obter a classe e usa a segunda variável que aparece no seu terminal. Exemplo de resultado para o Chrome:WM_CLASS(STRING) = "google-chrome", "Google-chrome"
kittenparry 27/03
@kittenparry. Obrigado pela sugestão, mas ainda usando a sequência do xpropcomando, as janelas não são atribuídas ao espaço de trabalho desejado.
Luís de Sousa
11
@ LuísdeSousa Alguns programas não funcionam como o Spotify. Para eles, você pode escrever algo semelhante a este, for_window [class="Spotify"] move to workspace $ws10onde $ws10está sua variável da área de trabalho.
kittenparry 28/03
10

É um arranque automático apenas no lançamento do espaço de trabalho, não um arranque automático quando o i3 é iniciado, mas achei que poderia ser útil.

Por exemplo, para iniciar meu navegador na segunda área de trabalho nomeada "web", foi o que fiz na minha configuração:

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

Quando eu pressiono a tecla 2, meu navegador é iniciado, mas quando já está aberto, não o reinicia, ele apenas muda para o espaço de trabalho da web.

Nota: a parte do layout pode ser irritante em algum momento, não é um requisito.

Para mais detalhes veja meu conf

tyjak
fonte
11
Você pode fazer isso muito facilmente atribuindo espaço de trabalho . Por exemplo, para mover pidginpara a terceira área de trabalho em todos os lançamentos, eu tenho na configuração assign [class="Pidgin"] $tag3.
Hi-Angel
A atribuição a um espaço de trabalho é diferente. A solução do @ tyjak fará com que um aplicativo seja iniciado quando você abrir um espaço de trabalho específico. A atribuição de um aplicativo a um espaço de trabalho fará com que o aplicativo seja movido para um espaço de trabalho sempre que você o abrir.
1955 Mike
5

Acabei de trabalhar com isso no final do meu ~/.config/i3/configarquivo:

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox
robru
fonte
De acordo com o Exemplo do Arch Linux i3 para Firefox: Primeiro defina sua variável set $ws1 "Firefox"e insira a seguinte linhafor_window [class="Firefox"] move to workspace $ws1
Markus Weber
0

Apenas use assign [class="<use your program name here e.g. - Firefox>"] $workspace<eg. 5>. Está funcionando para mim.

Tanmoy Nandi
fonte