현재 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/server
Emacs-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))