yabai 用に SIP を無効化すると X クライアントが起動しない
以前に macOS 13.5 で yabai & skhd を使ってデスクトップを切り替える というメモを書きました。 macOS で作業スペースを切り替えるには例えば以下の方法があります。
方法 | 費用 | 作業スペース切り替え時のアニメーション | 備考 |
---|---|---|---|
Mission Control | 無料 | 無効化出来ない (多分) | OS 標準なので、追加インストールが不要 |
TotalSpaces3 | 有料 | 無効化出来る | 開発が停止している |
skhd と yabai | 無料 | 無効化出来る | - |
私は頻繁に作業スペースを切り替える為、「作業スペース切り替え時のアニメーションを無効化出来ることは必須」なのですが、アニメーションを無効化出来ない Mission Control は候補になりません。 過去、TotalSpaces は愛用していたのですが、開発が停止してしまっている為、同じく候補に挙げるのは難しい状況です。 その為、作業スペースの切り替えには shkd と yabai を利用しています。
macOS の SIP 機能¶
macOS には SIP (System Integrity Protection) と呼ばれるセキュリティ関連機能があります。 この機能は Mac のシステム整合性保護について で以下のように説明されています。
システム整合性保護は、Mac 上の保護されたファイルやフォルダを改ざんしようとする悪質なソフトウェアからデータを守るセキュリティ技術です。システム整合性保護では、ルートユーザアカウントに制約を課し、Mac オペレーティングシステムの保護されている部分に対してルートユーザが実行できる操作を制限します。
また @whitefox_105 さんの SIPをもっと深く知ってみよう! 〜SIPは一体何を保護しているのか〜 という記事で SIP について分かりやすく説明されていました (多謝!)。
SIP の有効 / 無効は macOS をリカバリーモードで起動した後、変更することが可能です。 SIP のレベルを「完全なセキュリティ」または「低セキュリティ」いずれの場合でも csrutil status
の確認結果では enabled
と表示されるようです (csrutil status
だけでは「完全」「低」の違いを確認出来ないようです)。
1 2 |
|
yabai で作業スペースを切り替えるには SIP の無効化が必要¶
しかし、yabai の機能を全て利用するには SIP の機能を少なくても一部、無効化する必要があります。 GitHub 上の yabai のページ には以下のように記載されています。
System Integrity Protection (Optional)¶
System Integrity Protection can be (partially) disabled for yabai to inject a scripting addition into Dock.app for controlling windows with functions that require elevated privileges. This enables control of the window server, which is the sole owner of all window connections, and enables additional features of yabai.
上記では SIP の無効化は任意 (Optional) と書かれています。 具体的な「SIP を無効化しなければ利用出来ない機能」は Disabling System Integrity Protection で説明されています。
The following features of yabai require System Integrity Protection to be (partially) disabled:
- focus/move/swap/create/destroy space
- remove window shadows
- enable window transparency
- enable window animations
- scratchpad windows
- control window layers (make windows appear topmost or on the desktop)
- sticky windows (make windows appear on all spaces on the display that contains the window)
- toggle picture-in-picture for any given window
私が yabai を利用する最大の目的は focus/move/swap/create/destroy space
(作業スペースの移動など) ですので、私のニーズではどうしても SIP を無効化する必要があります。
SIP が無効化されていると X クライアントが起動しない¶
SIP を無効化しても、大部分のアプリケーションでは眼に見える影響を感じることはありません。 しかし、X (旧 Twitter) のクライアントソフトウェアは SIP が無効化されていると以下のエラーが表示され、起動することができません…
macOS 15.x 系の場合、yabai の GitHub にある Disabling System Integrity Protection では以下のコマンドを実行して SIP の一部機能 (fs, debug, nvram) を無効化させる手順になっています。
csrutil enable --without fs --without debug --without nvram
この場合、SIP の状態を確認すると以下のように unknown (Custom Configuration)
表示になっています。
% csrutil status
System Integrity Protection status: unknown (Custom Configuration).
Configuration:
Apple Internal: disabled
Kext Signing: enabled
Filesystem Protections: disabled
Debugging Restrictions: disabled
DTrace Restrictions: enabled
NVRAM Protections: disabled
BaseSystem Verification: enabled
Boot-arg Restrictions: disabled
Kernel Integrity Protections: enabled
Authenticated Root Requirement: enabled
This is an unsupported configuration, likely to break in the future and leave your machine in an unknown state.
X の公式サイトで明言されているわけではありませんが、どうやら X のクライアントソフトウェアは SIP の状態が enabled
の場合のみ、起動するようです (SIP が「完全なセキュリティ」または「低セキュリティ」であれば起動しました)。
SIP 有効のまま、作業スペースを切り替えるのは難しそう…?¶
「SIP を有効化したまま、yabai の拡張機能 (作業スペースの切り替えなど) が出来ないか?」については以下の GitHub Issues で議論されているようです。
- Ability to switch spaces/desktop via yabai? #205
- cannot focus space due to an error with the scripting-addition #787
- Enable "yabai -m space --focus X" without Disabled SIP like TotalSpaces3 #1238
Workaround らしき書き込みもある? のですが、少なくても私の環境では動作させることが出来ませんでした。