[windows] Emacs-호출시 오류 (서버 시작)

현재 Windows Vista SP1에서 GNU Emacs 23.0.93.1을 사용하고 있습니다. 내 .emacs 파일 에서을 호출하면 The directory ~ / .emacs.d / server is unsafe(server-start) 메시지와 함께 오류가 발생합니다 . 누구든지 이것을 보았고 수정 또는 해결 방법을 알고 있습니까? … 서버를 끄는 것 외에는;)

다음은 스택 추적입니다.

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)



답변

EmacsWiki에서이 솔루션을 찾았습니다.

“문제는 계정에 대한”관리자 “권한도있을 때 ~ / .emacs.d / server 디렉토리의 소유권입니다. ~ / .emacs.d / server 디렉토리를 만들고이 디렉토리의 소유자를 로그인으로 설정합니다. “네덜란드어”버전의 Windows 7을 사용하고 있으므로 영어 용어를 정확히 모르지만 절차는 다음과 같습니다.

~ / .emacs.d / server에서 R-mouse를 클릭하고 “속성”(메뉴의 마지막 항목)을 선택합니다. 속성에서 “보안”탭을 선택한 다음 “고급”버튼을 선택합니다. 그런 다음 “소유자”탭을 선택하고 소유자를에서 Administrators (<your-pc-name>\Administrators)로 변경합니다 <your-login-name> (<your-pc-name>\<your-login-name>. 이제 서버 코드는 사용자가 소유자이므로이 디렉토리를 안전한 것으로 승인합니다.

이것이 여러분 모두에게 도움이되기를 바랍니다. 어쨌든 문제가 해결되었습니다.

WKR Reutefleut “

Emacs 23.2.1과 함께 Vista에서 확실히 작동합니다.


답변

나는 larsreed에 대해 좋아하지만 사용할 준비가 된 complite 코드 :

( '서버 필요)
(그리고 (> = emacs-major-version 23)
           (동일한 윈도우 시스템 'w32))
  (defun server-ensure-safe-dir (dir) "Noop"t)); 오류 "디렉토리 표시 안함
                                                 ; ~ / .emacs.d / server is unsafe "
                                                 ; 창문에.
(서버 시작)

내 블로그 기사 http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html 에서이 문제를 설명합니다.

또한 2009-09-19에서 server-ensure-safe-dir에 대한 버그 # 4197을 수정 했으므로 들어오는 Emacs 23.2에서는이 해결 방법이 필요하지 않습니다.

최근에 출시 된 Emacs 23.2에서 다음과 같은 경고가 있습니다.

경고 (서버) : ~/.emacs.d/serverEmacs-server 인증 파일을 저장하는 데 사용 합니다. FAT32 파일 시스템의 디렉토리는 변조로부터 안전하지 않습니다. 자세한 내용은 변수 server-auth-dir를 참조하십시오.

경고로이 문제를 해결하려면 server-auth-dir을 NTFS 파티션 %APPDATA%으로 지정할 수 있습니다 ( 일반적으로 Windows에 %SYSTEMDRIVE%있으며 사용자는 일반적으로 시스템 드라이브를 NTFS 파티션으로 포맷).

( '서버 필요)
(및 (eq window-system 'w32) (file-exists-p (getenv "APPDATA")))
  (setq server-auth-dir (concat (getenv "APPDATA") "/.emacs.d/server"))
  (메이크 디렉토리 서버 인증 디렉토리))
(서버 시작)


답변

이것은 Windows에서 알려진 Emacs 버그입니다. 해결 방법은 server.el의 server-ensure-safe-dir에서이 줄을 주석 처리하는 것입니다. 변경 후 바이트 재 컴파일을 원할 것입니다.

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


답변

lisp 디렉토리에서 해킹을 방지하려면 .emacs에 다음을 추가하면됩니다.

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


답변

또한 서버가 배치 모드로 시작되는 것을 원하지 않습니다. 내 .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는 다시 시작되지 않습니다! 확실한 해결책은 누락 된 디렉토리를 만들고 다시 시도하는 것입니다. 나는 그물 어딘가에서 해결책을 찾았지만 실제로 어디에 있는지 기억할 수 없습니다. 다음 코드는 내 여러 Windows 컴퓨터에서 수년간 성공적으로 실행됩니다.

(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를 실행할 때도 작동합니다.

도움이 되었기를 바랍니다.


답변

Windows 7에서 나를 위해 작동하지 않았습니다.

대신 server-ensure-safe-dir의 주석을 읽고 % APPDATA % forlder 및 하위 폴더에 대한 소유권을 가져 왔습니다. 그들은 내가 아닌 로컬 관리자가 소유했습니다.

도움이되었습니다!


답변

gavenkoa의 매우 유용한 답변입니다. Emacs 24.1, Windows 2003에서이 문제가 발생합니다.

불행히도 첫 번째 스 니펫에서 제안한 것처럼 server-ensure-safe-dir을 noop로 재정의하는 것이 모든 상황에서 작동하지 않았습니다. 특히, (server-start)가 적어도 한 번 실행되기 전에 적용하면 작동하지 않았습니다. 왜냐하면 초기 실행 이 존재하지 않는 경우 디렉토리생성 되기 때문 입니다. noop 버전을 사용하면 디렉토리가 전혀 생성되지 않습니다.

오류 메시지를 제거하고 디렉토리를 올바르게 생성하는 동안 나를 위해 일한 해결 방법은 Emacs 초기화 파일의 (server-start) 앞에 넣은 다음 코드였습니다. 여기서 발생하는 오류를 무시하도록 server-ensure-safe-dir에 대한 조언을 제공합니다. 문제의 근본 원인을 해결하지는 못하지만 나에게는 충분합니다.

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