Jak wdrożyć układ z autostartowaniem aplikacji w menedżerze okien i3?

23

Jest to kontynuacja wcześniejszego pytania na temat automatycznego uruchamiania aplikacji w poszczególnych obszarach roboczych za pomocą menedżera okien i3 oraz tego, co można i czego nie można zrobić w ~/.i3/configpliku konfiguracyjnym.

Po pierwsze, dostarczone rozwiązanie oparte na dokumentacji Arch Linux i aktualizacji dostarczonej przez op, gdzie popycha logikę dalej:

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

Interesująca jest także wymiana informacji na temat wykorzystania niektórych z nich bezpośrednio w wierszu polecenia bez powielania:

i3-msg workspace 3; i3-msg exec firefox
i3-msg workspace 9; i3-msg exec chromium

Ale nigdy nie widziałem konfiguracji, która automatycznie uruchamia wiele okien / aplikacji w każdym obszarze roboczym zgodnie z pożądanym układem pionowym lub poziomym. Moim celem jest automatyczne uruchomienie tej prostej konfiguracji, której używam:

 _____ _____     ___________     ___________
| lx  | lx  |   |        |u_|   |     |     |   proportions:
|_____|_____|   |  FF    |lx|   |spacefm    |   1- 25% each
|medit| lx  |   |        |__|   |     | vlc |   2- 75/25 x 25/50/25
|_____|_____|   |________|u_|   |_____|_____|   3- 50/50
      1               2               3

Więc zaczyna się od czegoś takiego w configpliku:

exec --no-startup-id i3-msg 'workspace 1; exec i3-sensible-terminal; layout toggle split; layout splitv; split vertical; exec i3-sensible-terminal; exec i3-sensible-terminal; exec i3-sensible-terminal; workspace 2; exec firefox; exec urxvt; exec i3-sensible-terminal; exec urxvt; workspace 3; exec spacefm; exec vlc'

Ale w jaki sposób na świecie osiągasz pożądany układ i podział w poziomie / w pionie? Próbuję, ale nie jest jasne, jak „miksujesz” wykonanie i układ. Składnia wydaje się dziwaczna, ponieważ uruchamia się i3-imgw konfiguracji i3. Czy używasz split h(lub v) - layout split v- exec layout split v- focus down(lub w prawo) pomiędzy każdym execpołączeniem?

W przypadku pojedynczego obszaru roboczego konfiguracja uruchamia wszystkie aplikacje w pionie lub w poziomie i nie mogę wpływać na układ - lub ostatnie splitpolecenie w łańcuchu decyduje, czy okna są dodawane pionowo czy poziomo. i3-msgpozornie ignoruje części polecenia, które nie są odpowiednio sformatowane w niektórych przypadkach, więc trudno jest debugować. Sytuację dodatkowo pogarsza fakt, że naprawdę musisz wyjść z X i startxponownie za każdym razem, aby zweryfikować wyniki, ponieważ samo odświeżenie konfiguracji mod+shift+Rnie spowoduje jej odcięcia, nawet jeśli zamkniesz wszystko w każdym obszarze roboczym.

Jaki jest właściwy sposób skonfigurowania tego? Czy ktoś ma rozwiązanie, które implementuje coś takiego? Dokumentacja jest całkiem dobry, ale to nie świadczy, że mogę zobaczyć szczegółowy przykład, który miesza wykonanie i rozmieszczenie na wielu obszarach roboczych.

Społeczność
źródło
Rozszerza się również na tym .
Nie trzeba używać FF ani urxvt, aby zapewnić rozwiązanie. O ile mi wiadomo, w tych programach nie ma nic specjalnego, aby ktoś mógł odtworzyć układ nr 2 z dowolnymi programami, zapisać plik json, usunąć go, sprawdzić, czy można go uruchomić z pliku konfiguracyjnego przy logowaniu, a następnie po prostu zmienić nazwy programów przed przesłaniem odpowiedzi ...
czy możesz załadować część do pliku i3 w połączeniu z zapisanym / przywróconym układem json, proszę? Mam ten sam problem .. ale nie każ mu działać. Czy używasz wielu wyświetlaczy w pliku config / json?

Odpowiedzi:

11

Uważam, że szukasz nowej funkcji oszczędzania układu, która została wprowadzona w i3 v4.8 (2014-06-15). Powiązana dokumentacja wydaje się dość dokładna.

Cytowanie z dokumentacji:

Zapisywanie / przywracanie układu umożliwia załadowanie pliku układu JSON, dzięki czemu można mieć układ podstawowy, z którym można rozpocząć pracę po włączeniu komputera. Przychodzą mi na myśl także dynamiczne przypadki użycia: jeśli często (ale nie zawsze!) Potrzebujesz układu siatki terminali z poleceniami ping / traceroute do diagnozowania problemów z siecią, możesz łatwo zautomatyzować otwieranie tych okien we właściwym układzie.

... i informacje o wersji :

tl; dr: wyeksportuj 1 swój obecny układ jako plik JSON, załaduj go do nowych sesji i3, uzyskaj okna zastępcze, które zostaną zastąpione przez rzeczywiste aplikacje po ich uruchomieniu.


1. Możesz potrzebować pakietów perl-anyevent-i3 i perl-json-xs do korzystania z tego i3-save-treenarzędzia.

damien
źródło
3
Funkcja układu jest zaskakująco trudna w użyciu. Ich koncepcja okna zastępczego, które „połyka” aplikacje oznacza, że ​​jeśli chcesz wielokrotnie tę samą aplikację, jak lxterminallub urxvtdla pojedynczego obszaru roboczego, musisz je rozróżnić, używając ich --name somethingpodczas uruchamiania w .i3 / config. Przykład w dokumencie działa, ale kiedy korzystam z eksportu z jednego z moich obszarów roboczych, nie mogę sprawić, by działał. Używasz klasy dla nazwy i instancji dla tego, czego używałeś z --name. W tym przypadku mogę mieć tylko nadzieję na narzędzie GUI, ponieważ format Json zawiera tak wiele nawiasów !!
1
Zaktualizowałem teraz do wersji 4.8 i jestem bardzo zadowolony z tej nowej funkcji. Zawsze miałem problemy z niezawodnym uruchamianiem przy logowaniu od .i3/configwcześniejszych wersji, ale po prawidłowym zalogowaniu wszystko działa dobrze. To, co zrobiłem, to zaaranżować kilka układów i zapisać je, a następnie edytować tylko zmienne klasowe plików json. Następnie coś takiego, i3-msg workspace 2\; append_layout mylayout.json\;a następnie i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditpowinno przywrócić pierwszy pożądany układ. // Dziękuję za poprawę mojej odpowiedzi, btw.
damien