🚀

TotalSpaces2をyabaiで代替する

2023/02/09に公開

2017年に公開された「macOSでディスプレイ1枚で作業する技術」という記事をご存知でしょうか。
複数枚の仮想デスクトップにそれぞれ1アプリケーションだけ割当てて、バチバチ切り替えることで快適に作業する方法が紹介されています。当時は大変お世話になりました。
https://qiita.com/saboyutaka/items/d6cfd2a2b60f1a374d60

この効率化ではトランジションを無効化するためのTotalSpaces2が肝なのですが、近年のmacOSに対応しておらず、数年悩まされておりました。

公式サイトを覗いてみるも動きは無し。
代替策を検討することにしました。

注意

環境

  • MacBookPro (13", M1, 2020)
  • macOS 12.3.1
  • yabai-v5.0.2

yabai

yabaiというヤバいWM(ウィンドウマネージャー)を利用します。yabaiはタイル型のWMとしても優秀ですが、トランジションを無効化する機能が付随しているのでそちらを目的にインストールします。

以下はyabaiの解説動画です。本記事ではWMとして利用しませんが参考までに。

https://www.youtube.com/watch?v=-9gJH4K3fEQ

SIP無効化

まずは以下を参考にSIPを無効化します。
https://github.com/koekeishiya/yabai/wiki/Disabling-System-Integrity-Protection

リカバリモードで起動し、ターミナルで以下コマンドを実行します。
(自分の環境ではbasesystemが無効なパラメータと言われたので以下コマンドで代用しました。)

csrutil disable --with kext --with dtrace

その後システムを再起動します。
M1デバイスでは再起動後に以下を実行してください。実行後はもう1度再起動したほうが吉です。

sudo nvram boot-args=-arm64e_preview_abi

インストール

wikiの説明に沿ってインストールします。
まずはbrewコマンド

brew install koekeishiya/formulae/yabai

yabaiコマンドをパスワード無しでsudo実行できるように設定

sudo visudo -f /private/etc/sudoers.d/yabai

それぞれ以下の実行結果で置換してください。
<user> → whoami
<hash> → shasum -a 256 $(which yabai)
<yabai> → which yabai

/private/etc/sudoers.d/yabai
<user> ALL=(root) NOPASSWD: sha256:<hash> <yabai> --load-sa

設定ファイルを設置します。(~/.config/yabai/yabaircでも良い)
今回はウィンドウマネージャーとしての機能には触れず最低限の設定とします。

~/.yabairc
#!/usr/bin/env sh
sudo yabai --load-sa
yabai -m signal --add event=dock_did_restart action="sudo yabai --load-sa"
yabai -m config layout                       float

最後に設定を反映させるためにyabaiを再起動します

brew services start yabai

これでyabaiが起動してトランジションが無効になっているはずです。
「macOSでディスプレイ1枚で作業する技術」の記事で設定済みの方であれば、Ctrl-2などのショートカットでデスクトップ切り替えが瞬時にできるようになります。

トラブルシューティング

yabaiコマンド実行時に以下エラーが出ることがありました。

yabai -m space --focus next
yabai-msg: failed to connect to socket..
yabai -m space --focus next
cannot focus space due to an error with the scripting-addition.

自分の場合これが効きました。(恐らく再起動の効果)

sudo nvram boot-args=-arm64e_preview_abi
# ここでシステム再起動
sudo yabai --uninstall-sa
sudo yabai --load-sa

https://github.com/koekeishiya/yabai/issues/1158#issuecomment-1060168503

参考

本来のウィンドウマネージャーとしての用途も便利なのでぜひ。
https://note.com/asahi_ictrad/n/ne0fa976cd083
https://qiita.com/hann-solo/items/0d8dbda76ee9f22c3ae4

Discussion