ฉันต้องการที่จะสามารถเรียกใช้ emacs บนคอมพิวเตอร์เครื่องเดียว:
server $ emacs --daemon
และเชื่อมต่อกับมันจากที่อื่น:
local $ emacsclient -c server
เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร
ฉันต้องการที่จะสามารถเรียกใช้ emacs บนคอมพิวเตอร์เครื่องเดียว:
server $ emacs --daemon
และเชื่อมต่อกับมันจากที่อื่น:
local $ emacsclient -c server
เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร
คำตอบ:
คุณไม่สามารถใช้ emacsclient เพื่อเชื่อมต่อกับอินสแตนซ์ Emacs ที่ทำงานบนคอมพิวเตอร์ระยะไกล แนวคิดไคลเอ็นต์ - เซิร์ฟเวอร์นี้เกี่ยวข้องกับกระบวนการ (โลคัล) ไม่ใช่โหนดเครือข่าย อย่างไรก็ตามคุณสามารถใช้เทคโนโลยีเครือข่ายที่หลากหลายเพื่อเข้าสู่ระบบคอมพิวเตอร์ระยะไกลเชื่อมต่อกับเซิร์ฟเวอร์ emacs ที่ทำงานอยู่ที่นั่นและแสดงหน้าจอของ emacsclient ภายในเครื่อง ขึ้นอยู่กับระบบปฏิบัติการที่ใช้เครือข่ายสามารถทำได้ผ่าน SSH (terminal / X-Forwarding), VNC, RDP เป็นต้น
UPDATE :
บางคนชี้ให้เห็นว่า emacsclient มีตัวเลือกในการเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน TCP อย่างไรก็ตาม emacsclient ไม่ได้หมายถึงการใช้จากระยะไกลตัวเลือกซ็อกเก็ต TCP เป็นสิ่งจำเป็นสำหรับความเข้ากันได้กับระบบที่ไม่ใช่ UNIX (เช่นระบบปฏิบัติการที่ซ็อกเก็ตโดเมน UNIX ไม่พร้อมใช้งานเช่น Windows)
อาจไม่ใช่สิ่งที่คุณขอ แต่ถ้าคุณตั้งค่า ssh ด้วยการส่งต่อ X คุณสามารถเริ่ม emacsclient บนเซิร์ฟเวอร์และส่งต่อไปยัง DISPLAY ระยะไกล (ข้อจำกัดความรับผิดชอบ: รหัสพิมพ์ลงในฟอร์มเว็บโดยตรง)
local> ssh server -f emacsclient -c --display=$DISPLAY
นี่อาจไม่ใช่สิ่งที่คุณต้องการ แต่ในกรณีที่ดูว่ามันสามารถช่วยคุณได้บ้าง
ฉันมักจะทำงานในเครื่องเสมือน bootstrapped กับ Vagrant ฉันมี~/.emacs.d
ไดเรกทอรีของฉันซิงค์ระหว่างเครื่องของฉัน (ในพื้นที่) และเครื่องเสมือน (ระยะไกล) วางไว้ในVagrantfile
ไฟล์:
config.vm.synced_folder "~/.emacs.d", "/home/vagrant/.emacs.d"
นอกจากนี้ Emacs config ของฉันจะเริ่มต้นเซิร์ฟเวอร์โดยอัตโนมัติเมื่อเริ่มต้น:
(require 'server)
(setq server-use-tcp t
server-socket-dir "~/.emacs.d/server")
(unless (server-running-p)
(server-start))
ดังนั้นเมื่อฉันเปิดเซิร์ฟเวอร์ Emacs ภายในเครื่องเสมือนฉันสามารถเชื่อมต่อกับเซิร์ฟเวอร์ดังต่อไปนี้:
ssh -Y -i ~/.vagrant.d/insecure_private_key "<virtual machine hostname>" 'emacsclient -c -f ~/.emacs.d/server/server'
virtual machine hostnameเป็นชื่อโฮสต์ของเครื่องเสมือนที่ฉันกำหนดค่าไว้ใน ~ / .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
หมายเหตุ: ก่อนที่จะเปิดตัวเซิร์ฟเวอร์ Emacs ภายในเครื่องเสมือนฉันตรวจสอบว่า~/.emacs.d/server/server
ไฟล์นั้นไม่มีอยู่ (หากฉันเพิ่งลบออก) เพราะมิเช่นนั้นจะไม่ทำงาน
.ssh/config
ไฟล์ของคุณ Host
คุณเพียงแค่ต้องระบุ สงสัยคุณสามารถใช้ผลลัพธ์ของคำสั่ง: vagrant ssh-config
เพื่อตั้งค่า~/.ssh/config
ไฟล์ของคุณ
เปิดไฟล์ระยะไกลโดยอัตโนมัติใน emacs ท้องถิ่น
ฉันประสบความสำเร็จด้วยวิธีแก้ปัญหาแรก ครั้งที่สองดูเหมือนจะง่ายกว่านี้ฉันยังลองดู