Làm cách nào để sử dụng emacsclient để kết nối với một cá thể emacs từ xa?


44

Tôi muốn có thể chạy emacs trên một máy tính:

server $ emacs --daemon

Và sau đó kết nối với nó từ người khác:

local $ emacsclient -c server

Điều này có thể không? Nếu vậy thì thế nào?


1
Chỉ là một gợi ý: nếu bạn không cần duy trì phiên Emacs từ xa và bạn chỉ muốn chỉnh sửa các tệp trên máy chủ từ xa bằng Emacs thì bạn có thể muốn dùng thử TRAMP, cho phép bạn chỉnh sửa các tệp qua mạng một cách trong suốt.
ớt bột

@paprika Tôi nghĩ OP muốn sử dụng cấu hình emacs từ xa cục bộ. Do đó TRAMP có thể không phù hợp. Đó là lý do tôi đặt trước câu trả lời từ chối trách nhiệm.
Vamsi

3
Đã có một cuộc thảo luận về StackOverflow về chủ đề: stackoverflow.com/questions/12546722/NH
Crash Coredump

Câu trả lời:


21

Bạn không thể sử dụng emacsclient để kết nối với một cá thể Emacs đang chạy trên một máy tính từ xa. Khái niệm máy khách-máy chủ này có liên quan đến các quy trình (cục bộ), không phải các nút mạng. Tuy nhiên, bạn có thể sử dụng các công nghệ mạng khác nhau để đăng nhập vào máy tính từ xa, gắn vào máy chủ emacs đang chạy ở đó và hiển thị màn hình của emacsclient cục bộ. Tùy thuộc vào hệ điều hành được sử dụng, việc kết nối mạng có thể được thực hiện thông qua SSH (terminal / X-Forwarding), VNC, RDP, v.v.

CẬP NHẬT :
Như một số người đã chỉ ra, emacsclient thực sự có một tùy chọn để kết nối với máy chủ thông qua TCP. Tuy nhiên, emacsclient không bao giờ được sử dụng từ xa, tùy chọn ổ cắm TCP là cần thiết để tương thích với các hệ thống không phải UNIX (tức là các hệ điều hành nơi ổ cắm tên miền UNIX không có sẵn, như Windows).


4
Theo bài viết này, tuyên bố của bạn không chính xác. Bạn có thể đặc sắc hơn không?.
DJJ

5
@paprika: Không, cơ chế xác thực được sử dụng cho kết nối TCP được thiết kế dành riêng cho trường hợp truy cập từ xa. Tôi đã thúc đẩy việc sử dụng TCP ở phía Windows để mã cũng hữu ích trên POSIX cho các kết nối từ xa, do đó giảm mã dành riêng cho Windows và thêm chức năng cho phía POSIX.
Stefan

9

Có thể không phải là những gì bạn đã yêu cầu nhưng giả sử bạn đã thiết lập ssh với chuyển tiếp X, bạn có thể bắt đầu emacsclient trên máy chủ và chuyển tiếp nó đến HIỂN THỊ từ xa. (Tuyên bố miễn trừ trách nhiệm: mã được nhập trực tiếp vào biểu mẫu web)

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

Không, điều này không liên quan đến câu hỏi.
heroxbd

4

Đây có thể không phải là những gì bạn muốn nhưng chỉ trong trường hợp xem nó có thể giúp bạn một cách nào đó.

Tôi thường làm việc bên trong một máy ảo được khởi động với Vagrant, tôi có ~/.emacs.dthư mục được đồng bộ hóa giữa máy của tôi (cục bộ) và máy ảo (từ xa) để đặt các Vagrantfiletệp sau vào tệp:

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

Ngoài ra, cấu hình Emacs của tôi tự động khởi động máy chủ khi khởi động:

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

Vì vậy, khi tôi khởi chạy một máy chủ Emacs bên trong máy ảo, tôi có thể kết nối với nó bằng cách sau:

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

tên máy chủ ảo là tên máy chủ của máy ảo mà tôi đã cấu hình trong ~ / .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

Lưu ý: Trước khi khởi chạy máy chủ Emacs bên trong máy ảo, tôi kiểm tra xem ~/.emacs.d/server/servertệp không có (nếu tôi chỉ gỡ bỏ nó) vì nếu không nó sẽ không hoạt động.


Chỉ cần nhận ra bạn đang gọi emacsclient trong máy chủ từ xa. Trong trường hợp đó, bạn không phải truyền tệp máy chủ một cách rõ ràng vì emacsclient sẽ tự động kết nối với máy chủ đầu tiên mà nó tìm thấy.
Vamsi

Bạn không cần chỉ định tệp khóa riêng trong dòng lệnh nếu bạn có tệp nhận dạng chính xác được đặt trong .ssh/configtệp của mình . Bạn chỉ cần xác định Host. Trong nghi ngờ, bạn có thể sử dụng đầu ra của lệnh: vagrant ssh-configđể đặt ~/.ssh/configtệp của bạn .
Alexandro de Oliveira

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.