3

Я хочу иметь возможность скрыть и показать пункт меню 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"
    );
}

Скриншот настроек

4 ответа4

2

Большая трудность заключается в том, что клавиша menuExtras в com.apple.systemuiserver представляет собой массив, который переупорядочивается при перетаскивании дополнительных элементов меню в строке меню (а также добавлении и удалении их).

В вышеупомянутом случае Wi-Fi Menu Extra является вторым элементом (который является индексом массива 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.

0

Вы можете использовать способ по умолчанию в терминале, чтобы просто использовать это, и не забудьте использовать 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

Я написал скрипт, который циклически перебирает меню Extras и удаляет 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
0

Другая стратегия скрытия иконок для всех остальных пользователей. Зайдите в /System/Library/CoreServices/Menu Extras/ , вы увидите несколько файлов, которые заканчиваются меню. Нажмите на меню, которое вы хотите скрыть. Как только меню выбрано, используйте клавиатуру и удерживайте Command + I для меню «Информация».

В разделе «Общий доступ и разрешения:» щелкните поле «Плюс» (может потребоваться сначала разблокировать эту область) и добавьте свое имя пользователя в список, предоставив себе права на чтение и запись. Затем измените права доступа для всех пользователей на Нет доступа. Оставьте Систему и Колесо в покое. Закройте окно. Выйдите из системы и войдите как другой пользователь. Вы можете скрыть много меню.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .