LINUX.ORG.RU

i3, я хочу окошки при старте!

 


2

2

Есть ли нормальный способ заставить i3 открывать при старте приложения на конкретных воркспейсах?

Вот это не работает:

exec --no-startup-id i3-msg 'workspace 1; exec firefox'
exec --no-startup-id i3-msg 'workspace 3; exec i3-sensible-terminal'
exec --no-startup-id i3-msg 'workspace 3; exec i3-sensible-terminal'
exec --no-startup-id i3-msg 'workspace 1'

i3 version 4.11 (2015-09-30, branch "4.11") © 2009 Michael Stapelberg and contributors

Слипы не предлагать.

★★★

Вот это не работает:

Логично. Ты быстро переключаешься между рабочими столами, а приложения запустятся уже потом, на последнем выбранном.

Либо делай конфиг по классам, но тогда это всегда будет работать. Либо пиши скрипт в стиле «to wp2; exec app; sleep 5;», чтобы быть уверенным, что в момент запуска приложения будет открыт нужный рабочий стол.

aidan ★★★★
()
Ответ на: комментарий от DeadEye

Тогда я не понял, что за правила.

Не вот эти точно:

assign [class="Okular"] 5

Теперь если я нажму okular он сразу на 5 воркспейсе появится.

Kuzy ★★★
() автор топика
Ответ на: комментарий от aidan

Это работало на старом i3.

Либо делай конфиг по классам, но тогда это всегда будет работать. Либо пиши скрипт в стиле «to wp2; exec app; sleep 5;», чтобы быть уверенным, что в момент запуска приложения будет открыт нужный рабочий стол.

Очень удобно.

Kuzy ★★★
() автор топика

Пишешь скрипт, который сначала запускает приложения, а потом перемещает их на нужный раб. стол (с помощью wmctrl, например), и добавляешь в автозапуск.

sudopacman ★★★★★
()
Последнее исправление: sudopacman (всего исправлений: 2)

Для запуска термінала в scratchpad я делаю так:

exec --no-startup-id gnome-terminal --geometry 155x45 && i3-msg [class="Gnome-terminal"] floating enable, move scratchpad

Могу тебе посоветовать устанавливать специальный класс приложениям при запуске (--class=firefox-ws1 etc), и параллельно запускать скрипт, который будет размещать их на нужные воркспейсы, если первый вариант не сработает.

Smola
()
Последнее исправление: Smola (всего исправлений: 1)
Ответ на: комментарий от NeXTSTEP

Я не в курсе, расскажи пожалуйста. Кроме того, что курсор не превращается в песочные часы, так и не понял чем она полезна в i3.

Smola
()
Ответ на: комментарий от sudopacman

Спасибо, использовал, это поражающее своей красотой решение.

~/bin/i3-wait-for-windows-then-move.sh

#!/bin/sh

while : ; do
        expected=$2
        actual=`wmctrl -lp | awk '{ print $3 }' | grep -o "$1" | wc -l`
        [[ $expected -gt $actual ]] || break
done

windowIds=`wmctrl -lp | awk '{ print $1" "$3 }' | sed -e 's/\(0x[0-9a-f]\{8\}\) '$1'/\1/;tx;d;:x'`

echo "$windowIds" | xargs -i i3-msg '[id="{}"] move container to workspace '$3

Кусок ~/.i3/config

exec --no-startup-id firefox
exec --no-startup-id i3-sensible-terminal
exec --no-startup-id i3-sensible-terminal
exec --no-startup-id dolphin
exec --no-startup-id cantata

exec ~/bin/i3-wait-for-windows-then-move.sh `pidof firefox` 1 1
exec ~/bin/i3-wait-for-windows-then-move.sh `pidof konsole` 2 3
exec ~/bin/i3-wait-for-windows-then-move.sh `pidof dolphin` 1 4
exec ~/bin/i3-wait-for-windows-then-move.sh `pidof cantata` 1 8
Чувствую себя по горло в юниксвее.

Kuzy ★★★
() автор топика
Ответ на: комментарий от NeXTSTEP
The --no-startup-id parameter disables startup-notification support for this 
particular exec command. With startup-notification, i3 can make sure that a window
appears on the workspace on which you used the exec command. Also, it will change
the X11 cursor to watch (a clock) while the application is launching. So, if an
application is not startup-notification aware (most GTK and Qt using applications
seem to be, though), you will end up with a watch cursor for 60 seconds.

Значит она сломана. Даже если мне нужно переключать воркспейс до exec. Поскольку оба терминала появлялись на первом (вообще все приложения там появлялись).

Kuzy ★★★
() автор топика
Ответ на: комментарий от Smola

Если её нет, то i3 ждёт уведомления от запускаемого приложения (и курсор в процессе ожидания превращается в песочные часы). Ждёт он, например, для того того, чтобы расположить его на том рабочем столе, на котором оно запускалось, а не на текущем.

Впрочем, я затупил, в оп-посте она используется правильно (она должна применяться для запуска утилиты i3-msg, но не для запуска графических приложений).

NeXTSTEP ★★
()

Так, разобрался. Это связано с тем, парсер конфига i3 обрабатывает кавычки не так, как в баше. Вынес их в отдельный файл.

~/.config/i3/config:

exec --no-startup-id bash ~/s.sh

~/s.sh:

i3-msg 'workspace 6; exec firefox'
i3-msg 'workspace 5; exec thunar'
i3-msg 'workspace 4; exec gnome-terminal'
i3-msg 'workspace 3; exec xterm'
i3-msg 'workspace 2'

Вот так всё где надо запускается (кроме xterm, который, похоже, не умеет в startup notifications).

NeXTSTEP ★★
()
Ответ на: комментарий от Kuzy

Ну да. Тут баш с этой опцией запускается, а firefox, thunar, и т.д. без неё.

NeXTSTEP ★★
()
Ответ на: комментарий от Smola

Я не пробовал, но там окно появляется после старта процесса, там что не уверен, что сработает, скрипт ждет пока окна появляются.

Kuzy ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.