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'

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, мой веб-браузер запускается, но когда он уже открыт, он не перезапускает его, он просто переключается на веб-рабочую область.

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

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


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

Согласно 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>. Это работает для меня.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.