Ghostty on macOS を URI ssh:// に対応させる備忘録です.
結論から書くと,
AppleScript と組み合わせて実現!
します.
何をしたいのか?
タイトルの通りですが,念のためもう少し詳しく書くと,ブラウザで ssh://mypc.local のようなリンクをクリックすると,そのURLを受け取って ghostty の新しいウィンドウで ssh コマンドとして実行します.これにより,ssh 接続先をブックマーク等で管理したい訳ですね.
なお,macOS の terminal の場合ははじめからこの動作ですし,老舗の iTerm2 を使う場合も,
- preferences/setting を開く(Cmd + , )
- Profile を開く
- General タブを開く
- URL schemes セクションの ssh チェックボックスを有効化する
- macOS で iTerm2 を ssh のデフォルトハンドラとして設定する
で可能です.
設定の詳細
前提条件
Ghostty のネイティブ AppScript 対応機能を利用していますので,Ghostty は ver 1.3.0 以降でなければならないようです.
AppleScript
macOS のスクリプトエディタに,
on open location this_URL
set ssh_cmd to "ssh " & quoted form of this_URL
tell application "Ghostty"
set cfg to new surface configuration
set command of cfg to ssh_cmd
new window with configuration cfg
activate
end tell
end open location
入力します.ssh セッション切断後もウィンドウを閉じないままにしたい場合は,set ssh_cmd … を
set ssh_cmd to "/bin/zsh -c \"ssh " & quoted form of this_URL & " ; exec zsh\""
に書き換えてください.その後,このコードをスクリプトファイルではなく「アプリケーション」として書き出してください.なお,アプリ起動時に「press Run to run this script」と聞かれたくない場合は,アプリとして書き出すときに「起動画面を表示」のチェックが外れているか確認してください.
なお,ターミナルから,
# アプリケーションフォルダに保存している場合のコマンド defaults write "/Applications/Ghostty SSH Handler.app/Contents/Info" OSAAppletShowStartupScreen -bool false
のようにする方法もあるようですが,これをしてしまうと,次の URI スキームの登録で編集する Info.plist がバイナリ化されてしまい,編集できなくなってしまうことに注意してください(URI スキーム登録後であれば問題ないと思います).
以下,アプリ名を「Ghostty SSH Handler」としたとして続けます.
URI スキームの登録
Finder で保存した Ghostty SSH Handler.app を右クリックして「パッケージの内容を表示」を選択します.
Contents フォルダ内の Info.plist をエディタで開き,ファイルの最後にある </dict> と </plist> の直前に以下のコードを挿入して上書き保存します.
CFBundleURLTypes
CFBundleURLName
SSH Handler
CFBundleURLSchemes
ssh
あとはこのアプリを1度だけダブルクリックして起動すればハンドラが登録され,以後,Chrome などで ssh://mypc.local などの URL をクリックすれば Ghostty 経由で ssh 接続できるはずです.しかし,この場合は macOS の Dock(ドッグ)に「Ghostty SSH Handler」が残ってしまい,正直ちょっと目障りなので,以下,これを表示させないよう設定します.
Dock(ドッグ)に表示させないようにする
これは以下のコマンドをターミナルから実行するだけです.なお,Ghostty SSH Handler.app アプリを /Application フォルダに保存しているとします.
# 書き込み defaults write "/Applications/Ghostty SSH Handler.app/Contents/Info" LSUIElement -bool true defaults write "/Applications/Ghostty SSH Handler.app/Contents/Info" LSBackgroundOnly -bool true # 書き込みチェック(1が帰ってくれば正常に書き込めている) defaults read "/Applications/Ghostty SSH Handler.app/Contents/Info" LSUIElement defaults read "/Applications/Ghostty SSH Handler.app/Contents/Info" LSBackgroundOnly
以上!