OpenBSD 上のファイルを macOS (El Capitan) で動いている Emacs から編集できれば快適である.
TRAMP はそれをできるようにする Emacs 付属のパッケージである. もう 5 年以上使っていない.
それで TRAMP の設定を見直し, やり方を思い出してみた.
試行錯誤はあったが, どうにか仮想マシン上の OpenBSD システムにあるファイルを, TRAMP を用いて Mac 上の Emacs から編集できるようになったので, うまく行くまでの手順をメモとしてまとめておく.
・ EmacsWiki, TRAMP MODE, TRAMP User Manual の記述を参考にして作業を行う.
・ OpenBSD のプライベート IP アドレスは 192.168.100.101 である. TRAMP はこの IP アドレスにアクセスする.
・ OpenBSD 上の /home/sokohiko/tmp/foo というファイルを Emacs から開ければ成功で, これを目標にする.
・ Emacs の設定ファイル内 $HOME/.emacs.d/init.el に残っている TRAMP の設定のための記述は以下のとおり.
;;; Tramp
(require 'tramp)
;; Faster than default scp and suppress harmful control characters of
;; remote hosts.
(setq tramp-default-method "sshx")
(require 'tramp)
で TRAMP パッケージをロードする.(setq tramp-default-method "sshx")
によってネットワーク経由のデフォルトの接続方法として SSH を用いるようにしている.OpenBSD 側のログインの設定に端末に対するコントロール文字などが含まれているとうまくログインできないことがある. 'sshx' は接続時に疑似端末を割り当ててゲスト側のログインシェルではなく /bin/sh を使用して, ログイン時の設定を迂回することでそのような問題が発生しないようにする.
以下に行った操作を行った順に書く.
1) C-x C-f によってリモートファイルを開く. C-x C-f にはデフォルトでは find-file 関数が割り当てられているが, 自分の場合は Helm を使っているため, C-x C-f は helm-find-file で置き換えられている. 次を実行する.
C-x C-f /sshx:sokohiko@192.168.100.101:tmp/foo
《接続方法》: 《ユーザー名》@《IP アドレス》:《ファイル名》のフォーマットで指定した. つまり各カラムを全て指定している.
ところが Emacs のミニバッファーに
Trying to exit with no candidates # 候補の名前が無いため処理終了中...
という Helm のメッセージが出力されて《ファイル名》の入力から先に進めない. TRAMP に処理が渡らずに Helm 側で入力を処理してしまっているようである.
2) M-x find-file を試す.
M-x find-file RET /sshx:sokohiko@192.168.100.101:tmp/foo
今度は TRAMP に処理が渡ってユーザーのパスワードを聞いてくる. パスワードを入力すると OpenBSD に接続するが, この処理に非常に時間がかかる. 何かのタイムアウトを待っているような感じ. 延々と待った挙句に
Couldn't find local shell prompt for /bin/sh # /bin/sh 用のローカルシェルプロンプトが見つからない.
というメッセージが出力されてリモートファイルを開けない.
EmacsWiki の記述によれば, プロンプトをカスタマイズしているときにこのようなエラーが発生することがあるとのこと.
そこにある回避方法を参考にして, OpenBSD 側のログインの設定に
[[ $TERM == "dumb" ]] && PS1='$ '
という記述を追加する.
これにより, TRAMP からリモートホストに接続する際の /bin/sh 用のシェルプロンプトを明示的に '$ ' と指定する.
しかし症状は変わらず, リモートファイルを開けない. 延々と何かの処理を行った後に
Couldn't find local shell prompt for /bin/sh
という上と同じメッセージが出力されて処理が終了する.
3) 《接続方法》として 'scpx' を試す.
M-x find-file RET /scpx:sokohiko@192.168.100.101:tmp/foo
なぜかこれは成功した. すぐにゲスト OS への接続が行われた後 OpenBSD 上の '/home/sokohiko/tmp/foo' ファイルを開くことができた.
4) 《接続方法》として, もう一度 'sshx' を試してみる.
M-x find-file RET /sshx:sokohiko@192.168.100.101:tmp/foo
さっきは失敗したのに, 今度はなぜか接続がうまく行ってリモートファイルを開くことができた.
5) C-x C-f (helm-find-file) で試してみる.
C-x C-f /sshx:sokohiko@192.168.100.101:tmp/foo
および
C-x C-f /scpx:sokohiko@192.168.100.101:tmp/foo
両方とも成功した.
しかし何度か試していると時々うまく行かずに
Couldn't find local shell prompt for /bin/sh
のメッセージが出力されて処理が終了してしまうことがある. 原因はわからない.
ひとまずここまで. しばらく使ってみて様子を見る.
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image