मैं दूरस्थ emacs इंस्टेंस से कनेक्ट करने के लिए एमसेक्शिएंट का उपयोग कैसे करूं?


44

मैं एक कंप्यूटर पर emacs चलाने में सक्षम होना चाहता हूं:

server $ emacs --daemon

और फिर इसे दूसरे से कनेक्ट करें:

local $ emacsclient -c server

क्या यह संभव है? यदि हां, तो कैसे?


1
बस एक संकेत: यदि आपको दूरस्थ Emacs सत्र चालू रखने की आवश्यकता नहीं है और आप बस Emacs के साथ दूरस्थ होस्ट पर फ़ाइलों को संपादित करना चाहते हैं, तो आप TRAMP को आज़माना चाहते हैं, जो आपको पारदर्शी रूप से नेटवर्क पर फ़ाइलों को संपादित करने देता है।
पपरिका

@paprika मुझे लगता है कि ओपी स्थानीय रूप से एक दूरस्थ emacs कॉन्फ़िगरेशन का उपयोग करना चाहता है। इसलिए ट्रम्प उपयुक्त नहीं हो सकता है। यही कारण है कि मैंने अपने उत्तर को अस्वीकरण के साथ जोड़ दिया।
वामसी

3
StackOverflow पर इस विषय पर एक चर्चा हुई है: stackoverflow.com/questions/12546722/…
क्रैश कोरडम्प

जवाबों:


21

आप दूरस्थ कंप्यूटर पर चल रहे Emacs इंस्टेंस से कनेक्ट करने के लिए एमैक्शिएंट का उपयोग नहीं कर सकते। यह क्लाइंट-सर्वर अवधारणा (स्थानीय) प्रक्रियाओं से संबंधित है, न कि नेटवर्क नोड्स से। हालाँकि, आप दूरस्थ कंप्यूटर में लॉग इन करने के लिए विभिन्न नेटवर्क तकनीकों का उपयोग कर सकते हैं, वहां चल रहे एक एमएसीएस सर्वर से जुड़ सकते हैं और स्थानीय स्तर पर एमएसीएसक्लिएंट की स्क्रीन प्रदर्शित कर सकते हैं। ऑपरेटिंग सिस्टम पर निर्भर करता है कि नेटवर्किंग का उपयोग एसएसएच (टर्मिनल / एक्स-फ़ॉरवर्डिंग), वीएनसी, आरडीपी आदि के माध्यम से किया जा सकता है।

अद्यतन :
जैसा कि कुछ लोगों ने बताया, वास्तव में emacsclient में TCP के माध्यम से सर्वर से जुड़ने का विकल्प होता है। हालांकि, खाली करने का मतलब दूर से इस्तेमाल नहीं किया जाना था, गैर-यूनिक्स सिस्टम (यानी ऑपरेटिंग सिस्टम जहां यूनिक्स डोमेन सॉकेट उपलब्ध नहीं हैं, विंडोज की तरह) के साथ संगतता के लिए टीसीपी सॉकेट विकल्प की आवश्यकता होती है।


4
इस पोस्ट के अनुसार आपका कथन बिल्कुल सही नहीं है। क्या आप अधिक विस्तार से बताएंगे?।
डीजेजे

5
@paprika: नहीं, टीसीपी कनेक्शन के लिए उपयोग किए जाने वाले प्रमाणीकरण तंत्र को विशेष रूप से रिमोट-एक्सेस केस के लिए डिज़ाइन किया गया था। मैंने विंडोज़ साइड पर टीसीपी के उपयोग के लिए धक्का दिया ताकि रिमोट कनेक्शन के लिए कोड पॉसिक्स पर भी उपयोगी हो, इस प्रकार विंडोज-विशिष्ट कोड को कम करने और पॉसिक्स साइड में कार्यक्षमता को जोड़ने के लिए।
स्टीफन

9

संभवतः आपने जो मांगा नहीं था, लेकिन मान लिया कि आपके पास एक्स-फ़ॉर्वर्डिंग के साथ ssh सेटअप है, तो आप सर्वर पर खाली करना शुरू कर सकते हैं और इसे दूरस्थ DISPLAY को अग्रेषित कर सकते हैं। (अस्वीकरण: कोड सीधे वेबफॉर्म में टाइप किया गया)

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

नहीं, यह सवाल अप्रासंगिक है।
10

4

यह वह नहीं हो सकता जो आप चाहते हैं, लेकिन सिर्फ मामले में देखें कि क्या यह आपकी किसी तरह से मदद कर सकता है।

मैं आमतौर पर एक आभासी मशीन के अंदर काम करता हूं जिसे वैग्रंट के साथ बूटस्ट्रैप किया गया है, मेरे पास मेरी ~/.emacs.dनिर्देशिका है जो मेरी मशीन (स्थानीय) और वर्चुअल मशीन (रिमोट) के बीच समन्वयित करती है और Vagrantfileफ़ाइल में निम्नलिखित डालती है :

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

इसके अलावा, मेरा Emacs कॉन्‍फ़िगरेशन स्‍वचालित रूप से स्‍टार्टअप पर सर्वर शुरू करता है:

(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'

वर्चुअल मशीन होस्टनाम उस वर्चुअल मशीन का होस्टनाम है जिसे मैंने अपने ~ / .shsh / 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फ़ाइल सेट करने के लिए ।
अलेक्जेंड्रो डी ओलिवेरा

3

emacsclient और TRAMP

स्थानीय emacs में दूरस्थ फ़ाइलों को स्वचालित रूप से खोलें

मुझे पहले उपाय से सफलता मिली है। दूसरा सरल प्रतीत होता है, मैं अभी इसे आज़मा रहा हूँ।


7
उत्तर दिलचस्प लग रहा है, लेकिन कृपया लिंक लिंक न करें। कुछ अंश और स्निपेट शामिल करें ताकि उत्तर अपने पैरों पर खड़ा हो।
मालाबार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.