Come utilizzo emacsclient per connettermi a un'istanza di emacs remota?


44

Mi piacerebbe poter eseguire emacs su un computer:

server $ emacs --daemon

E poi connettiti ad esso da un altro:

local $ emacsclient -c server

È possibile? Se é cosi, come?


1
Solo un suggerimento: se non è necessario mantenere in esecuzione la sessione Emacs remota e si desidera modificare i file sull'host remoto con Emacs, è possibile provare TRAMP, che consente di modificare i file in rete in modo trasparente.
paprika,

@paprika Penso che OP voglia usare localmente una configurazione emacs remota. Quindi TRAMP potrebbe non essere adatto. Questo è il motivo per cui ho anteposto la mia risposta al disclaimer.
Vamsi,

3
C'è stata una discussione su StackOverflow sull'argomento: stackoverflow.com/questions/12546722/…
Crash Coredump

Risposte:


21

Emacsclient non può essere utilizzato per connettersi a un'istanza di Emacs in esecuzione su un computer remoto. Questo concetto client-server è correlato a processi (locali), non a nodi di rete. Tuttavia, è possibile utilizzare varie tecnologie di rete per accedere al computer remoto, collegarsi a un server emacs in esecuzione lì e visualizzare lo schermo dell'emacsclient localmente. A seconda del sistema operativo utilizzato, la rete potrebbe essere eseguita tramite SSH (terminale / X-Forwarding), VNC, RDP ecc.

AGGIORNAMENTO :
come alcuni hanno sottolineato, emacsclient ha in realtà un'opzione per connettersi al server tramite TCP. Tuttavia, emacsclient non è mai stato pensato per essere utilizzato in remoto, l'opzione socket TCP è necessaria per la compatibilità con sistemi non UNIX (ovvero sistemi operativi in ​​cui i socket di dominio UNIX non sono disponibili, come Windows).


4
Secondo questo post la tua affermazione non è esattamente corretta. Potresti essere più specifico?.
DJJ,

5
@paprika: No, il meccanismo di autenticazione utilizzato per la connessione TCP è stato progettato specificamente per il caso di accesso remoto. Ho spinto per l'uso del TCP sul lato Windows in modo che il codice sia utile anche su POSIX per le connessioni remote, riducendo così il codice specifico di Windows e aggiungendo funzionalità al lato POSIX.
Stefan

9

Probabilmente non quello che hai richiesto ma supponendo che tu abbia una configurazione ssh con X-forwarding, potresti avviare emacsclient sul server e inoltrarlo a DISPLAY remoto. (Dichiarazione di non responsabilità: codice digitato direttamente nel modulo web)

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

No, questo è irrilevante per la domanda.
heroxbd,

4

Questo potrebbe non essere quello che vuoi ma, nel caso, vedi se può aiutarti in qualche modo.

Di solito lavoro all'interno di una macchina virtuale avviata con Vagrant, ho la mia ~/.emacs.ddirectory sincronizzata tra la mia macchina (locale) e la macchina virtuale (remota) inserendo quanto segue nel Vagrantfilefile:

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

Inoltre, la mia configurazione di Emacs avvia automaticamente un server all'avvio:

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

Quindi, quando lancio un server Emacs all'interno della macchina virtuale, posso collegarmi ad esso con il seguente:

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

il nome host della macchina virtuale è il nome host della macchina virtuale che ho configurato nel mio ~ / .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

Nota: prima di avviare il server Emacs all'interno della macchina virtuale, controllo che il ~/.emacs.d/server/serverfile non sia presente (in tal caso lo rimuovo) perché altrimenti non funzionerà.


Ho appena realizzato che stai chiamando emacsclient nel server remoto. In tal caso, non è necessario passare il file del server in modo esplicito poiché emacsclient si connetterà automaticamente al primo server che trova.
Vamsi,

Non è necessario specificare il file della chiave privata nella riga di comando se il file dell'identità è impostato correttamente nel .ssh/configfile. Hai solo bisogno di specificare il Host. Nel dubbio puoi usare l'output del comando: vagrant ssh-configper impostare il tuo ~/.ssh/configfile.
Alexandro de Oliveira,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.