O motivo é bastante simples: quando você executa chromium , ele não retorna até que termine, ou seja, após você fechar o Chromium . Portanto, sleep e i3-msg só serão executados depois que a janela já tiver passado.
Para resolver isso, você só precisa iniciar chromium em segundo plano, isso pode ser feito anexando & ao comando. O sleep é necessário, sem que i3-msg possa ser executado antes que o Chromium tenha inicializado sua janela. Cinco segundos podem ser um pouco longos, mas isso depende da velocidade com que o Chromium abre no seu sistema.
Além disso, sugiro adicionar critérios ao i3-msg . Dessa forma, ele funciona em qualquer janela do Chromium e não apenas na janela atualmente focada, o que pode não ser a desejada janela do Chromium (obviamente isso pode não ser um comportamento desejado, caso você queira que algumas janelas do Chromium fiquem em tela cheia).
#!/bin/sh
i3-msg workspace web
/bin/chromium --start-fullscreen &
sleep 2
i3-msg '[instance="^chromium$"] fullscreen disable'
Como alternativa , se desejar que as janelas do Chromium apareçam sempre na área de trabalho "web", você pode usar as diretivas de configuração assign e for_window em < em> i3 configuração para fazer o trabalho:
assign [instance="^chromium$"] web
for_window [instance="^chromium$"] exec "sh -c 'sleep 2; i3-msg \[instance=chromium\] fullscreen disable'"
Com isso, você não precisa mais de um script e toda vez que você executar chromium i3 irá colocá-lo na "web" e dois segundos depois a janela sairá da tela cheia. Nota: Embora seja teoricamente possível usar fullscreen disable diretamente com for_window , ele não funciona com o Chromium porque a janela realmente começa em tela cheia. O Chromium apenas ativa a tela inteira bem rápido; infelizmente i3 é ainda mais rápido ao executar for_window . Então i3 desativará a tela inteira antes que o Chromium tente ativá-lo. É por isso que o desvio com a execução de sleep e i3-msg via exec é necessário.