i3wm: запускать приложения в определенных рабочих пространствах при запуске i3

56

Как запустить приложения на определенных рабочих пространствах в i3 при его запуске?

Почему это не работает в моем файле конфигурации? :

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1
градиент
источник

Ответы:

61

Согласно странице Arch Wiki i3 , для автоматического запуска приложения в определенной рабочей области вы используете i3-msg:

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
jasonwryan
источник
4
Да, строка вроде exec --no-startup-id i3-msg 'workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1'работает. Но, я считаю , это немного странно , чтобы использовать execна i3-msgкоторый команда предназначена для выполнения i3 команды. Почему я не могу напрямую написать workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1в своем конфигурационном файле?
Градиент
3
Это просто открывает все в Workspace 1 для меня.
CMC
4
Работает для большинства приложений. Однако google-chrome-stableвсегда открывается в последнем рабочем пространстве в моей настройке. Например, в этой конфигурации Chrome открывается в рабочей области 4 рядом с htop.
Данияр
3
Обратите внимание, что i3 теперь предоставляет функции сохранения / восстановления макета, которые делают ненужным вызов i3-msg в большинстве случаев.
Виланд
1
Сохранение / восстановление макета @Wieland отличается от автоматического запуска ; первый имеет дело только с настройкой ловушек ласточки для окон программы, а второй запускает экземпляр приложения в соответствии с запросом OP.
Энтони Томас
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
выстрел в голову
источник
Это работает для некоторых приложений, но не для других. Я подозреваю, что это может быть связано со строкой, используемой в classаргументе. Есть ли способ точно узнать, с каким классом связано приложение?
Луис де Соуза
@ LuísdeSousa вы xprop | grep CLASSв терминале, указатель мыши превращается в перекрестие, вы нажимаете на программу, для которой хотите получить класс, и используете вторую переменную, которая появляется в вашем терминале. Пример результата для Chrome:WM_CLASS(STRING) = "google-chrome", "Google-chrome"
kittenparry
@kittenparry. Спасибо за предложение, но все же, используя строку из xpropкоманды, окна не назначены для требуемой рабочей области.
Луис де Соуза
1
@ LuísdeSousa Некоторые программы не работают с ним, как Spotify. Для них вы можете написать что-то похожее на это, for_window [class="Spotify"] move to workspace $ws10где $ws10ваша переменная рабочей области.
Kittenparry
10

Это автозапуск только при запуске рабочей области, а не автозапуск при запуске i3, но я подумал, что это может быть полезно.

Например, чтобы запустить мой веб-браузер в названном втором рабочем пространстве «web», это то, что я сделал в моей конфигурации:

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

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

Примечание: часть макета может раздражать, это не является обязательным требованием.

Для более подробной информации смотрите мой конф

tyjak
источник
1
Вы можете сделать это очень легко , назначив рабочее пространство . Например, чтобы перейти pidginна 3-е рабочее пространство при каждом запуске, я в конфигурации assign [class="Pidgin"] $tag3.
Привет, Ангел,
Назначение рабочей области отличается. Решение @ tyjak приведет к запуску приложения при открытии определенного рабочего пространства. Присвоение приложения рабочей области приведет к тому, что приложение будет перемещено в рабочую область при каждом его открытии.
Майк
5

Я только что работал с этим в конце моего ~/.config/i3/configфайла:

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox
robru
источник
Согласно Arch Linux i3 Пример для Firefox: сначала установите вашу переменную, set $ws1 "Firefox"а затем вставьте следующую строкуfor_window [class="Firefox"] move to workspace $ws1
Маркус Вебер
0

Просто используйте assign [class="<use your program name here e.g. - Firefox>"] $workspace<eg. 5>. Это работает для меня.

Танмой Нанди
источник