web-dev-qa-db-ja.com

OS XのターミナルからWi-Fiメニュー項目を表示/非表示にするにはどうすればよいですか?

ターミナルからWi-Fiメニュー項目を非表示および表示できるようにしたい。 defaultsコマンドでこれを行うことはできますか?

com.Apple.systemuiserverに絞り込みました。次のようになります。

{
    "NSWindow Frame NoTimeLeft" = "471 437 475 163 0 0 1366 746 ";
    "__NSEnableTSMDocumentWindowLevel" = 1;
    menuExtras =     (
        "/System/Library/CoreServices/Menu Extras/Script Menu.menu",
        "/System/Library/CoreServices/Menu Extras/AirPort.menu",
        "/System/Library/CoreServices/Menu Extras/TimeMachine.menu",
        "/System/Library/CoreServices/Menu Extras/Battery.menu",
        "/System/Library/CoreServices/Menu Extras/Clock.menu"
    );
}

Preferences Screenshot

4
ggustafsson

ここでの大きな問題は、com.Apple.systemuiservermenuExtrasキーが、メニューバーでMenu Extrasをドラッグすると(そしてそれらを追加および削除すると)並べ替えられる配列であるということです。

上記のケースでは、Wi-Fi Menu Extraが2番目の項目(これらの配列はC配列のようにゼロインデックスであるため、配列インデックス1)であるため、PlistBuddyで削除できます。 $PATHに隠されているため、/usr/libexecにtを入れます。 PlistBuddyコマンドには配列インデックスを指定するための構文がないため、defaultsを使用する必要があります。次に、SystemUIServerを強制終了して、リロードします。

/usr/libexec/PlistBuddy -c 'Delete :menuExtras:1' ~/Library/Preferences/com.Apple.systemuiserver.plist
killall SystemUIServer

再度追加するには、次のようにします。

/usr/libexec/PlistBuddy -c 'Add :menuExtras:1 string "/System/Library/CoreServices/Menu Extras/AirPort.menu"' ~/Library/Preferences/com.Apple.systemuiserver.plist
killall SystemUIServer

Wi-Fi MenuExtraがメニューバーの左から2番目のMenuExtraにならないように、Menu Extraを削除または追加すると、これが機能しなくなることに注意してください。もう少しスクリプトを作成するだけで、menuExtras配列を歩いてAirPort(Wi-Fi)メニューを探し、そのインデックスをメモして、それをPlistBuddyコマンドに入力できます。

3
Spiff

ターミナルでデフォルトの方法を使用してこれを使用することができ、killall SystemUIServerを使用するか、再起動/ログアウトしてログインすることを忘れないでください。

# Menu bar: hide the Time Machine, Volume, User and AirPort (WiFi) icons
for domain in ~/Library/Preferences/ByHost/com.Apple.systemuiserver.*; do
defaults write "${domain}" dontAutoLoad -array \
    "/System/Library/CoreServices/Menu Extras/TimeMachine.menu" \
    "/System/Library/CoreServices/Menu Extras/Volume.menu" \
    "/System/Library/CoreServices/Menu Extras/User.menu" \
    "/System/Library/CoreServices/Menu Extras/AirPort.menu"
done
defaults write com.Apple.systemuiserver menuExtras -array \
    "/System/Library/CoreServices/Menu Extras/Bluetooth.menu" \
    "/System/Library/CoreServices/Menu Extras/Battery.menu" \
    "/System/Library/CoreServices/Menu Extras/Clock.menu"
killall SystemUIServer

したがって、dontAutoLoad配列に非表示にしたいものと、menuExtras配列に表示されないものを移動するだけです。

0
Bojoer

MenuExtrasを循環してWiFiを削除するスクリプトを作成しました。 Menu Extrasのメニュー項目の名前がわかっている場合は、他のメニュー項目に合わせて簡単に変更できます。スクリプトの最後にkillSystemUIServerを配置しませんでした。瞬時に満足したい場合は、それをスクリプトの最後の行として追加できます。ログアウト/ログインもおそらく同様に機能するはずです。 sedラインも少しクリーンアップできると確信しています。これは10.8.4でテストされましたが、少なくとも10.6までさかのぼって機能しないはずの理由はありません。

#!/bin/sh

# Removes the Wifi menu from the menubar.
# This setting is set on a per-user basis, so needs to be run as the user
# Will require a logout. A 'kill SystemUIServer' might work?

OIFS="$IFS"

menutemp=$(defaults read com.Apple.systemuiserver menuExtras)
menutemp2=$(echo $menutemp | sed 's/( //')
menutemp3=$(echo $menutemp2 | sed 's/ )//')

IFS=','
read -a menuitems <<< "$menutemp3"
IFS="$OIFS"

for (( i = 0 ; i < ${#menuitems[@]} ; i++ ))
do
    if [ "${menuitems[$i]}" = '"/System/Library/CoreServices/Menu Extras/AirPort.menu"' ]
    then
        /usr/libexec/PlistBuddy -c "Delete :menuExtras:$i" ~/Library/Preferences/com.Apple.systemuiserver.plist
    fi
done
0
Hank

他のすべてのユーザーのアイコンを非表示にするための別の戦略。 /System/Library/CoreServices/Menu Extras/に移動すると、メニューで終わるファイルがいくつか表示されます。非表示にするメニューをクリックします。メニューを選択したら、キーボードを使用して押し続けます CommandI 情報メニューの場合。

[共有とアクセス許可:]で、[プラス]ボックスをクリックし(最初にこの領域のロックを解除する必要がある場合があります)、ユーザー名をリストに追加して、読み取りと書き込みの特権を付与します。次に、Everyoneの権限を[アクセスなし]に変更します。システムとホイールはそのままにしておきます。窓を閉めて。別のユーザーとしてログアウトしてログインします。多くのメニューを非表示にすることができます。

0
Roberto

この一連のコマンドを使用して、High Sierra10.13.6で動作させることができました。 これによりすべてのメニュー項目が削除されます thoですが、これが必要です。

defaults write com.Apple.systemuiserver "NSStatusItem Visible com.Apple.menuextra.airport" 0
defaults delete com.Apple.systemuiserver menuExtras
defaults -currentHost write com.Apple.systemuiserver dontAutoLoad -array "/System/Library/CoreServices/Menu Extras/AirPort.menu"
killall SystemUIServer
0
Arko