i3wm:启动i3时在特定工作区上启动应用程序


56

启动时如何在i3中的特定工作区上启动应用程序?

为什么这在我的配置文件中不起作用?:

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1

Answers:


60

根据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'。但是,我觉得有点奇怪使用execi3-msg其目的是要执行的i3命令的命令。为什么我不能直接workspace 1; exec firefox; workspace 2; exec urxvt; workspace 1在配置文件中写?
渐变

3
这只会为我打开Workspace 1中的所有内容。
cmc 2014年

4
适用于大多数应用。但是,google-chrome-stable总是在我的设置中的最后一个工作区上打开。例如,使用此配置,Chrome将在htop旁边的工作区4中打开。
danijar 2015年

3
请注意,i3现在提供了布局保存/恢复功能,使大多数情况下无需调用i3-msg。
Wieland

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。感谢您的建议,但是仍然使用xprop命令中的字符串,未将窗口分配给所需的工作区。
路易斯·德索萨

1
@LuísdeSousa某些程序无法像Spotify那样使用它。对于他们,您可以编写类似于以下内容的内容for_window [class="Spotify"] move to workspace $ws10,其中$ws10您的工作区变量是。
kitchenparry

10

它仅是在工作空间启动时自动启动,而不是在i3启动时自动启动,但我认为这可能很有用。

例如,要在名为“ web”的第二个工作区中启动Web浏览器,这就是我在config中所做的:

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

当我按下键2时,我的Web浏览器启动,但是当它打开时并没有重新启动它,而是切换到Web工作区。

注意:布局部分有时会很烦人,这不是必需的。

有关更多详细信息,请参见我的conf


1
通过分配工作空间,您可以轻松地做到这一点。例如,pidgin要在每次启动时移至第三工作区,我在config中assign [class="Pidgin"] $tag3
Hi-Angel

分配给工作空间是不同的。@tyjak的解决方案将在您打开特定工作区时启动应用程序。将应用程序分配给工作区将导致您每次打开应用程序时都将其移至工作区。
迈克,

5

我刚在~/.config/i3/config文件末尾使用它:

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox

根据 用于Firefox的Arch Linux i3示例:首先设置变量set $ws1 "Firefox",然后插入以下行for_window [class="Firefox"] move to workspace $ws1
Markus Weber

0

只需使用assign [class="<use your program name here e.g. - Firefox>"] $workspace<eg. 5>。它为我工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.