I'd like to be able to run emacs on one computer:
server $ emacs --daemon
And then connect to it from another:
local $ emacsclient -c server
Is this possible? If so, how?
Emacs Stack Exchange is a question and answer site for those using, extending or developing Emacs. It only takes a minute to sign up.
Sign up to join this communityI'd like to be able to run emacs on one computer:
server $ emacs --daemon
And then connect to it from another:
local $ emacsclient -c server
Is this possible? If so, how?
You cannot use emacsclient to connect to an Emacs instance running on a remote computer. This client-server concept is related to (local) processes, not network nodes. However, you can use various network technologies to log in to the remote computer, attach to an emacs server running there and display the emacsclient's screen locally. Depending on the operating system that is used the networking could be done via SSH (terminal/X-Forwarding), VNC, RDP etc.
UPDATE:
As some people pointed out, emacsclient actually does have an option to connect to the server via TCP. However, emacsclient was never meant to be used remotely, the TCP socket option is required for compatibility with non-UNIX systems (i.e. operating systems where UNIX domain sockets are not available, like Windows).
Probably not what you asked for but assuming you have ssh setup with X-forwarding, you could start emacsclient on the server and forward it to remote DISPLAY. (Disclaimer: code typed directly into webform)
local> ssh server -f emacsclient -c --display=$DISPLAY
This may be not what you want but just in case see if it can help you some way.
I usually work inside a virtual machine bootstrapped with Vagrant, I have my ~/.emacs.d
directory synced between my machine (local) and the virtual machine (remote) putting the following in the Vagrantfile
file:
config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"
Also, my Emacs config automatically starts a server on startup:
(require 'server)
(setq server-use-tcp t
server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
(server-start))
So when I launch an Emacs server inside the virtual machine, I can connect to it with the following:
ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'
virtual machine hostname is the hostname of the virtual machine I have configured in my ~/.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
Note: Before launching the Emacs server inside the virtual machine I check that the ~/.emacs.d/server/server
file is not present (if it is I just remove it) because otherwise it won't work.
.ssh/config
file. You just need to specify the Host
. In doubt you can use the output of the command: vagrant ssh-config
to set your ~/.ssh/config
file.
Jun 28, 2017 at 23:04