TotalSpaces2をyabaiで代替する
2017年に公開された「macOSでディスプレイ1枚で作業する技術」という記事をご存知でしょうか。
複数枚の仮想デスクトップにそれぞれ1アプリケーションだけ割当てて、バチバチ切り替えることで快適に作業する方法が紹介されています。当時は大変お世話になりました。
この効率化ではトランジションを無効化するためのTotalSpaces2が肝なのですが、近年のmacOSに対応しておらず、数年悩まされておりました。
公式サイトを覗いてみるも動きは無し。
代替策を検討することにしました。
注意
環境
- MacBookPro (13", M1, 2020)
- macOS 12.3.1
- yabai-v5.0.2
yabai
yabaiというヤバいWM(ウィンドウマネージャー)を利用します。yabaiはタイル型のWMとしても優秀ですが、トランジションを無効化する機能が付随しているのでそちらを目的にインストールします。
以下はyabaiの解説動画です。本記事ではWMとして利用しませんが参考までに。
SIP無効化
まずは以下を参考にSIPを無効化します。
リカバリモードで起動し、ターミナルで以下コマンドを実行します。
(自分の環境では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
<user> ALL=(root) NOPASSWD: sha256:<hash> <yabai> --load-sa
設定ファイルを設置します。(~/.config/yabai/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
参考
本来のウィンドウマネージャーとしての用途も便利なのでぜひ。
Discussion