我希望能够从终端隐藏和显示 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"
);
}
答案1
这里的一个大困难是,当您在菜单栏中拖动菜单附加功能(以及添加和删除它们)时,menuExtras
输入的键是一个重新排序的数组。com.apple.systemuiserver
在上述情况下,Wi-Fi 菜单附加项是第二项(它是数组索引 1,因为这些数组像 C 数组一样是零索引的),因此您可以使用 删除它PlistBuddy
,但它不在您的 中,$PATH
因为它隐藏在 中/usr/libexec
。您必须使用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 菜单附加项不是菜单栏左侧第二个菜单附加项,则此操作将失败。只需编写一些脚本,您就可以遍历数组以menuExtras
查找 AirPort (Wi-Fi) 菜单附加项,记下其索引,然后将其输入到您的 PlistBuddy 命令中。
答案2
我编写了一个脚本,循环浏览菜单附加项并删除 WiFi。如果您知道菜单附加项中的菜单项名称,则可以轻松地将其修改为任何其他菜单项。我没有在脚本末尾放置 kill SystemUIServer。如果您想要立即满意,可以将其添加为脚本的最后一行。注销/登录可能也应该有效。我相信 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
答案3
为所有其他用户隐藏图标的不同策略。转到/System/Library/CoreServices/Menu Extras/
,您将看到几个以菜单结尾的文件。单击要隐藏的菜单。选择菜单后,使用键盘并按住Command+I以显示信息菜单。
在共享和权限:下,单击加号框(您可能需要先解锁此区域)并将您的用户名添加到列表中,授予您自己读写权限。然后将所有人的权限更改为无访问权限。不要管系统和 Wheel。关闭窗口。注销并以其他用户身份登录。您可以隐藏许多菜单。
答案4
使用这组命令设法使其在 High Sierra 10.13.6 上运行。这将删除所有菜单项但这正是我需要的。
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