emacsclientを使用してリモートemacsインスタンスに接続するにはどうすればよいですか?


44

1台のコンピューターでemacsを実行できるようにしたい:

server $ emacs --daemon

そして、別から接続します:

local $ emacsclient -c server

これは可能ですか?もしそうなら、どのように?


1
ヒント:リモートEmacsセッションを実行し続ける必要がなく、Emacsを使用してリモートホスト上のファイルを編集するだけの場合は、TRAMPを試してみてください。これにより、ネットワーク経由でファイルを透過的に編集できます。
パプリカ14

@paprika OPはリモートemacs構成をローカルで使用したいと思います。したがって、TRAMPは適切ではない可能性があります。それが私の回答の前に免責事項を付けた理由です。
Vamsi 14

3
被写体にStackOverflowの上で議論がありました:stackoverflow.com/questions/12546722/...
クラッシュコアダンプ

回答:


21

emacsclientを使用して、リモートコンピューターで実行されているEmacsインスタンスに接続することはできません。このクライアント/サーバーの概念は、ネットワークノードではなく、(ローカル)プロセスに関連しています。しかし、あなたがすることができ、リモートコンピュータにログインするために、様々なネットワーク技術を使用し、そこに実行しているEmacsのサーバーに接続し、ローカルのemacsclientの画面を表示します。使用するオペレーティングシステムによっては、SSH(ターミナル/ Xフォワーディング)、VNC、RDPなどを介してネットワーキングを実行できます。

更新
一部の人々が指摘したように、実際にはemacsclientにはTCP経由でサーバーに接続するオプションがあります。ただし、emacsclientはリモートで使用することを意図したものではなく、非UNIXシステム(WindowsなどのUNIXドメインソケットが利用できないオペレーティングシステム)との互換性のためにTCPソケットオプションが必要です。


4
この投稿によると、あなたの声明は正確ではありません。もっと具体的に教えてください。
DJJ

5
@paprika:いいえ、TCP接続に使用される認証メカニズムは、リモートアクセスのケース専用に設計されました。Windows側でTCPを使用するようにプッシュしたので、コードはPOSIXでもリモート接続に役立ち、Windows固有のコードを減らしてPOSIX側に機能を追加します。
ステファン

9

おそらくあなたが求めたものではなく、X-forwardingでsshがセットアップされていると仮定すると、サーバー上でemacsclientを起動し、それをリモートDISPLAYに転送できます。(免責事項:ウェブフォームに直接入力されたコード)

 local> ssh server -f emacsclient -c --display=$DISPLAY

いいえ、これは質問とは無関係です。
heroxbd

4

これはあなたが望むものではないかもしれませんが、念のためにそれが何らかの方法であなたを助けることができるかどうか確かめてください。

私は通常、Vagrantでブートストラップされた仮想マシン内で作業し~/.emacs.dます。マシン(ローカル)と仮想マシン(リモート)の間でディレクトリを同期し、Vagrantfileファイルに次のものを入れます。

config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"

また、私のEmacs設定は起動時に自動的にサーバーを起動します:

(require 'server)
(setq server-use-tcp t
      server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
    (server-start))

したがって、仮想マシン内でEmacsサーバーを起動すると、次の方法で接続できます。

ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'

仮想マシンのホスト名は、〜/ .ssh / configで構成した仮想マシンのホスト名です。

Host <virtual machine hostname>
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/anler/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

注:仮想マシン内でEmacsサーバーを起動する前に、~/.emacs.d/server/serverファイルが存在しないことを確認します(存在しない場合は削除するだけです)。


リモートサーバーでemacsclientを呼び出していることに気付きました。その場合、emacsclientは最初に見つかったサーバーに自動的に接続するため、サーバーファイルを明示的に渡す必要はありません。
Vamsi 14

IDファイルがファイルに正しく設定されている場合、コマンドラインで秘密キーファイルを指定する必要はありません.ssh/config。を指定するだけですHost。疑わしい場合は、コマンドの出力を使用しvagrant ssh-config~/.ssh/configファイルを設定できます。
アレクサンドロデオリベイラ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.