ฉันจะใช้ emacsclient เพื่อเชื่อมต่อกับอินสแตนซ์ emacs ระยะไกลได้อย่างไร


44

ฉันต้องการที่จะสามารถเรียกใช้ emacs บนคอมพิวเตอร์เครื่องเดียว:

server $ emacs --daemon

และเชื่อมต่อกับมันจากที่อื่น:

local $ emacsclient -c server

เป็นไปได้ไหม ถ้าเป็นเช่นนั้นได้อย่างไร


1
เพียงคำใบ้: หากคุณไม่ต้องการให้เซสชัน Emacs ระยะไกลทำงานอยู่และคุณต้องการแก้ไขไฟล์ในรีโมตโฮสต์ด้วย Emacs คุณอาจต้องการลองใช้ TRAMP ซึ่งช่วยให้คุณสามารถแก้ไขไฟล์ผ่านเครือข่ายได้อย่างโปร่งใส
paprika

@prika ฉันคิดว่า OP ต้องการใช้การกำหนดค่า emacs ระยะไกลในเครื่อง ดังนั้น TRAMP อาจไม่เหมาะสม นั่นคือเหตุผลที่ฉันนำหน้าคำตอบของฉันด้วยข้อจำกัดความรับผิดชอบ
Vamsi

3
มีการอภิปรายเกี่ยวกับ StackOverflow ในหัวเรื่อง: stackoverflow.com/questions/12546722/…
Crash Coredump

คำตอบ:


21

คุณไม่สามารถใช้ emacsclient เพื่อเชื่อมต่อกับอินสแตนซ์ Emacs ที่ทำงานบนคอมพิวเตอร์ระยะไกล แนวคิดไคลเอ็นต์ - เซิร์ฟเวอร์นี้เกี่ยวข้องกับกระบวนการ (โลคัล) ไม่ใช่โหนดเครือข่าย อย่างไรก็ตามคุณสามารถใช้เทคโนโลยีเครือข่ายที่หลากหลายเพื่อเข้าสู่ระบบคอมพิวเตอร์ระยะไกลเชื่อมต่อกับเซิร์ฟเวอร์ emacs ที่ทำงานอยู่ที่นั่นและแสดงหน้าจอของ emacsclient ภายในเครื่อง ขึ้นอยู่กับระบบปฏิบัติการที่ใช้เครือข่ายสามารถทำได้ผ่าน SSH (terminal / X-Forwarding), VNC, RDP เป็นต้น

UPDATE :
บางคนชี้ให้เห็นว่า emacsclient มีตัวเลือกในการเชื่อมต่อกับเซิร์ฟเวอร์ผ่าน TCP อย่างไรก็ตาม emacsclient ไม่ได้หมายถึงการใช้จากระยะไกลตัวเลือกซ็อกเก็ต TCP เป็นสิ่งจำเป็นสำหรับความเข้ากันได้กับระบบที่ไม่ใช่ UNIX (เช่นระบบปฏิบัติการที่ซ็อกเก็ตโดเมน UNIX ไม่พร้อมใช้งานเช่น Windows)


4
ตามโพสต์ข้อความของคุณไม่ถูกต้องตรงนี้ คุณเจาะจงมากกว่านี้ไหม.
DJJ

5
@paprika: ไม่กลไกการรับรองความถูกต้องที่ใช้สำหรับการเชื่อมต่อ TCP ได้รับการออกแบบมาโดยเฉพาะสำหรับกรณีการเข้าถึงระยะไกล ฉันผลักสำหรับการใช้ TCP ทางฝั่ง Windows เพื่อให้รหัสนี้มีประโยชน์ใน POSIX สำหรับการเชื่อมต่อระยะไกลซึ่งช่วยลดรหัสเฉพาะ Windows และเพิ่มฟังก์ชันการทำงานให้กับด้าน POSIX
สเตฟาน

9

อาจไม่ใช่สิ่งที่คุณขอ แต่ถ้าคุณตั้งค่า ssh ด้วยการส่งต่อ X คุณสามารถเริ่ม emacsclient บนเซิร์ฟเวอร์และส่งต่อไปยัง DISPLAY ระยะไกล (ข้อจำกัดความรับผิดชอบ: รหัสพิมพ์ลงในฟอร์มเว็บโดยตรง)

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

ไม่มันไม่เกี่ยวข้องกับคำถาม
heroxbd

4

นี่อาจไม่ใช่สิ่งที่คุณต้องการ แต่ในกรณีที่ดูว่ามันสามารถช่วยคุณได้บ้าง

ฉันมักจะทำงานในเครื่องเสมือน 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ไฟล์นั้นไม่มีอยู่ (หากฉันเพิ่งลบออก) เพราะมิเช่นนั้นจะไม่ทำงาน


เพิ่งรู้ว่าคุณกำลังโทรหา emacsclient ในเซิร์ฟเวอร์ระยะไกล ในกรณีดังกล่าวคุณไม่ต้องส่งไฟล์เซิร์ฟเวอร์อย่างชัดเจนเนื่องจาก emacsclient จะเชื่อมต่อกับเซิร์ฟเวอร์แรกที่พบโดยอัตโนมัติ
Vamsi

คุณไม่จำเป็นต้องระบุไฟล์กุญแจส่วนตัวในบรรทัดคำสั่งหากคุณมีไฟล์ข้อมูลประจำตัวของคุณตั้งค่าอย่างถูกต้องใน.ssh/configไฟล์ของคุณ Hostคุณเพียงแค่ต้องระบุ สงสัยคุณสามารถใช้ผลลัพธ์ของคำสั่ง: vagrant ssh-configเพื่อตั้งค่า~/.ssh/configไฟล์ของคุณ
Alexandro de Oliveira

3

emacsclient และ TRAMP

เปิดไฟล์ระยะไกลโดยอัตโนมัติใน emacs ท้องถิ่น

ฉันประสบความสำเร็จด้วยวิธีแก้ปัญหาแรก ครั้งที่สองดูเหมือนจะง่ายกว่านี้ฉันยังลองดู


7
คำตอบดูน่าสนใจ แต่โปรดอย่าโพสต์ลิงก์เท่านั้น รวมข้อความที่ตัดตอนมาบางส่วนและตัวอย่างเพื่อให้คำตอบยืนอยู่บนเท้าของตัวเอง
Malabarba
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.