macのメニューバーの項目を表示・非表示するのがメンドクサ
VPN を接続したときだけメニューバーに表示してくれればいいのに、VPNを使わないときもVPNメニューがでてくるのは邪魔だよね。
defaults で制御できる。
メニューバーの項目は、defaults で設定値を取り出せるんです。
takuya@menubar$ defaults read com.apple.systemuiserver menuExtras ( "/System/Library/CoreServices/Menu Extras/Clock.menu", "/System/Library/CoreServices/Menu Extras/Battery.menu", "/System/Library/CoreServices/Menu Extras/TextInput.menu", "/System/Library/CoreServices/Menu Extras/User.menu", "/System/Library/CoreServices/Menu Extras/TimeMachine.menu", "/System/Library/CoreServices/Menu Extras/AirPort.menu", "/System/Library/CoreServices/Menu Extras/Volume.menu", "/System/Library/CoreServices/Menu Extras/Bluetooth.menu" )
これを使えば、書き込むことも可能でしょ。欲しい物だけ、トグル出来たら便利なので。
VPNメニューのボタンアイコンって、ダサいんですよ。
VPNメニューをトグルするサンプル
特に工夫もなく、思いつくままに書き加えたコードがこちら。
import ast import subprocess import argparse from pprint import pprint as pp def toggle_vpn_menu( enable=True ): vpn_menu = '/System/Library/CoreServices/Menu Extras/VPN.menu' ret = subprocess.check_output("defaults read com.apple.systemuiserver menuExtras", shell=True, universal_newlines=True) menus = ast.literal_eval(ret) vpn_menu_exists = any([vpn_menu in e for e in menus]) if vpn_menu_exists and enable is False : # disable ## menus = [x for x in menus if not vpn_menu in x] cmd = 'defaults write com.apple.systemuiserver menuExtras -array '.split() + menus subprocess.check_call(cmd) ## cmd = "killall SystemUIServer -HUP".split() subprocess.check_call(cmd) return if not vpn_menu_exists and enable is True: # enable menus = list(menus) menus.append(vpn_menu) cmd = 'defaults write com.apple.systemuiserver menuExtras -array '.split() + menus subprocess.check_call(cmd) ## cmd = "killall SystemUIServer -HUP".split() subprocess.check_call(cmd) def main(): parser = argparse.ArgumentParser(description=u'VPNメニューをオンオフする。') parser.add_argument('-e ', '--enable', action="store_true", help=u'有効化') parser.add_argument('-d ', '--disable', action="store_true", help=u'無効化') args = parser.parse_args() if args.enable: toggle_vpn_menu(True) else: toggle_vpn_menu(False) if __name__ == '__main__': main()
ちなみに、表示するだけなら
` '/System/Library/CoreServices/Menu Extras' `` にある該当メニューをダブルクリックして開くだけで、表示だけならできる。
"open '/System/Library/CoreServices/Menu Extras/VPN.menu'"