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

Gra*_*ent 75 startup window-manager i3

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

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

workspace 1; exec firefox; workspace 2; exec chromium; workspace 1
Run Code Online (Sandbox Code Playgroud)

jas*_*yan 80

根据Arch Wiki i3 页面,要在特定工作区自动启动应用程序,您可以使用i3-msg

exec --no-startup-id i3-msg 'workspace 1:Web; exec /usr/bin/firefox'
Run Code Online (Sandbox Code Playgroud)

  • 这只会为我打开 Workspace 1 中的所有内容。 (7认同)
  • 是的,像 `exec --no-startup-id i3-msg 'workspace 1; 这样的行 执行火狐;工作区2;执行 urxvt; 工作区 1'` 有效。但是,我发现在 `i3-msg` 上使用 `exec` 有点奇怪,这是一个用于执行 i3 命令的命令。为什么我不能直接写`workspace 1; 执行火狐;工作区2;执行 urxvt; 我的配置文件中的工作区 1`? (6认同)
  • 适用于大多数应用程序。但是`google-chrome-stable` 总是在我的设置中的最后一个工作区打开。例如,使用 [此配置](http://pastebin.com/i7d0LvLL),Chrome 在 htop 旁边的工作区 4 上打开。 (6认同)
  • 请注意,i3 现在提供 [布局保存/恢复](https://i3wm.org/docs/layout-saving.html) 功能,在大多数情况下无需调用 i3-msg。 (4认同)
  • @danijar 我想这是因为启动 Chrome 所需的时间超过了切换到工作区 4 并打开 urxvt 所需的时间。Google 很聪明,并且知道越早为您提供窗口越好,但是他们通过尽快将“成功”返回到执行终端/应用程序(例如 exec)然后在分叉进程中加载​​浏览器来做到这一点,这就是为什么exec 认为它是用 Chrome 完成的,它移到了你的配置中的下一行。添加 `&& sleep 3`,我敢打赌 Chrome 在工作区 3 中打开。根据扩展程序的数量,可能需要高达 5。 (3认同)
  • @Wieland 布局 [保存/恢复](https://i3wm.org/docs/layout-saving.html "保存/恢复") 与 [自动启动](https://i3wm.org/docs/userguide.html) 不同。 html#_automatically_starting_applications_on_i3_startup "自动启动"); 前者只处理为程序窗口设置 [swallow](https://i3wm.org/docs/layout-saving.html#EditingLayoutFiles "swallow") 陷阱,而后者根据 OP 的要求启动应用程序的实例。 (2认同)

小智 22

# 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
Run Code Online (Sandbox Code Playgroud)

注意:要应用配置,您可以使用:

i3-msg reload

  • @LuísdeSousa 某些程序无法像 Spotify 一样使用它。对于他们,您可能会编写类似于此 `for_window [class="Spotify"] move to workspace $ws10` 的内容,其中 `$ws10` 是您的工作区变量。 (6认同)
  • @LuísdeSousa 你`xprop | grep CLASS` 在终端中,您的鼠标指针变为十字准线,您单击要获取其类的程序并使用终端中出现的第二个变量。Chrome 的示例结果:`WM_CLASS(STRING) = "google-chrome", "Google-chrome"` (2认同)

小智 12

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

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

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

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

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

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

  • 您可以[通过分配工作区](https://i3wm.org/docs/userguide.html#assign_workspace) 轻松完成。例如,在每次启动时将 `pidgin` 移动到第三个工作区,我在配置 `assign [class="Pidgin"] $tag3` 中有。 (2认同)

rob*_*bru 8

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

for_window [class="Firefox"] move container to workspace 2
exec --no-startup-id firefox
Run Code Online (Sandbox Code Playgroud)