今天在 V2EX 看到有網友詢問 telnet:// protocol 無法正常工作的問題,稍微做了一些調查。

Set URL Schemes handler

先將 telnet:// 啟動的默認應用程式改為 iTerm2,然後使用指令 open telnet://111

Failed to exec telnet

可以看到提示找不不到 telnet 可執行檔,PATH 環境變數只包含少數幾個路徑。

System PATHs

而經檢查,確認我已經在 /etc/paths 中設定的一系列路徑。

通過 Google 檢索,了解到自 Mac OS X 10.9 開始,/etc/paths, /etc/launchd.conf~/.MacOSX/environment.plist 不再對 Finder 啟動的應用程式有效,解決辦法有二。

辦法一 修改 App 的 Info.plist 設定 LSEnvironment

Set PATH in Info.plist

用 Xcode 修改 /Applications/iTerm.app/Contents/Info.plist,注意 LSEnvironment 被自動識別為 Environment variables

1
2
3
4
5
<key>LSEnvironment</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:</string>
</dict>

然後執行下面的指令更新 LaunchServices 資料庫

1
2
3
$ /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/iTerm.app
lsregister: processing /Applications/iTerm.app
lsregister: registered /Applications/iTerm.app

辦法二 使用 launchctl 設定 PATH

本辦法只在 Mac OS X 10.10 及之後版本有效

1
2
$ sudo launchctl config user path /usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin
Configuration applied. You must reboot for changes to take effect.

然後重新開機。