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?
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?
Câu trả lời:
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).
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
Đâ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.d
thư 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 Vagrantfile
tệ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/server
tệp không có (nếu tôi chỉ gỡ bỏ nó) vì nếu không nó sẽ không hoạt động.
.ssh/config
tệ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/config
tệp của bạn .
Tự động mở tập tin từ xa trong emacs cục bộ
Tôi đã có thành công với giải pháp đầu tiên. Thứ hai có vẻ đơn giản hơn, tôi vẫn chưa thử.