Emacs-ошибка при вызове (server-start)



в настоящее время я использую GNU Emacs 23.0.93.1 в Windows Vista SP1. В моем.файл 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.dserver")
server-start(nil)
call-interactively(server-start t nil)
execute-extended-command(nil)
call-interactively(execute-extended-command nil nil)
636   11  

11 ответов:

Я нашел это решение на EmacsWiki:

" проблема заключается в принадлежности каталога ~/.в Emacs.d / server, когда у вас также есть права "администраторы" на вашей учетной записи. Создайте каталог ~/.в Emacs.d / server и установите владельца этого каталога на свое имя входа, и проблема исчезнет. А у меня есть "голландская" версия Windows 7, я точно не знаю английских терминов, но вот процедура:

нажмите R-мышь на~/.в Emacs.d / server и выберите "Свойства" (последний пункт в меню). Из свойств выберите вкладку "Безопасность", а затем нажмите кнопку"Дополнительно". Затем выберите вкладку "владелец" и измените владельца с Administrators (<your-pc-name>\Administrators) на <your-login-name> (<your-pc-name>\<your-login-name>. Теперь код сервера будет принимать этот каталог как безопасный, потому что вы являетесь владельцем.

надеюсь, это поможет для всех вас, ребята, это решило проблему для меня в любом случае.

W. K. R. Reutefleut"

Он определенно работает на Vista, с Emacs 23.2.1.

мне нравится anwer larsreed, но complite код готов к использованию:

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

Я обсуждаю этот вопрос в своей статье в блоге http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

Также обратите внимание, что в 2009-09-19 Исправлена ошибка #4197 о server-ensure-safe-dir, поэтому во входящем Emacs 23.2 этот обходной путь не требуется.

под недавно выпущенным Emacs 23.2 у меня есть такое предупреждение:

предупреждение (сервера): с помощью ~/.emacs.d/server для хранения файлов аутентификации Emacs-server. Каталоги в файловых системах FAT32 не защищены от несанкционированного доступа. Ознакомиться с переменной server-auth-dir для сведения.

чтобы исправить это, как говорят предупреждение, вы можете указать server-auth-dir на раздел NTFS (%APPDATA% обычно расположены окна %SYSTEMDRIVE% и пользователь обычно форматирует системный диск как раздел NTFS):

(require 'server)
(when (and (eq window-system 'w32) (file-exists-p (getenv "APPDATA")))
  (setq server-auth-dir (concat (getenv "APPDATA") "/.emacs.d/server"))
  (make-directory server-auth-dir)  )
(server-start)

Это известная ошибка Emacs в Windows. Обходной путь состоит в том, чтобы закомментировать эту строку server-ensure-safe-dir в сервере.el вы хотите, чтобы байт перекомпилировать после изменения:

;; 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 бросает, когда % HOME%/.в Emacs.d / server каталог не существует. Последовательно 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.

Я вместо того, чтобы читать комментарии в сервер-обеспечить безопасный-Dir и продолжила принимая право собственности на папке %AppData% каталоге и вложенных папок. Они принадлежали местным администраторам, а не мне.

что помогли!

очень полезный ответ от gavenkoa. У меня возникла эта проблема на Emacs 24.1, Windows 2003.

к сожалению, переопределение server-ensure-safe-dir, чтобы стать noop, как было предложено в вашем первом фрагменте, не сработало для меня во всех ситуациях. В частности, он не работал, когда применялся раньше (запуск сервера) выполнялся хотя бы один раз, потому что первичное исполнение также создать каталог, если он не существует. С версией noop, каталог не будет создан вообще.

обходной путь, который работал для меня в том смысле, что он устранил сообщение об ошибке, все еще создавая каталог правильно, был следующий код, поставленный перед (запуск сервера) в моем файле инициализации Emacs. Он помещает совет вокруг 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))

в случае, если это иногда поражает людей, моя рабочая станция просто прошла через "миграцию домена", которая добавила еще одно разрешение на каждый файл в поле, затем я начал получать эту ошибку. После того, как я добавил выражение для манекена "server-ensure-safe-dir", это прекратило сбой.

(Если вам интересно, миграция будет в 2-3 шагах. Первый добавляет разрешение для меня в целевой домен, затем я перемещаюсь в целевой домен, тогда они могут (я не уверен об этом) удалите разрешение для старого домена. Это большая компания и много пользователей, поэтому они делают это отдельными шагами.)

в последний раз, когда я пытался, расширение оболочки "Take ownership" выполнило эту работу

ниже Шаг работает для меня: 1. Выполнить код ниже .reg-файл. Emacs win version будет обрабатывать любые значения в реестре как Env Var.

[HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs]
"HOME"="C:/<your_emacs_home>"
"EMACS_SERVER_FILE"="C:/<your_emacs_home>/server/main_server"
"ALTERNATE_EDITOR"="C:/<your_emacs_loc>/bin/runemacs.exe"
  1. добавить код ниже в ваш .emacs / init.Эль. Ключ здесь должен быть "server-auth-dir".
(require 'server)
(setq server-auth-dir "~/server")  ;;Server file location
(setq server-name "main_server")   ;;Server mutex file name
(server-start)

по шагам выше режим сервера работает для меня правильно и идеально.

Если это проблема владения папкой сервера, которую RealityMonster определил, то вы можете запустить это в командной строке windows, чтобы исправить это:

takeown /f %USERPROFILE%\.emacs.d\server /r /d y

Comments

    Ничего не найдено.