看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

提到生存在 macOS 菜單欄裡面的小工具,我們就不得不提到 iStat Menu 這一應用。強調「系統監控」的 iStat Menu,其華麗的外表之下真正的工作原理是:

每隔一段時間,執行一個程序,獲取監控對象的各項數據,並將結果展示給我們看。查看本機 CPU、內存等使用率,檢測上傳、下載速度等就是這一原理,查看天氣、日程、月相、待辦事項等同樣也是這一原理。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

擁有豐富監控項目與樣式的 macOS 菜單欄小工具界標杆:iStat Menu

既然都是「執行程序、獲取數據」,那我們能不能直接不借助於付費的 iStat Menu,用開源的解決方案來實現自己的 macOS 菜單欄小工具呢?當然可以,BitBar 正是為此而生。開源免費的 BitBar,是專門為 macOS 菜單欄準備,能夠將任何腳本、程序、代碼的運行結果輸出到菜單欄上面的應用。幾乎不需要任何動手能力,我們就能夠用 BitBar 大致復刻 iStat Menu 的功能。雖然可能做不到同樣精緻的界面,但單就功能上的實現,BitBar 還是值得嘗試的。

安裝運行

BitBar 開源在 GitHub - matryer/bitbar,我們可以直接到其 Release 頁面 下載安裝 macOS 版本的 BitBar。使用 Homebrew 的同學當然可以用下面的命令安裝 BitBar:

<code>brew cask install bitbar/<code>

安裝成功之後,我們首次運行 BitBar 時,BitBar 會要求我們指定一個「插件目錄」,這裡我們需要記住這一目錄的位置,之後會頻繁用到。在正式開始安裝插件、編寫腳本之前,我們先來聊聊 BitBar 在華麗的外觀背後,是如何具體運作的。

工作原理

縱觀 BitBar 的工作原理,我們可以發現:實際上 BitBar 就是一個為監控系統執行的程序提供一個方便的輸出環境。前面提到的 BitBar 的「插件」安裝目錄(文件夾),其實際上就是所有 BitBar 需要執行的程序的本體所在。在實際工作中,BitBar 正是從這一目錄下尋找可執行的程序,定時執行相應的程序,並根據程序輸出將結果顯示在我們 macOS 的菜單欄之中。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

BitBar 底層工作原理

我們用一個簡單的例子來解釋這一相對抽象的過程 —— 顯示當前系統日期

日期在 macOS 上可以用簡單的命令 date 來獲取,打開終端(Terminal.app),輸入 date 並回車,即可得到當前的系統時間、星期、日期、時區等等信息。這裡,命令 date 就是我們「系統監控」的程序本體,其類似 Mon Feb 3 00:54:14 CST 2020 的輸出即為我們 BitBar 接收的腳本輸出,最終 BitBar 即會將這一結果顯示於 macOS 菜單欄上面,作為查看日期的「小工具」。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

使用命令 date 獲取當前系統日期

當然,一個命令遠遠不夠,我們需要將命令放在一個文件中,定義其運行方法,從而告訴 BitBar:每隔一段時間,用「這個方法」執行「這個文件」,就可以得到當前系統日期啦。我們在剛剛給 BitBar 指定的「插件」安裝目錄下創建一個名稱為 date.1s.sh 的文件。這裡,識別文件名就是 BitBar 設置程序運行方式的第一步。文件名中:

  • date 即為文件的寬泛名稱,程序的標識符
  • 1s 表示每隔 1s 執行一次本程序
  • sh 為文件後綴,這裡表示此程序為一個 Shell 腳本程序,可以用 Bash 來運行

各個項目之間用 . 拼接起來,成為一個以 {文件名}.{執行頻率}.{擴展名} 為格式的完整文件名。我們打開這一文件,向其中填寫如下的內容:

<code>#!/bin/bashdate/<code>

之後,如果我們保存文件,並重新加載 BitBar,那麼不出意外我們就可以看到 BitBar 的一個菜單欄項目開始生效:日期、星期、時間正確顯示並每隔 1s 刷新一次。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

BitBar 每秒執行一次命令獲取當前時間

我們看一下剛剛輸入文件的內容:文件分為兩行,第一行 #!/bin/bash 在程序界被稱為 Shebang —— 表示程序執行方式,這裡即為用 /bin/bash 的命令執行程序;第二行 date 即為執行程序輸出結果的「命令」—— 獲取當前日期,就在這裡我們會獲取到當前系統時間的輸出,並將結果傳遞給 BitBar 顯示於菜單欄上。我們的第一個最為簡單的 BitBar 小插件就算完成啦。✌️

當然,BitBar 可實現的功能比上面這一例子要多得多,我們不僅可以簡單繪製用戶界面、提供自定義執行腳本、實現網絡請求,還可以直接下載安裝其他用戶編寫完好的 BitBar 插件。BitBar 的插件庫非常豐富,我們直接訪問其 官方網站,在側邊欄即可選擇不同的插件分類,我們找到選好的插件,點擊 + Add to BitBar 即可直接安裝到我們本機的 BitBar,之後經過一些調整(比如安裝插件的依賴、填寫必要的 API 參數等),我們刷新 BitBar 即可直接使用相應的插件。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

在 BitBar 官網下載安裝插件

用插件全面監控系統,還有更多功能

除了實現類似 iStat Menu 的系統監控功能,BitBar 還有像匯率換算、查看任務等許多實用插件。接下來就介紹幾款好用的插件給你。

武漢疫情監控

在今年武漢新型肺炎爆發後,有國內開發者通過新浪接口提供的國家衛健委統計的全國數據,開發了 BitBar 的疫情監控插件。插件默認會顯示國內患病人數最多五個省份的數據,數據每十秒刷新一次,你也可以根據需求自行修改刷新時間等參數。

你可以在插件的 GitHub 頁面 查看更多細節,並下載插件。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

檢測上傳、下載速度

最基本也最簡單的系統監控就是對網絡速度、帶寬的監測。BitBar 插件庫中與網絡相關的插件有很多,我們可以前往 BitBar Plugins | Network 查看。這裡我選擇使用 Bandwidth by Ant Cosentino,一個 Shell 腳本實現的網速監控。我們不需要進行特殊的改動,直接安裝即可。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

監控上傳、下載速度

重新加載腳本之後,我們就可以看到 macOS 菜單欄上顯示了我們的上傳、下載網速狀況,同時,點擊菜單項,我們也可以看到本機各個網絡端口的具體帶寬。

監控 CPU 使用率

監控系統信息怎麼可能少了 CPU 使用率的監控,我們可以使用 CPU Usage Graph 來在菜單欄實現一個監視 CPU 使用率,並顯示為小圖表的工具。這一插件也不需要過多配置,直接安裝即可。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

使用 CPU Usage Graph 檢測當前系統 CPU 使用率

另外,這一腳本還可以實現監控當前使用 CPU 最多的五個進程,方便我們掌控當前消耗 CPU 最多的軟件,好能快速打開 Activity Monitor,及時殺掉資源消耗過高的程序。

監控電池電量、使用循環

我們 macOS 原有的「電池」顯示控件只有電量百分比、能耗等的顯示,用 BitBar 我們還可以直接將電池的「循環次數」進行顯示,並用不同的顏色表示電池的使用狀況。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

Colorful Battery Indicator:用不同的顏色顯示電池信息

這裡我們選擇 Colorful Battery Indicator 這一插件,直接安裝即可。運行插件之後,我們可以看到 BitBar 控件成功加載,可以直接顯示電池的電量與循環次數等信息,比 macOS 原生電量控件的功能多出不少。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

不僅能顯示電池電量,還可以估算剩餘時間、顯示循環次數

監測天氣信息

最後,我們來實現相對複雜的天氣監控。BitBar 插件庫的天氣分類非常豐富,不僅擁有普通天氣、溫度的插件,還能直接檢測 AQI 等空氣指標。我選擇使用 Weather by Daniel Seripap,點擊安裝即可。這一腳本用 Python 編寫,請求的是國外知名天氣信息 Dark Sky 的 API。另外,腳本也使用了 OpenCage 的全球經緯度 API,輔助我們將地理位置與經度緯度進行轉換。為了讓腳本更方便運行,我們需要:

  • 去 Dark Sky 申請一個私有 API Key:前往 Dark Sky API,點擊 Try for free 註冊賬號,並按照說明申請 API Key,之後我們複製 Dark Sky 為我們生成的 Secret Key 留作備用。為了方便稱呼,我們用 {DARK_SKY_API_KEY} 代指這一 API Key
看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

在 Dark Sky 申請 API Key


  • 去 OpenCage 申請一個私有 API Key:前往 OpenCage API,按照步驟註冊賬戶並進入 Dashboard,沒有問題的話下方 API Key 處即為我們需要的密鑰。我們同樣複製這一 API Key 留作備用。為了方便稱呼,我們用 {GEO_API_KEY} 代指這一 API Key
看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

在 OpenCage 申請一個私有 API Key

接下來,我們進入 BitBar 插件目錄,打開 weather.15m.py,按照下面的步驟依次將相應的內容進行修改,讓腳本使用我們自己的 API Key 進行數據請求:

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

修改腳本的 API Key,替換使用我們自己的秘鑰進行請求

  • 將 api_key 一行後面單引號裡面的內容替換為我們 Dark Sky 的 API Key:{DARK_SKY_API_KEY}
  • 將 geo_api_key 一行後面單引號裡的內容替換為我們 OpenCage 的 API Key:{GEO_API_KEY}
  • 將下方 units 後面單引號裡添加 si:表示我們使用「公制單位」(也就是攝氏度)

這樣設置下來我們就應該可以直接運行腳本了。另外,如果使用之後發現腳本定位速度慢,或者因為是根據 IP 進行地理位置確定導致位置不準確,我們也可以直接手動定義目標城市與其經緯度。腳本文件中定義地理位置的內容位於:

  • manual_city:城市名稱
  • manual_latlng:城市所在經緯度

我們可以訪問 OpenCage Demo 網站,在下方點擊定位獲取當前所在位置的經緯度與城市名稱,按照上方註釋給出的格式依次填寫即可。之後,我們重新加載 BitBar,不出意外的話我們就可以正確查看當地天氣情況了。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

Currency Rates:貨幣匯率

Currency Rates 採用 Python 編寫,它可以實時查詢貨幣匯率,然後通過 BitBar 顯示在菜單欄中。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

不過需要注意的是,Currency Rates 的匯率規則是 1 美元兌各幣種的匯率,而且默認在菜單欄顯示的匯率是 1 美元 USD 兌印度盧比 INR。當然修改成人民幣也很簡單。我們只要使用「文本編輯」打開插件代碼,把 if nValue1 == "INR" 修改為 if nValue1 == "CNY" 即可。

如果你覺得 Currency Rates 顯示了太多無關緊要的其他幣種,可以試試 Currency Tracker,它只顯示一種貨幣的兌換匯率。

Death Timer:距死亡還剩多少天

很多應用都可以幫你預計死亡還剩多少天,Death Timer 把它帶到了 Mac 菜單欄上,不過要使用它,還是得先修改下它的代碼。

用「文本編輯」打開插件代碼,修改 death = datetime(2081, 5,31, 12, 0, 0)和 birth = datetime(1994, 5,31, 12, 0, 0) 中修改你的預測死亡時間和出生時間,之後刷新即可 。如果你不知道預計的死亡時間,開發者建議你去 這個網站 看看。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

另一個插件 Life Percentage 和 Death Timer,它顯示的是人生百分比。Your time on earth 顯示的是你出生多少天了,也比較類似。

Moon Phase:顯示月相

顯示月相 對於一般人來說可能沒有什麼用,但是它的月相是用 Emoji 顯示的,可以給死板的菜單欄增添一些樂趣。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

另一個 Show emoji 插件更粗暴,它會直接在菜單欄隨機顯示三個 Emoji。

Smile:適用於 Slack 的 Emoji 代碼

Smile 不是在菜單欄顯示微笑表情,它的作用有點特殊。我們知道在 Slack 或者 Github 上輸入 Emoji 只能點選。Smile 的作用是把 Emoji 圖標自動轉換為代碼,並且拷貝到剪貼板,在 Slack 或 GitHub 裡粘貼就行了。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

Things 3 Today:在菜單欄顯示 Things 任務

如果你在用 Things,Things 3 Today 可以在菜單欄顯示你今天的任務。它還能直接創建任務、清空廢紙簍等等。不過這個插件對中文系統不太支持,你可以把下面代碼中的Today 改為 今天:

<code>with n from 1 to count of to dos of list "Today"set toDo to item n of to dos of list "Today"/<code>
看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

和 Things 有關的插件還有 Things Doing Now和 Things - View Inbox。

iTunes Now Playing:正在播放

iTunes Now Playing 可以抓取 iTunes 目前正在播放的音樂,在菜單欄顯示歌曲名和藝人,點擊還能進行切歌和暫停操作,還能顯示專輯封面,視覺上比較不錯。不過這個插件對中文系統不友好,中文系統用戶需要把代碼中的 iTunes 改為 音樂 才行。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

BitBar 中還有 Spotify Now Playing 用來顯示 Spotify 的正在播放歌曲。還有其他的操控 iTunes 和 Spotify 播放控制的插件,不再列舉。

Battery Dot:顯示 Mac、鍵盤和觸控板的電量

Battery Dot 可以在菜單欄顯示 MacBook、Apple 的鍵盤和觸控板的電量。顯示 Mac 的電量不足為奇,但是能顯示鍵盤和觸控板就很方便了。工作的時候鍵盤和觸控板沒電那種抓狂的感覺令人印象深刻,有 Battery Dot 應該會好很多。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

Date Picker:提供多種格式的日期樣式

辦公寫文件時,經常需要在落款處留日期,每次手動輸入會比較麻煩。Date Picker 在菜單欄顯示了多種樣式的日期格式,點擊就能拷貝到剪貼板,在寫作時就能複製了,非常方便。不過它的默認格式是 2020-02-03,沒有包含中文「年月日」的樣式。

看天氣、查匯率……讓你的 Mac 菜單欄變成「萬能工具箱」

總結

BitBar 的設計理念實際上非常易懂,這一簡單的工作原理為我們提供了一種開源免費的解決方案,讓我們能夠更有效地利用 macOS 菜單欄來做一些有用、有趣的事情。BitBar 支持運行的程序非常豐富,Bash、Python、Lua、Ruby、JavaScript 等等都有支持。理論上,只要你在 Mac 上面能夠運行的腳本,BitBar 就能將其輸出顯示於 macOS 菜單欄上面。

BitBar 腳本庫的生態同樣豐富,不僅提供了上面介紹的各項參數的監控功能,還有比如控制音樂播放、查看貨幣價格漲幅、訂閱 Nasa 每日一圖 等等各種有趣的小工具。當然,BitBar 使用時還是出現一些問題,比如我發現各個插件之間的相對位置事實上不太好維持,每次重新加載都會凌亂,只能手動給腳本名稱前面添加編號來解決。不過,BitBar 的功能還是相當豐富,可以實現以 iStat Menu 為代表的「系統監控」軟件所提供的大部分功能,希望豐富自己 macOS 菜單欄功能的同學一定不要錯過。

你可以在 這裡下載 BitBar。


分享到:


相關文章: