在 Mac 上移除搜狗、百度和微信輸入法
我用官方安裝套件裝好搜狗輸入法再去移除,第一次就被拒絕,提示 App 正在執行。查下來是安裝程式往 /Library/LaunchAgents 放了兩個設成 KeepAlive 的啟動代理程式,SogouServices 和 SogouTaskManager 每次被要求結束,launchd 馬上又把它們叫起來。後來有使用者移除騰訊的 Chatterfly 輸入法,也碰到類似的拒絕,刪除失敗,原因是它「正在使用中」。
輸入法不是一般的 App,它有自己專屬的資料夾,macOS 會讓它一直在背景執行,搜狗和百度還各自帶著幾個輔助程式。這篇講 Mac 上的搜狗、百度和微信輸入法(WeType),它們裝在哪、哪些程序一直在跑、哪些殘留是你自己的資料,以及照什麼順序移除才不會讓鍵盤打不了字。訊飛輸入法我還沒測,這篇沒有涵蓋。
輸入法裝在哪裡
輸入法不會放進 /Applications,它有兩個專屬的資料夾,/Library/Input Methods 給這台 Mac 上的所有帳號用,~/Library/Input Methods 只屬於你的帳號。搜狗和百度的官方安裝程式都把 App 放進 /Library/Input Methods,擁有者是 root,所以移動它要輸入管理者密碼。微信輸入法也在這裡,路徑是 /Library/Input Methods/WeType.app。
這也是輸入法看起來總是在執行的原因,macOS 會在需要時才啟動輸入法,而打開系統設定裡的鍵盤設定頁,就會把裝著的輸入法全部載入一遍。看到搜狗或百度的程序在執行,不代表你最近真的用它打過字。
先從輸入方式列表裡移除
直接移除正在使用的輸入方式,可能會有一小段時間打不了字,選單列上的輸入選單也會一直顯示它,直到選單重新啟動為止。所以動任何檔案之前,先把它從列表裡拿掉:
- 從選單列的輸入選單切換到其他輸入方式,例如 ABC。
- 打開「系統設定 › 鍵盤 › 文字輸入 › 輸入方式 › 編輯」。
- 選取這個第三方輸入法,按一下「移除」(減號按鈕)。
Apple 在在 Mac 上更改「輸入方式」設定裡說明了這個設定頁。從列表裡移除輸入方式並不會刪掉它,App 本身、輔助程式和資料都還在 Mac 上。
哪些東西一直在執行
我看的這三個,每個都不只一個程序:
- 搜狗:輸入法本身(
SogouInput),加上SogouServices和SogouTaskManager,後兩個由/Library/LaunchAgents裡的com.sogou.SogouServices和com.sogou.SogouTaskManager兩個啟動代理程式維持執行。兩個都是 KeepAlive,只要它們還載入著,結束程序也沒有用。 - 百度:輸入法本身(
BaiduIM),/Library/LaunchAgents裡的啟動代理程式com.baidu.InputService從 App 內部執行enableInput,/Library/LaunchDaemons裡還有一個守護程式com.baidu.baiduService,在系統網域裡從 App 內部執行baiduService。 - 微信輸入法:輸入法本身(
WeType)。
順序很重要,要先移除啟動代理程式或將它解除載入,再結束程序,不然它們馬上又回來了。如果是手動刪檔案,刪完後重新開機一次,免得還有東西從垃圾桶裡執行。
各自留下了什麼
搜狗,用官方 6.25.1 安裝程式安裝:
| 項目 | 是什麼 | 怎麼處理 |
|---|---|---|
/Library/Input Methods/SogouInput.app |
輸入法本身,約 549 MB | 移除,需要管理者密碼 |
/Library/LaunchAgents/com.sogou.SogouServices.plist 和 com.sogou.SogouTaskManager.plist |
兩個 KeepAlive 啟動代理程式 | 移除,需要管理者密碼 |
/Library/QuickLook/SogouSkinFileQuickLook.qlgenerator |
預覽搜狗皮膚檔案的快速查看外掛,約 3 MB | 移除,需要管理者密碼 |
~/Library/Application Support/Sogou/InputMethod |
搜狗的使用者資料,我的測試機上有 485 MB | 先複製到別處,再決定 |
~/Library/Application Support/Sogou/ResHub 和 SkinShop |
搜狗的資源和皮膚資料夾 | 移除 |
以 com.sogou.inputmethod.sogou、SogouServices、SogouHelper 或 com.sogou.SogouTaskManager 命名的 Caches、HTTPStorages 和 Preferences |
輸入法和輔助程式的設定與快取 | 移除 |
~/.sogouinput |
我的測試機上是空的 | 移除 |
~/Library/Application Support/Sogou 本身 |
搜狗其他產品也可能共用的上層資料夾 | 保留,只移除上面那幾個子資料夾 |
~/Library/Application Support/com.tencent.bugly |
其他 App 也在用的當機回報 SDK | 保留 |
百度,用官方 5.7 安裝程式安裝:
| 項目 | 是什麼 | 怎麼處理 |
|---|---|---|
/Library/Input Methods/BaiduIM.app |
輸入法本身,68 MB | 移除,需要管理者密碼 |
/Library/LaunchAgents/com.baidu.InputService.plist |
執行 enableInput 的啟動代理程式 |
移除,需要管理者密碼 |
/Library/LaunchDaemons/com.baidu.baiduService.plist |
執行 baiduService 的系統守護程式 |
移除,需要管理者密碼 |
~/Library/Application Support/BaiduInput |
使用者詞庫資料夾,我的測試機上有 2.9 MB | 先複製到別處,再決定 |
以 com.baidu.inputmethod.BaiduIM 命名的 Caches、HTTPStorages 和 Preferences |
設定與快取 | 移除 |
~/Library/sapi 和 ~/Library/Application Support/Baidu |
我沒辦法證明它們屬於輸入法 | 除非你知道是誰寫入的,否則保留 |
名稱含 com.baidu.BaiduNetdisk-mac 或 baidunetdisk 的東西 |
百度網盤,另一個產品 | 保留 |
微信輸入法是我每天在用的輸入法,所以我沒有移除過它。在這台 Mac 上,Mole 為它列出 17 個項目,預設勾選 11 個,唯一沒列出來的檔案是 ~/Library/Preferences/com.tencent.WeTypeSettings.plist,它屬於微信輸入法的設定輔助程式,微信輸入法移除之後,這個檔案也可以刪。
這裡唯一值得保留的是你的詞庫資料夾。移除任何東西之前,先把 BaiduInput 或 Sogou/InputMethod 複製到 ~/Library 以外的資料夾,如果打算以後重新安裝,就把這份副本留著。
檢查還剩下什麼
下面這些指令只讀取,都不會改動任何東西:
ls "/Library/Input Methods" ~/Library/Input\ Methods 2>/dev/null
pgrep -il 'sogou|baiduim|baiduservice|enableinput|wetype'
ls /Library/LaunchAgents /Library/LaunchDaemons ~/Library/LaunchAgents | grep -iE 'sogou|com\.baidu\.(inputservice|baiduservice)'
ls -d ~/Library/Application\ Support/Sogou/* ~/Library/Application\ Support/BaiduInput ~/.sogouinput 2>/dev/null
第一個指令列出還裝著的輸入法,輸出裡有 SogouInput.app、BaiduIM.app 或 WeType.app,代表那一個還在。pgrep 什麼都沒印出,代表它們的程序都沒在執行。如果印出的是已經移除的那個套件,它正從垃圾桶裡執行,下次重新開機就會消失,而結束後幾秒內又冒出來的程序,代表還有啟動代理程式載入著。啟動代理程式和守護程式都移除後,第三個指令應該什麼都不輸出。最後一個指令列出資料資料夾,它列出的都還在磁碟上,要不要留,在備份之後由你決定。
Mole 怎麼處理
Mole 會查看兩個 Input Methods 資料夾,所以輸入法會和其他 App 一樣出現在 App 列表裡。它不會為輸入法顯示「使用中」提示或上次使用日期,因為不管你用不用,macOS 都會讓輸入法一直執行。選取一個輸入法時,Mole 會提醒你先切換到其他輸入方式。
輸入法本身,以及程式位於它內部的啟動代理程式和守護程式,預設都會勾選。在要求執行中的輸入法結束之前,Mole 會先解除載入這些勾選的啟動項目,讓 KeepAlive 沒辦法再把輔助程式叫起來,上面搜狗那次被拒絕之後改的就是這裡。屬於 root 的項目需要輸入你的管理者密碼。使用者資料資料夾(BaiduInput、Sogou/InputMethod、~/.sogouinput)、搜狗的資源資料夾、它的輔助程式快取和快速查看外掛會列出但不勾選。Mole 只認這幾個確切的子資料夾,不會動 Sogou 上層資料夾、~/Library/sapi 或共用的 Bugly 資料夾。所有東西都會移到垃圾桶,在那裡還能找回來。
一批移除裡有輸入法被刪掉時,Mole 會重新啟動輸入選單,讓舊的項目消失。在改這裡之前,我移除 Chatterfly 後輸入選單還列著它,看起來就像移除失敗了。殘留和背景輔助程式的差別,可以看 Mac App 解除安裝後還在背景跑?和安全停用 Mac 登入與背景項目。
常見問題
可以直接把輸入法拖到垃圾桶嗎?
輸入管理者密碼後,可以把 App 從 /Library/Input Methods 移走,但啟動代理程式會留下來,它們叫起來的搜狗和百度輔助程式會一直執行到你重新開機。先從輸入方式列表裡移除,再處理啟動項目,最後才是 App。
輸入法已經刪了,輸入選單裡卻還有它,是不是沒移除乾淨?
多半不是。輸入選單用的還是它啟動時讀到的那份列表,登出再登入一次就好。Mole 的「最佳化」裡也有一項「輸入法切換」修復,重新啟動的就是這個選單。
我自己加的詞會不見嗎?
只有刪掉詞庫資料夾才會。先把 ~/Library/Application Support/BaiduInput 或 ~/Library/Application Support/Sogou/InputMethod 複製到 ~/Library 以外的地方,Mole 會列出這兩個資料夾,但不會勾選。