今天在 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.

然後重新開機.