BluetoothのOn/OffをCLIでやろうとして、launchd/launchctl*1を普通使う*2と
# sudo launchctl unload /System/Library/LaunchDaemons/com.apple.bluetoothd.plist
/System/Library/LaunchDaemons/com.apple.bluetoothd.plist: Operation not permitted while System Integrity Protection is engaged
と怒られる
このSystem Integrity Protectionは、OS X El Capitan以降にルートユーザでも弄れない領域をつくったもの*3で /System下はこれに当たる
ちなみにその制限領域は
# ls -lO |grep restricted drwxr-xr-x@ 4 root wheel restricted 128 1 19 16:34 System drwxr-xr-x@ 38 root wheel restricted,hidden 1216 6 5 05:47 bin lrwxr-xr-x@ 1 root wheel restricted,hidden 11 5 25 17:59 etc -> private/etc drwxr-xr-x@ 63 root wheel restricted,hidden 2016 6 5 05:47 sbin lrwxr-xr-x@ 1 root wheel restricted,hidden 11 5 25 17:59 tmp -> private/tmp drwxr-xr-x@ 10 root wheel restricted,hidden 320 6 6 16:44 usr lrwxr-xr-x@ 1 root wheel restricted,hidden 11 5 25 18:00 var -> private/var
とかで見れる(restricted)
-----
そこでとりあえず、launchdは諦めて(設定ファイル(plist)を書換えてから)プロセス(bluetoothd)再起動で対応することにする
以下でplistファイルを眺めて
# plutil -p /Library/Preferences/com.apple.Bluetooth.plist
それらしいところを探すと,,,
# defaults read /Library/Preferences/com.apple.Bluetooth ControllerPowerState 1
らしいので,,
- OFF>ONなら
# sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1 # sudo killall -HUP bluetoothd
- ON>OFFなら
# sudo defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 0 # sudo killall -HUP bluetoothd
で対応できる
-----
ちなみに、Bluetooth機器への接続 は GUI scripting で(メニュー呼出したりして..)しかできなさそう,,,
その場合、呼び出すアプリを システム環境設定>セキュリティとプライバシー の プライバシー タブで制御許可しておいてから
AppleScriptだと...
tell application "System Events" tell process "SystemUIServer" tell (menu bar item 1 of menu bar 1 whose description contains "bluetooth") click tell (menu item "SomeBTName" of menu 1) —Bluetooth名を指定 click click menu item 1 of menu 1 —トグルでON/OFF end tell end tell end tell end tell
とかで、シェルとかシェルスクリプトで呼ぶなら適当に..
#/bin/bash /usr/bin/osascript <<- EOD tell application "System Events" tell process "SystemUIServer" tell (menu bar item 1 of menu bar 1 whose description contains "bluetooth") click tell (menu item "SomeBTName" of menu 1) —Bluetooth名を指定 click click menu item 1 of menu 1 —トグルでON/OFF end tell end tell end tell end tell EOD
とかでいける
——
Bluetoothの挙動がおかしくなったら…Shift+Option+Bluetoothメニューのデバックメニューでリセットを!
Ref.
*1
-launchd
https://ja.wikipedia.org/wiki/Launchd
https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/Introduction.html#//apple_ref/doc/uid/10000172i-SW1-SW1
*2 ちゃんとlaunchd/launchctlで起動しているのだけどね>Bluetooth # sudo launchctl list |grep blue - 0 com.apple.bluetoothReporter - 0 com.apple.diagnosticextensions.osx.bluetooth.helper 36077 -15 com.apple.bluetoothd - 0 com.apple.bluetoothaudiod
*3
-Terminalから見た「El Capitan」の変更点(1)
https://news.mynavi.jp/article/osxhack-142/
-El Capitanの「SIP」をもっと知る
https://news.mynavi.jp/article/osxhack-152/
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。