i3wm:如何使多个显示器在单个绑定中切换工作区

i3wm:如何使多个显示器在单个绑定中切换工作区

使用 Unity,我的两个显示器始终位于同一工作区。如果我从工作区 1 开始,然后按 ctrl+alt+right,两个都我的显示器转移到右侧的新工作区。这种行为对我的工作流程很重要。

我想切换到 i3,但看起来 2 个显示器并不总是需要指向同一个工作区。有没有办法改变这种行为,以便在 i3 中,当我按 $mod+Shift+num 时,两个屏幕都会发生变化,而不仅仅是具有焦点的屏幕发生变化?

答案1

可以(在某种程度上)模拟这个“功能”(对我来说,的工作区行为i3是主要功能之一,所以我并不建议这样做,除非你真的无法在没有跨越所有显示器的工作区的情况下工作,同时仍然想使用i3)。

您可以将多个命令绑定到快捷方式,这样您就可以同时在两个显示器上切换工作区。例如:

# Default modifier key
set $mod Mod4

# variables for left and right monitor 
# (assuming names DP-1 and DP-3 with DP-1 being left of DP-3)
set $monL DP-1
set $monR DP-3

# variables for workpacenames; 
set $ws1L 1:A
set $ws1R 11:A
set $ws2L 2:B
set $ws2R 12:B
set $ws3L 3:C
set $ws3R 13:C

# assign workspaces to specific outputs
workspace $ws1L output $monL
workspace $ws1R output $monR
workspace $ws2L output $monL
workspace $ws2R output $monR
workspace $ws3L output $monL
workspace $ws3R output $monR

# do not toggle automatically between the current and previous 
# workspace on repeated calls to `workspace NAME` (with identical NAME)
workspace_auto_back_and_forth no

# Toggle between both monitors 
# (focus output left wraps from the leftmost to the rightmost output)
bindsym $mod+Tab focus output left

# switch two workspaces at once (the need to be on different outputs)
bindsym $mod+1 workspace $ws1L, workspace $ws1R
bindsym $mod+2 workspace $ws2L, workspace $ws2R
bindsym $mod+3 workspace $ws3L, workspace $ws3R

# move a window to a specific workpace; 
# $mod+Shift for left side, $mod+Control for right side
bindsym $mod+Shift+1 move workspace $ws1L
bindsym $mod+Control+1 move workspace $ws1R
bindsym $mod+Shift+2 move workspace $ws2L
bindsym $mod+Control+2 move workspace $ws2R
bindsym $mod+Shift+3 move workspace $ws3L
bindsym $mod+Control+3 move workspace $ws3R

bar {
    # [...]
    # Do not show workspace numbers (optional)
    strip_workspace_numbers yes
}

这使用变量来保持工作区和输出名称一致。左右显示器的工作区名称需要不同。在本例中,我选择使用不同的数字,因为如果需要的话,它们可以被隐藏。通过这些设置Super+1将切换到1:A左侧显示器和11:A右侧显示器上的工作区。workspace_auto_back_and_forth应禁用以避免可能的混乱和不良行为。

注意事项:

  • 这仅适用于键盘快捷键,如果您单击 i3bar 上的工作区按钮,则只有一台显示器上的工作区会发生变化,而不是其同伴上的工作区。
  • 任何将窗口聚焦于当前不可见工作区 ( [criteria] focus) 的命令将仅聚焦该工作区,而不会聚焦于另一输出
  • 当使用一个绑定切换两个工作区时,第二个工作区将始终是焦点工作区(在上例中为右侧工作区)。
  • 在某些情况下,跨显示边界的聚焦和移动可能需要不同的命令/键绑定。 (虽然非同步工作空间也是这种情况,但当期望有一个大工作空间时,它可能会更加明显/干扰)

一些(如果不是全部)警告可能可以通过利用 IPC 接口来解决,例如自动切换到配套工作区。


就我个人而言,我建议至少采用一种混合方法:在工作流程绝对需要同步工作区的地方使用同步工作区,但i3在其他地方使用默认的(对于 )单一显示方法。否则,如果您绝对需要/想要一直同步工作区,那么这可能i3不是您正在寻找的窗口管理器。

相关内容