概略
macでPlaystation4のコントローラーを認識させたくて、ソフトウェアをインストール。
ソフトウェアが期待どおりの動作とならなかったので、アンインストールしようとしました。
残存した "/Library/SystemExtensions" にあるファイルを削除するのに手間取ったので、簡単な手順をまとめておきます。
環境
- 2020 M1 Macbook Air (Big Sur)
- USB Overdrive(5.1, 4.0.1)
問題となった経緯
macOSにPS4のコントローラーを認識させたいと思って、USB Overdriveというソフトウェアをインストール。
Big Sur向けなのでver5.1をインストールした -> しかし、動作せず。
ネットを見ると、古いバージョンなら動作するとのこと。
古いバージョンはCatalina向け。なんとかなるかな?と、とりあえずインストールを試みたが、インストールが途中で失敗。
途中で失敗しているため、アンインストールのスクリプトなどもインストールされず、OSの中に色々とゴミが残るという状態になってしまった。
システム環境設定の中で見つけたUSB Overdriveのアイコンは右クリックで削除に成功。
他にインストールされたファイルは、/Library/SystemExtensionsのディレクトリにあった。(findコマンドで検索した)
ただし、削除しようとしても、PermissionErrorで消せず。sudoで実施してもエラーになった。
解決方法
SystemExtensionsで確認
専用のコマンドで確認すると、たしかにUSB Overdriveが残っています。
systemextensionsctl list
アンインストールのコマンドを実行。
systemextensionsctl uninstall <teamId> <bundleId>
できません。sudoで実行してもNG。
これ、SIP(System Integrity Protection)というmacOSのセキュリティが原因。
SIPの無効化
SIPのステータスを確認。
% csrutil status
System Integrity Protection status: enabled.
たしかに有効になっている。
これを無効化するには、macOSのリカバリーモードでOSを立ち上げる必要がある。
M1 macだとcmd+Rによるリカバリーモードは使えないので、以下の方法で立ち上げる。
- システム終了
- 起動時に電源ボタンを長押し
(10秒以上。途中「起動オプションを表示するには押し続けてください」と表示されていればOK。) - 復旧ユーティリティの表示 -> ユーザーを選択 -> 次へ -> パスワード入力
ユーティリティ -> ターミナル を選択
参考: 下のページのターミナル部分 support.apple.comSIPを無効化するコマンドを入力
sh csrutil disable
起動ディスク -> システム終了 を選択
SystemExtensions アンインストール
SIPが無効になっていることを確認。
% csrutil status
System Integrity Protection status: disabled.
アンインストールのコマンドを実行。
systemextensionsctl uninstall <teamId> <bundleId>
今度は成功。
SIPの有効化
SIPの無効化とほぼ同じ手順を実施して、csrutilのコマンドだけdisable -> enable に変更。
csrutil enable
再起動後
SIPのステータスを確認。
% csrutil status
System Integrity Protection status: enabled.
enabledに戻っていればOK。
まとめ
USB Overdriveの残りファイルには、.kextというものがあった。
kextとは、カーネル拡張(Kernel EXTension)のこと。
カーネル絡みだと、不用意な削除をさせないように扱いもデリケートになるのもわかるような。
Intel/M1との情報が錯綜していることもあり、解決が少し難航した。未来の自分 OR 他の誰かのためになるように手順をまとめておいた。