我已经在我的 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
换句话说,当我连接 HDMI 显示器时,我只需按Mod+M即可让 i3 检测到它,将其放置在主显示器的右侧,并将 5 个命名工作区 (6-10) 委托给它。
问题是这样的:在家里,我有另一台可以连接 VGA(显示器DP2
)的显示器。我xrandr
也可以运行上面的命令将此显示器放置在主显示器的右侧,但默认情况下我无法将工作区分配给此显示器,除非我代替我已经为我的 HDMI 显示器制定了规则。我希望无论我使用哪个显示器,这两个工作区都能以相同的方式工作,因此这不是一个选项。
长话短说有没有办法将工作区分配给两个不同的显示器,具体取决于连接的显示器(假设它们永远不会同时连接)?
答案1
您无法将多个输出分配给单个工作区,请参阅: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"
使用上面的脚本,您将把 6-10 个工作区移动到 DP2,并最终停留在工作区 10 上。
2019 年更新: 从 v4.16 开始实现多输出分配,请参见https://i3wm.org/docs/userguide.html#workspace_screen。现在你可以像这样使用它们:
workspace "6: S1" output HDMI2 VGA
然后将使用第一个可用的输出。
答案2
根据用户手册, 句法:
workspace 1 output eDP1
...
workspace 6 output HDMI2 VGA
应该管用。
或者,您可以在计算机上定义主要输出(如果未设置 ( xrandr --output <output> --primary
)),并使用以下语法:
workspace 1 output primary
...
workspace 6 output secondary