Emacs client không thể tìm thấy máy chủ trong thiết bị đầu cuối


11

Vì vậy, tôi đang cố gắng thiết lập emacs như một máy chủ nhưng tôi gặp khó khăn khi khiến nó hoạt động từ thiết bị đầu cuối. Nếu tôi chạy emacs --daemon trên một số thiết bị đầu cuối, tôi có thể kết nối với nó nếu tôi chạy emacsclient từ cùng một thiết bị đầu cuối đó, nhưng nếu tôi mở một thiết bị đầu cuối mới, emacsclient sẽ không tìm thấy máy chủ. Mọi thứ dường như hoạt động tốt nếu tôi chạy emacsclient từ launcher.

tôi đang chạy

emacsclient -a '' -t

Khách hàng nói:

emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".

Bất kỳ ý tưởng về những gì có thể xảy ra?

Tôi đang sử dụng Ubuntu 17.04 với gnome / i3 nếu có vấn đề.

Câu trả lời:


3

Tôi đã từng có cùng một vấn đề cho đến khi tôi đã làm:

alias e="emacsclient -t --socket-name=/tmp/emacs1000/server"

Và bây giờ tôi chỉ sử dụng "e"bí danh này để bắt đầu emacsclient.

Tôi đã không nhìn thấy vấn đề kể từ đó.


Điều này đã làm việc, làm thế nào để tôi bảo máy chủ khởi động / tmp / emacs1000 / máy chủ? (khách hàng đầu tiên bắt đầu nó cho tôi)
Matías Guzmán Naranjo

Trước khi chạy một emacsclient, trước tiên tôi luôn khởi động máy chủ emacs emacs --daemonvà nó luôn /tmp/emacs1000/servertự động nghe trên ổ cắm đó . Tôi chắc chắn rằng có một cách ít rắc rối hơn để làm điều này mà không liên quan đến việc mã hóa /tmp/emacs1000/servervị trí trong ebí danh và sẽ luôn hoạt động cho dù máy chủ được tạo ra ở đâu (và đó có lẽ là cách mà emacsclient hoạt động khi được gọi mà không có --socket-nametùy chọn), nhưng thực hiện theo cách hackish đơn giản này luôn làm việc cho tôi.
izkon

4

Vì những lý do không thể tưởng tượng, điều này chỉ xảy ra với tôi khi nâng cấp FC28 cho máy tính xách tay của tôi. Ngay cả strid ddid không giúp đỡ. Sau khi xem qua một số liên kết (bao gồm cả liên kết này), tôi đã nghĩ ra bằng cách dán các dòng sau:

# bash syntax
# On laptop, emacscclient cannot find emacs socket any longer (after FC28)
export EMACS_SERVER_SOCKET=${TMPDIR:-/tmp}/emacs$(id -u)/server
alias emacsclient="/usr/bin/emacsclient -s $EMACS_SERVER_SOCKET"

Phần nào không mã hóa phần '1000' (phần này chỉ là id của người dùng đầu tiên được tạo trên máy cụ thể này, duh) và tài khoản cho TMPDIR. Xuất EMACS_SERVER_SOCKET rất dễ thương, nhưng vô dụng, vì emacsclient không cho phép cấu hình đó từ một var env (vô lý, IMHO).

Nếu toàn quyền được ưu tiên, người ta có thể đặt:

(setq server-socket-dir "~/.emacs.d/server-dir") 

ở đâu đó trước khi máy chủ khởi động trong .emacs của họ và sử dụng "~ / .emacs.d / server-dir / server" làm tên ổ cắm máy chủ cho bí danh đã đề cập ở trên. server-dir sẽ được tạo tự động, với quyền 0700, nếu nó chưa tồn tại.


3

Hãy chắc chắn rằng bạn đang sử dụng cùng một phiên bản emacsemacsclient.

Khi emacsclient hệ thống của tôi được sử dụng thay vì các emacs xây dựng tùy chỉnh của tôi, tôi gặp một lỗi tương tự:

$ /usr/bin/emacsclient --version
emacsclient 22.1

$ /usr/bin/emacsclient .
/usr/bin/emacsclient: can't find socket; have you started the server?
To start the server in Emacs, type "M-x server-start".

Với phiên bản chính xác:

$ /usr/local/bin/emacsclient --version
emacsclient 26.0.50

$ /usr/local/bin/emacsclient .
Waiting for Emacs...

Điều này giải quyết vấn đề của tôi
xtt

1

Không nhất thiết là câu trả lời bạn đang tìm kiếm, nhưng tôi có chính xác cùng một thiết lập luôn được sử dụng chỉ là emacsclient -c hoặc emacsclient -t. Có nghĩa là tôi không khởi động máy chủ theo cách thủ công, lần gọi đầu tiên sẽ khởi động máy chủ và mọi lần gọi tiếp theo sẽ kết nối với máy chủ.


Điều này làm việc cho tôi, nhưng một lần nữa, trong mỗi thiết bị đầu cuối cụ thể. Vì vậy, nếu tôi bắt đầu một thiết bị đầu cuối mới, nó sẽ khởi động một máy chủ mới.
Matías Guzmán Naranjo

Bạn có bất kỳ công cụ cụ thể máy chủ trong .emacs của bạn? Nếu vậy, tôi sẽ nhận xét và thử lại. Nếu không thì tôi hết ý tưởng.
gaussian

Ngoài ra: phiên bản Emacs nào bạn đang chạy? Thiết lập của tôi hoạt động với cả Emacs25 (25.1) từ depo Ubuntu và Emacs25.2 tự biên dịch.
gaussian

Tôi không nghĩ rằng tôi có bất cứ điều gì trong tập tin init. Tôi đang chạy 25.3, nhưng điều tương tự cũng xảy ra với 25.2. Ngoài ra, khởi chạy máy chủ với emacs -q --daemon cũng làm điều tương tự.
Matías Guzmán Naranjo

Hết ý tưởng, xin lỗi. Hoạt động trong thiết lập của tôi, ngay cả với emacs -q --daemon.
gaussian

0

Tạo một kịch bản nói "myemacs" như dưới đây:

#!/bin/bash
emacsclient -a '' -c "$@"

Chạy nó sẽ tạo daemon nếu không tồn tại và sẽ kết nối với daemon nếu daemon tồn tại.


Điều này không hoạt động. Tôi gặp cùng một vấn đề, Nếu tôi khởi chạy nó từ hai thiết bị đầu cuối khác nhau, nó sẽ tạo ra một daemon mới mỗi lần.
Matías Guzmán Naranjo

@ MatíasGuzmánNaranjo Ồ, nhưng tôi thấy bạn đang sử dụng "-t", tôi đang sử dụng "-c". Bạn đã thử "-c" chưa?
lucky1928

điều đó không thay đổi bất cứ điều gì, đó là hành vi tương tự với -c hoặc -t. Máy khách không thể tìm thấy máy chủ.
Matías Guzmán Naranjo
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.