将 i3 上的工作区分配给多个显示器

Frx*_*rem 20 workspaces i3

我已经在我的 Linux 笔记本电脑上使用 i3。我通常只使用笔记本电脑的内置显示器(显示器eDP1),但在工作时,我倾向于将辅助显示器连接到计算机的 HDMI 端口(显示器HDMI2)。到目前为止,我已经通过将这些命令添加到我的 i3 配置文件来使这项工作正常进行:

# use workspaces on different monitors
workspace "1: P1" output eDP1
workspace "2: P2" output eDP1
workspace "3: P3" output eDP1
workspace "4: P4" output eDP1
workspace "5: P5" output eDP1
workspace "6: S1" output HDMI2 
workspace "7: S2" output HDMI2
workspace "8: S3" output HDMI2
workspace "9: S4" output HDMI2
workspace "10: S5" output HDMI2

# add HDMI monitor when connected
exec --no-startup-id xrandr --output HDMI2 --right-of eDP1
bindsym $mod+m exec --no-startup-id xrandr --output HDMI2 --auto --right-of eDP1
Run Code Online (Sandbox Code Playgroud)

换句话说,当我连接我的 HDMI 显示器时,我只需按Mod+M让 i3 检测它,将它放在我的主显示器的右侧,然后将 5 个命名工作区 (6-10) 委派给它。

问题是:在家里,我有另一台可以与 VGA(显示器DP2)连接的显示器。我也可以运行xrandr上面的命令将此显示器放置在我的主显示器的右侧,但我无法默认将工作区分配给该显示器,除非我替换我的 HDMI 显示器已有的规则。无论我使用哪种显示器,我都希望这两个工作区都能正常工作,因此这不是一个选项。

TL;DR有没有办法根据连接的显示器将工作区分配给两个不同的显示器(假设它们永远不会同时连接)?

anl*_*lar 28

您不能将多个输出分配给单个工作区,请参阅:https : //github.com/i3/i3/issues/555

所以唯一的方法是动态更改 i3 配置。您可以将热键脚本分配给将做两件事的热键脚本:使用以下命令更改监视器输出xrandr和移动工作区i3-msg

xrandr --output DP2 --auto --right-of eDP1
i3-msg "workspace 6, move workspace to output DP2"
...
i3-msg "workspace 10, move workspace to output DP2"
Run Code Online (Sandbox Code Playgroud)

使用上面的脚本,您将 6-10 个工作区移动到 DP2 并最终留在工作区 10。

2019 年更新: 从 v4.16 开始实施多输出分配,请参阅https://i3wm.org/docs/userguide.html#workspace_screen。现在你可以这样使用它们:

workspace "6: S1" output HDMI2 VGA
Run Code Online (Sandbox Code Playgroud)

然后将使用第一个可用输出。


cas*_*uve 5

根据用户指南,语法:

workspace 1 output eDP1
...
workspace 6 output HDMI2 VGA
Run Code Online (Sandbox Code Playgroud)

应该管用。

或者您可以在您的机器上定义主要输出,如果没有设置 ( xrandr --output <output> --primary),并使用以下语法:

workspace 1 output primary
...
workspace 6 output secondary
Run Code Online (Sandbox Code Playgroud)