¿Cómo implementa el diseño con el inicio automático de aplicaciones en el administrador de ventanas i3?

23

Este es un seguimiento de una pregunta anterior sobre cómo iniciar automáticamente las aplicaciones en espacios de trabajo individuales con el administrador de ventanas i3 y qué se puede y no se puede hacer dentro del ~/.i3/configarchivo de configuración.

Primero, la solución provista basada en la documentación de Arch Linux y una actualización provista por op donde él empuja la lógica aún más:

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'

También es interesante este intercambio sobre aprovechar algo de eso directamente en la línea de comando sin duplicar:

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

Pero nunca he visto una configuración que inicie automáticamente muchas ventanas / aplicaciones en cada espacio de trabajo de acuerdo con un diseño vertical u horizontal deseado. Mi objetivo es iniciar automáticamente esta configuración simple que uso:

 _____ _____     ___________     ___________
| 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

Entonces comienza con algo como esto en el configarchivo:

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'

Pero, ¿cómo logras el tipo de diseño y la división vertical / horizontal que deseas? Lo intento, pero no está claro cómo se "mezclan" la ejecución y el diseño. La sintaxis se siente idiosincrásica al comenzar porque está ejecutando i3-imgdentro de la configuración de i3. ¿Utiliza split h(o v) - layout split v- exec layout split v- focus down(o derecha) entre cada execllamada?

Para un solo espacio de trabajo, la configuración inicia todas las aplicaciones, ya sea vertical u horizontalmente, y parece que no puedo influir en el diseño, o el último splitcomando en la cadena decide si las ventanas se agregan vertical u horizontalmente. i3-msgaparentemente ignora partes del comando que no están formateadas correctamente en algunos casos, por lo que es difícil de depurar. Esto se ve agravado por el hecho de que realmente necesita salir de X y startxnuevamente cada vez para verificar los resultados, ya que solo actualizar la configuración mod+shift+Rno lo cortará, incluso si cierra todo en cada uno de los espacios de trabajo.

¿Cuál es la forma correcta de configurar esto? ¿Alguien tiene una solución que implemente algo así? La documentación es bastante buena, pero no proporciona que pueda ver un ejemplo detallado que combina la ejecución y el diseño en múltiples espacios de trabajo.

Comunidad
fuente
También se expande en esto .
No es necesario utilizar FF o urxvt para proporcionar una solución. Hasta donde yo sé, no hay nada especial en esos programas, por lo que alguien podría reproducir el diseño # 2 con cualquier programa, guardar un archivo json, eliminarlo, ver si se puede iniciar desde el archivo de configuración al iniciar sesión, luego simplemente cambiar los nombres de los programas antes de enviar una respuesta ...
¿puede cargar la parte en su archivo i3 en combinación con el diseño json guardado / restaurado, por favor? Tengo el mismo problema ... pero no lo hago funcionar. ¿Utiliza pantallas múltiples en su archivo config / json?

Respuestas:

11

Creo que está buscando la nueva característica de ahorro de diseño que se introdujo en i3 v4.8 (15/06/2014). La documentación vinculada parece bastante exhaustiva.

Citando de la documentación:

El almacenamiento / restauración del diseño le permite cargar un archivo de diseño JSON para que pueda tener un diseño base para comenzar a trabajar después de encender su computadora. También se me ocurren casos de uso dinámicos: si con frecuencia (¡pero no siempre!) Necesita un diseño de cuadrícula de terminales con comandos ping / traceroute para diagnosticar problemas de red, puede automatizar fácilmente la apertura de estas ventanas en el diseño correcto.

... y las notas de lanzamiento :

tl; dr: exporta 1 tu diseño actual como archivo JSON, cárgalo en nuevas sesiones i3, obtén ventanas de marcador de posición que serán reemplazadas por las aplicaciones reales una vez que las inicies.


1. Es posible que necesite los paquetes perl-anyevent-i3 y perl-json-xs para usar la i3-save-treeutilidad.

Damien
fuente
3
La función de diseño es sorprendentemente difícil de usar. Su concepto de ventana de marcador de posición que "traga" aplicaciones significa que si desea muchas veces la misma aplicación lxterminalo urxvtpara un solo espacio de trabajo, entonces debe diferenciarlas --name somethingcuando las ejecute en .i3 / config. El ejemplo en el documento funciona, pero cuando uso una exportación de uno de mi espacio de trabajo, parece que no puedo hacer que funcione. Utiliza class para el nombre y la instancia para lo que usaste con --name. En este caso, solo puedo esperar seriamente una herramienta de interfaz gráfica de usuario , ya que el formato json tiene muchos corchetes.
1
Ahora actualicé a 4.8 y estoy bastante contento con esta nueva característica. Siempre tuve problemas para iniciar las cosas de manera confiable al iniciar sesión desde .i3/configversiones anteriores, pero una vez que inicie sesión correctamente, todo funciona bien. Lo que hice fue organizar algunos diseños y guardarlos, luego solo edite las variables de clase de los archivos json. Luego, algo así i3-msg workspace 2\; append_layout mylayout.json\;y luego i3-msg exec lxterminal\; exec lxterminal\; exec lxterminal\; exec meditdebería restaurar su primer diseño deseado. // Gracias por mejorar mi respuesta, por cierto.
damien