Uzak bir emacs örneğine bağlanmak için emacsclient'ı nasıl kullanırım?


44

Bir bilgisayarda emacs çalıştırabilmek isterim:

server $ emacs --daemon

Ve sonra başka birinden ona bağlan:

local $ emacsclient -c server

Mümkün mü? Öyleyse nasıl?


1
Sadece bir ipucu: Uzak Emacs oturumunu çalışır durumda tutmaya ihtiyacınız yoksa ve sadece uzak ana bilgisayardaki dosyaları Emacs ile düzenlemek istiyorsanız, ağ üzerinde dosyaları şeffaf bir şekilde düzenlemenizi sağlayan TRAMP'ı denemek isteyebilirsiniz.
kırmızı biber

@paprika Bence OP yerel olarak uzak emacs yapılandırması kullanmak istiyor. Bu nedenle TRAMP uygun olmayabilir. Bu yüzden sorumluluk reddi konusundaki cevabımı ön ekledim.
Vamsi

3
StackOverflow konusuna ilişkin bir tartışma yapıldı: stackoverflow.com/questions/12546722/…
Crash Coredump 29:14

Yanıtlar:


21

Uzak bir bilgisayarda çalışan bir Emacs örneğine bağlanmak için emacsclient kullanamazsınız. Bu istemci-sunucu konsepti, ağ düğümleriyle değil (yerel) işlemlerle ilgilidir. Ancak, olabilir uzak bilgisayara giriş yapmak için çeşitli ağ teknolojileri kullanmak, orada çalışan bir emacs sunucuya takmak ve yerel olarak emacsclient ekranını görüntüler. Kullanılan işletim sistemine bağlı olarak, ağ bağlantısı SSH (terminal / X-Yönlendirme), VNC, RDP vb.

GÜNCELLEME :
Bazı kişilerin belirttiği gibi, emacsclient aslında sunucuya TCP yoluyla bağlanma seçeneğine sahip. Bununla birlikte, emacsclient hiçbir zaman uzaktan kullanılmadığı için, TCP soket seçeneği UNIX olmayan sistemlerle uyumluluk için gereklidir (yani, Windows gibi UNIX etki alanı soketlerinin bulunmadığı işletim sistemleri).


4
Bu yayına göre ifadeniz tam olarak doğru değil. Daha açık konuşur musun?
DJJ

5
@paprika: Hayır, TCP bağlantısı için kullanılan kimlik doğrulama mekanizması özellikle uzaktan erişim durumu için tasarlanmıştır. TCP'nin Windows tarafında kullanılmasını sağladım, böylece kod uzak bağlantılar için POSIX üzerinde de kullanışlıdır, böylece Windows'a özgü kodu azaltır ve POSIX tarafına işlevsellik eklerim.
Stefan

9

Muhtemelen istediğin gibi değil ama X-forwarding ile ssh kurulumunu yaptığını varsayarsak, sunucuda tam olarak başlayabilir ve uzaktan DISPLAY'e yönlendirebilirsiniz. (Feragatname: doğrudan web biçimine yazılan kod)

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

Hayır, bu soru ile alakasız.
heroxbd

4

İstediğin bu olmayabilir ama sadece bir şekilde yardımcı olup olamayacağını görmek için.

Genelde Vagrant ile önyüklenen sanal bir makinede çalışıyorum, dizimi ~/.emacs.dmakinem (yerel) ve sanal makine (uzak) arasında aşağıdaki Vagrantfiledosyaya koyarak senkronize ettim :

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

Ayrıca, Emacs config aygıtım başlangıçta otomatik olarak bir sunucu başlatır:

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

Böylece, sanal makinenin içinde bir Emacs sunucusu başlattığımda, aşağıdakilerle bağlantı kurabilirim:

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

sanal makine ana makine adı , ~ / .ssh / config dosyasında yapılandırdığım sanal makinenin ana makine adıdır :

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

Not: Sanal makinenin içindeki Emacs sunucusunu başlatmadan önce ~/.emacs.d/server/serverdosyanın mevcut olmadığını kontrol ettim (eğer öyleyse kaldırırım), aksi halde çalışmaz.


Uzaktaki sunucuda tam olarak aradığınızı fark ettim. Bu durumda, emacsclient otomatik olarak bulduğu ilk sunucuya bağlanacağından, sunucu dosyasını açıkça iletmeniz gerekmez.
Vamsi

Dosyanızda doğru bir şekilde ayarlanmış kimlik dosyanız varsa, özel anahtar dosyasını komut satırında belirtmeniz gerekmez .ssh/config. Sadece belirtmeniz gerekir Host. Şüpheniz varsa, komutun çıktısını kullanabilirsiniz: dosyanızı vagrant ssh-configayarlayın ~/.ssh/config.
Alexandro de Oliveira

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.