How can I hide/show the Wi-Fi menu item from the Terminal in OS X?
A big difficulty here is that the menuExtras
key in com.apple.systemuiserver
is an array that's reordered when you drag your Menu Extras around in the menu bar (and add and remove them).
In your case cited above, the Wi-Fi Menu Extra is the second item (which is array index 1 because these arrays are zero-indexed like C arrays), so you could remove it with PlistBuddy
, which isn't in your $PATH
because it's hidden in /usr/libexec
. You have to use PlistBuddy
because the defaults
command doesn't have syntax for specifying an array index. Then kill SystemUIServer to get it to reload:
/usr/libexec/PlistBuddy -c 'Delete :menuExtras:1' ~/Library/Preferences/com.apple.systemuiserver.plist
killall SystemUIServer
To add it back in, do something like this:
/usr/libexec/PlistBuddy -c 'Add :menuExtras:1 string "/System/Library/CoreServices/Menu Extras/AirPort.menu"' ~/Library/Preferences/com.apple.systemuiserver.plist
killall SystemUIServer
Note that this will break if you ever remove or add Menu Extras such that the Wi-Fi Menu Extra is not the second Menu Extra from the left in your menu bar. With a little more scripting work you could walk the menuExtras
array looking for the AirPort (Wi-Fi) menu extra, note its index, then feed that into your PlistBuddy command.