सवाल Emacs - कॉल करते समय त्रुटि (सर्वर-स्टार्ट)


मैं वर्तमान में विंडोज विस्टा एसपी 1 में जीएनयू Emacs 23.0.93.1 का उपयोग कर रहा हूँ। मेरी .emacs फ़ाइल में मैं कॉल करता हूं (server-start) और यह संदेश के साथ एक त्रुटि पैदा कर रहा है निर्देशिका ~ / .emacs.d / सर्वर असुरक्षित है। क्या किसी ने इसे देखा है और एक फिक्स या वर्कअराउंड पता है? ... सर्वर छोड़ने के अलावा बंद;)

यहां स्टैक ट्रेस है:

Debugger entered--Lisp error: (error "The directory ~/.emacs.d/server is unsafe")
  signal(error ("The directory ~/.emacs.d/server is unsafe"))
  error("The directory %s is unsafe" "~/.emacs.d/server")
  server-ensure-safe-dir("~\\.emacs.d\\server\\")
  server-start(nil)
  call-interactively(server-start t nil)
  execute-extended-command(nil)
  call-interactively(execute-extended-command nil nil)

76
2018-05-20 01:35


मूल


यूनिक्स बॉक्स पर Emacs शुरू करने में मुझे एक ही त्रुटि हुई; यह इसलिए हुआ क्योंकि मैं subversion में ~ / .emacs.d रखता हूं, और चेकआउट पर svn क्लाइंट सेट ~ / .emacs.d / सर्वर पर मेरे umask प्रति 0755। लपेटने के बजाय svn एक शेल स्क्रिप्ट में, जो सबकुछ को अनुकूलित करने के उद्देश्य से हर चीज को हराने के उद्देश्य से हराता है, इमेक्स सबवर्सन में रहते हैं, मेरे पास अभी शुरू होने पर Emacs सही अनुमतियों को मजबूर करता है, ~/.emacs.d/init.el: (set-file-modes (expand-file-name "~/.emacs.d/server") #o700) - Aaron Miller


जवाब:


मुझे EmacsWiki पर यह समाधान मिला:

"समस्या निर्देशिका ~ / .emacs.d / सर्वर का स्वामित्व है जब आपके खाते पर" व्यवस्थापक "अधिकार भी हैं। निर्देशिका ~ / .emacs.d / सर्वर बनाएं और इस निर्देशिका के मालिक को अपने लॉगिन में सेट करें नाम और समस्या चली गई है। चूंकि मेरे पास विंडोज 7 का "डच" संस्करण है, इसलिए मुझे अंग्रेजी शब्द बिल्कुल नहीं पता लेकिन यहां प्रक्रिया है:

~ / .Emacs.d / सर्वर पर आर-माउस पर क्लिक करें और "गुण" (मेनू में अंतिम आइटम) का चयन करें। गुणों से टैब "सुरक्षा" का चयन करें और फिर "उन्नत" बटन का चयन करें। फिर टैब "स्वामी" का चयन करें और मालिक को बदलें Administrators (<your-pc-name>\Administrators) में <your-login-name> (<your-pc-name>\<your-login-name>। अब सर्वर कोड इस निर्देशिका को सुरक्षित के रूप में स्वीकार करेगा क्योंकि आप मालिक हैं।

उम्मीद है कि यह आपके सभी लोगों के लिए मदद करता है, यह वैसे भी मेरे लिए समस्या हल हो गया।

W.K.R. Reutefleut "

यह निश्चित रूप से Vista पर काम करता है, Emacs 23.2.1 के साथ।


141
2018-05-31 14:37



ठीक कर दिया! मेरी इच्छा है कि इस टिप्पणी में Google रैंकिंग अधिक हो और यह इस प्रश्न का उत्तर भी होना चाहिए। - Drew
धन्यवाद - यह मेरे लिए विंडोज 7 पर भी काम करता है। - steglig
विंडोज 7 पर भी समस्या को ठीक किया गया। बैश से, $ chown -R "$ {USER}" ~ / .emacs.d - luke h
यह स्पेसमैक्स 0.200.1@25.1.1 पर काम करता है (इसलिए इसे सादे emacs 25.1.1 पर भी काम करना चाहिए)। - gemantzu
chmod 700 भी ठीक है। - netawater


मैं लालसा के एवर का आनंद लेता हूं, लेकिन उपयोग करने के लिए तैयार कोड को अनुपालन करता हूं:

('सर्वर की आवश्यकता है)
(जब (और (> = emacs-major-version 23)
           (बराबर विंडो-सिस्टम 'w32))
  (सर्वर-सुनिश्चित-सुरक्षित-डीआईआर (डीआईआर) "नोओप" टी को हटाएं); त्रुटि दबाएं "निर्देशिका
                                                 ; ~ / .emacs.d / सर्वर असुरक्षित है "
                                                 ; खिड़कियों पर
(सर्वर शुरू)

मैं इस ब्लॉग को अपने ब्लॉग आलेख में मिटा देता हूं http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

यह भी ध्यान रखें कि 2009-09-19 में निश्चित बग # 4197 सर्वर-सुनिश्चित-सुरक्षित-डीआईआर के बारे में निश्चित रूप से आने वाले Emacs 23.2 में इस कामकाज की आवश्यकता नहीं है।

हाल ही में जारी किए गए Emacs 23.2 के तहत मुझे ऐसी चेतावनी है:

चेतावनी (सर्वर): का उपयोग करना ~/.emacs.d/server Emacs- सर्वर प्रमाणीकरण फ़ाइलों को स्टोर करने के लिए। FAT32 फाइल सिस्टम पर निर्देशिका छेड़छाड़ के खिलाफ सुरक्षित नहीं हैं। चर देखें server-auth-dir ब्योरा हेतु।

इसे चेतावनी के रूप में ठीक करने के लिए आप सर्वर-एथ-डीआईआर को एनटीएफएस विभाजन में इंगित कर सकते हैं (%APPDATA% आमतौर पर विंडोज स्थित है %SYSTEMDRIVE% और उपयोगकर्ता आमतौर पर एनटीएफएस विभाजन के रूप में सिस्टम ड्राइव प्रारूपित करते हैं):

('सर्वर की आवश्यकता है)
(जब (और (eq विंडो-सिस्टम 'w32) (फ़ाइल-मौजूद-पी (getenv "APPDATA")))
  (setq सर्वर-auth-dir (concat (getenv "APPDATA") "/.emacs.d/server"))
  (मेक-निर्देशिका सर्वर-औथ-डीआईआर))
(सर्वर शुरू)

27
2017-10-14 14:25



Emacs23 और विंडोज विस्टा 64 बी का उपयोग करके, यह मेरे लिए तय है। आवश्यकता के बिना सर्वर काम नहीं किया। - Mario F
धन्यवाद, यह Win7-64 पर मेरे लिए काम करता है। EmacsW32 के साथ नोट आप सर्वर-स्टार्ट छोड़ सकते हैं, क्योंकि यह बाद में ऐसा करेगा। - harpo
यह अभी भी Emacs 23.3.1 में होता है इसलिए मैंने स्थिति को <code> (= emacs-major-version 23) (> = emacs-minor-version 1) (<= emacs-minor-version 3) में बदल दिया है </ code> लेकिन अगर इसे 23.4 में तय नहीं किया गया है तो उसे अद्यतन करने की आवश्यकता होगी .... तो, नीचे दिए गए टिप्पणी को @ user160983 द्वारा देखें जो emacs-minor-version संस्करण को अनदेखा करता है - djb
जैसा कि मैंने पहले के जवाब पर टिप्पणी की थी, समस्या 24 में emacs में मौजूद है, इसलिए सशर्त होना चाहिए (> = emacs-major-version 24) - mcheema
@ mcheema मैं ठीक करने के लिए (>= emacs-major-version 23)। धन्यवाद +1 - gavenkoa


यह विंडोज पर एक ज्ञात Emacs बग है। इस लाइन में टिप्पणी करने के लिए एक कामकाज है सर्वर-सर्वर-सुरक्षित-डीआईआर सर्वर में। आप परिवर्तन के बाद बाइट recompile करना चाहते हैं:

;; FIXME: Busted on Windows. 
;; (eql (nth 2 attrs) (user-uid)) 

13
2018-05-20 01:56



आपका समाधान मेरी समस्या को हल करता है। मैं बाद में इसकी जांच करूंगा और यहां अपने निष्कर्ष जोड़ूंगा। धन्यवाद! - λ Jonas Gorauskas


लिस्प निर्देशिका में हैकिंग से बचने के लिए, आप बस अपने .emacs में निम्नलिखित जोड़ सकते हैं:

(require 'server) (and (>= emacs-major-version 23) (defun server-ensure-safe-dir (dir) "Noop" t))


9
2017-08-21 18:32



मेरे पास सिग्विन में Emacs के साथ उपरोक्त मुद्दा था और उपरोक्त आदेश काम किया। - MikeHoss
समस्या emacs 24 में भी होती है, इसलिए शायद एक (> = emacs-major-version 23) उपयुक्त होगा - mcheema
मेरे लिए विंडोज 7 पर Emacs 24 के साथ यह तब तक काम नहीं करता जब तक कि मैंने लाइन जोड़ा नहीं (require 'server) कोड के ऊपर - MostlyHarmless


इसके अतिरिक्त आप नहीं चाहते कि सर्वर बैच-मोड में शुरू किया जाए। मेरे में .emacs इसलिए मैं उपयोग करता हूं

(defconst --batch-mode 
  (or noninteractive (member "--batch-mode" command-line-args))
  "True when running in batch-mode (--batch-mode command-line switch set).")

और फिर

(unless --batch-mode
  (require 'server)
  (when (and (= emacs-major-version 23)
         (= emacs-minor-version 1)
         (equal window-system 'w32))
    ;; Suppress error "directory ~/.emacs.d/server is unsafe" on Windows.
    (defun server-ensure-safe-dir (dir) "Noop" t))
  (server-start))

फिर भी सर्वर सुविधा मज़बूत है: server-start जब फेंकता है % गृह% /। Emacs.d / सर्वर निर्देशिका मौजूद नहीं है। उत्तराधिकार में Emacs फिर से शुरू नहीं होगा! स्पष्ट समाधान लापता निर्देशिका बनाना और पुनः प्रयास करना है; मुझे नेट पर कहीं भी समाधान मिला लेकिन वास्तव में याद नहीं किया जा सकता है। निम्नलिखित कोड कई वर्षों से सफलतापूर्वक चलाता है मेरी कई विंडोज मशीनों पर:

(unless --batch-mode
  (require 'server)
  (when (and (= emacs-major-version 23)
         (= emacs-minor-version 1)
         (equal window-system 'w32))
    ;; Suppress error "directory ~/.emacs.d/server is unsafe" on Windows.
    (defun server-ensure-safe-dir (dir) "Noop" t))
  (condition-case nil
      (server-start)
    (error
     (let* ((server-dir (if server-use-tcp server-auth-dir server-socket-dir)))
       (when (and server-use-tcp
          (not (file-accessible-directory-p server-dir)))
     (display-warning
      'server (format "Creating %S" server-dir) :warning)
     (make-directory server-dir t)
     (server-start))))
    )
  )

एक छड़ी से Emacs चलाते समय यह कोड भी काम करता है।

उम्मीद है की यह मदद करेगा।


6
2017-08-10 11:20



नमस्ते! यह लिनक्स पर काम नहीं कर रहा है। कमांड लाइन-args में कभी भी मेरा - बैच तर्क शामिल नहीं है। यह काम: (if (not noninteractive) (progn (require 'server) (server-start))) - gaizka
ठीक है धन्यवाद। तो फिर हमें परिष्कृत करना चाहिए --batch-mode जैसा (defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)))। मैं इसे ऊपर ठीक करता हूँ। - Andreas Spindler


विंडोज 7 में मेरे लिए काम नहीं किया।

मैंने इसके बजाय सर्वर-स्वीकार्य-सुरक्षित-डीआईआर में टिप्पणियां पढ़ीं और% APPDATA% फोल्डर और उपफोल्डर के लिए स्वामित्व लेने के साथ आगे बढ़े। वे स्थानीय प्रशासकों के स्वामित्व में थे, मेरे द्वारा नहीं।

इससे मदद मिली!


5
2018-03-29 06:39



विस्तारित करने के लिए: सुनिश्चित करें कि निर्देशिका% HOME% \। Emacs.d \ सर्वर आपके स्वामित्व में है, न कि स्थानीय व्यवस्थापक समूह द्वारा। - Kristopher Johnson


Gavenkoa से बहुत उपयोगी जवाब। मुझे Emacs 24.1, Windows 2003 पर यह समस्या है।

दुर्भाग्य से, आपके पहले स्निपेट में सुझाए गए अनुसार, नोप बनने के लिए सर्वर-सुनिश्चित-सुरक्षित-डीआईआर ओवरराइड करना, सभी स्थितियों में मेरे लिए काम नहीं करता था। विशेष रूप से, यह कम से कम एक बार (सर्वर-स्टार्ट) निष्पादित किए जाने पर लागू होने पर काम नहीं करता था, क्योंकि प्रारंभिक निष्पादन भी होता निर्देशिका बनाएँ, अगर यह अस्तित्व में नहीं है। नोप संस्करण के साथ, निर्देशिका बिल्कुल नहीं बनाई जाएगी।

कामकाज जिसने मेरे लिए काम किया है, यह त्रुटि संदेश को समाप्त कर दिया है, जबकि अभी भी निर्देशिका को सही तरीके से बना रहा है, निम्न कोड था, मेरी Emacs प्रारंभिक फ़ाइल में पहले (सर्वर-स्टार्ट) डालें। यह वहां से उठाए गए किसी भी त्रुटि को अनदेखा करने के लिए सर्वर-सुनिश्चित-सुरक्षित-डीआईआर के आसपास एक सलाह देता है। समस्या के मूल कारण को हल नहीं करता है, लेकिन मेरे लिए काफी अच्छा है।

(defadvice server-ensure-safe-dir (around
                                   my-around-server-ensure-safe-dir
                                   activate)
  "Ignores any errors raised from server-ensure-safe-dir"
  (ignore-errors ad-do-it))

3
2018-06-12 15:21





यदि यह कभी-कभी लोगों को हिट करता है, तो मेरा वर्कस्टेशन सिर्फ "डोमेन माइग्रेशन" के माध्यम से चला गया, जिसने बॉक्स पर प्रत्येक फ़ाइल को एक और अनुमति दी, फिर मुझे यह त्रुटि मिलनी शुरू हुई। "सर्वर-सुनिश्चित-सुरक्षित-डीआईआर" में डमी को अभिव्यक्ति जोड़ने के बाद यह असफल रहा।

(यदि आप सोच रहे हैं, माइग्रेशन 2-3 चरणों में होगा। पहला व्यक्ति लक्ष्य डोमेन में मेरे लिए अनुमति जोड़ता है, तो मुझे लक्ष्य डोमेन में ले जाया जाता है, तो वे (मुझे इस बारे में निश्चित नहीं है ) पुराने डोमेन के लिए अनुमति हटा दें। यह एक बड़ी कंपनी है, और कई उपयोगकर्ता हैं, इसलिए वे इसे अलग-अलग चरणों में कर रहे हैं।)


1
2017-08-09 23:15





पिछली बार मैंने कोशिश की, "स्वामित्व ले लो" खोल विस्तार ने काम किया


1
2017-07-03 22:17