web-dev-qa-db-ja.com

i3wm:複数のモニターが単一のバインディングでワークスペースを切り替えるようにする方法

Unityでは、両方のモニターが常に同じワークスペースにあります。ワークスペース1から始めてct​​rl + alt + rightを押すと、モニターのbothが右側の新しいワークスペースに移動します。この動作は私のワークフローにとって重要です。

I3に切り替えたいのですが、2つのモニターが必ずしも同じワークスペースを指す必要はないようです。この動作を変更して、i3で$ mod + Shift + numを押すと、フォーカスのある画面だけでなく両方の画面が変更されるようにする方法はありますか?

3
johnny_boy

この「機能」をエミュレートすることは(ある程度)可能です(私にとって、i3のワークスペースの動作は主な機能の1つなので、すべてにまたがるワークスペースがないと作業できない場合を除いて、これを行うことはお勧めしません。 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のワークスペースボタンをクリックすると、1台のモニターのワークスペースのみが変更され、そのコンパニオンは変更されません。
  • 現在表示されていないワークスペース([criteria] focus)にウィンドウをフォーカスするコマンドは、他の出力にワークスペースがないフォーカスのみをフォーカスします
  • 1つのバインディングで2つのワークスペースを切り替えると、2番目のワークスペースは常にフォーカスされたワークスペースになります(上記の例では右のワークスペース)。
  • フォーカスを合わせてディスプレイの境界を越えて移動するには、場合によっては異なるコマンド/キーバインドが必要になることがあります。 (これは、同期されていないワークスペースの場合にも当てはまりますが、1つの大きなワークスペースを想定している場合は、より目立つ/混乱する可能性があります)

すべてではないにしても一部の警告は、IPCインターフェースを利用することで、たとえばコンパニオンワークスペースに自動的に切り替えるなどして、おそらく解決できます。


個人的には、少なくともハイブリッドアプローチを採用することをお勧めします。ワークフローに絶対に必要な同期ワークスペースを使用しますが、他の場所ではデフォルト(i3の場合)のシングルディスプレイアプローチを使用します。それ以外の場合、常に同期されたワークスペースが絶対に必要である/欲しい場合は、i3が探しているウィンドウマネージャーではない可能性があります。

7
Adaephon