将 Google Chrome 标签绑定到 i3-wm 中的特定工作区

将 Google Chrome 标签绑定到 i3-wm 中的特定工作区

我知道在 i3-wm 中可以将某些应用程序绑定到某些工作区,将某些工作区绑定到某些显示器(我有双显示器设置)。是否也可以将特定的 google-chrome 选项卡绑定到某些工作区/显示器?对于那些想知道我如何进行应用程序工作区或工作区显示绑定的人,以下是我的 i3config 的一个片段:

# binding workspaces to displays(run xrandr --query to get display names)
workspace $ws1 output "eDP-1" workspace_layout tabbed
workspace $ws2 output "HDMI-1" workspace_layout tabbed
workspace $ws3 output "HDMI-1" workspace_layout tabbed
workspace $ws4 output "eDP-1" workspace_layout tabbed
workspace $ws5 output "HDMI-1" workspace_layout tabbed

# Bind App to workspaces
# Check class by using xprop command
assign [class="Google-chrome"] $ws1
assign [class="Nemo"] $ws2
assign [class="eDEX-UI"] $ws2
assign [class="Vlc"] $ws5
assign [class="crx_eppojlglocelodeimnohnlnionkobfln"] $ws5

答案1

可以使用应用程序的窗口类和实例将其分配到特定工作区。例如,它将chromium是:

WM_CLASS(STRING) = "chromium-browser", "Chromium-browser"

但问题是每个 Chromium 选项卡都有相同的窗口类。您只能为整个运行实例更改它:

$ chromium-browser --class='new-class'

因此您无法将单独的选项卡分配给不同的工作区。唯一的解决方法是在应用模式下使用 Chromium,通过从命令行手动启动每个选项卡:

$ chromium-browser --app='https://www.linux.com/'

这样,每个选项卡将被创建为不同的实例:

WM_CLASS(STRING) = "www.linux.com", "Chromium-browser"

答案2

可以通过其 title 属性来绑定特定的 Chrome 窗口:

  1. 在您的 i3 配置中,启动 Chrome 并为其提供“应用程序”参数。

exec google-chrome --app="https://app.excalidraw.com/"

  1. xprop在终端中使用以获取WM_NAME(UTF8_STRING)值。我相信这是启动应用程序时 Chrome 窗口顶部显示为标题的值。对于 excalidraw,该值为Excalidraw Plus — Workspace dashboard
  2. 在您的 i3 配置中,使用该值将窗口分配给这样的工作区:

for_window [title="Excalidraw Plus — Workspace dashboard"] move to workspace $ws3

答案3

对我有用的是在将选项卡(实例)绑定到工作区时使用类和实例(使用 xprop 时 WM-CLASS 中逗号前的字符串)。

以 Netflix 为例,我首先访问 Netflix,然后单击 google-chrome 地址栏旁边的 3 个点,然后单击更多工具>创建快捷方式。这将为您桌面上的 URL 创建 google-chrome 实例的快捷方式。

您可以使用任何文件管理器检查 dektop 快捷方式的属性,然后复制命令部分的内容并将其粘贴到 i3config 中 exec 后的键绑定行中,如下所示:

bindsym $mod+n exec /opt/google/chrome/google-chrome --profile-directory=Default --app-id=eppojlglocelodeimnohnlnionkobfln

使用绑定来调用实例,在终端中运行 xprop 并单击实例窗口以提取详细信息。我返回的是:

WM_CLASS(STRING) = "crx_eppojlglocelodeimnohnlnionkobfln", "Google-chrome"

然后只需使用逗号前的字符串作为实例,使用逗号后的字符串作为类,如下所示:

assign [class="Google-chrome" instance = "crx_eppojlglocelodeimnohnlnionkobfln" title = "Netflix"] $ws5

希望这能帮助那些和我一样陷入困境的人。:)

答案4

在你的 i3 配置中:

# google voice
exec google-chrome-stable --app="https://voice.google.com"
assign [instance="voice.google.com"] $ws2

其中您的实例是使用时在“CLASS”中返回的第一个字符串xprop

...
WM_CLASS(STRING) = "voice.google.com", "Google-crome"
..

相关内容