Emacs - Ошибка при вызове (запуск сервера)
В настоящее время я использую GNU Emacs 23.0.93.1 в Windows Vista с пакетом обновления 1 (SP1). В моем файле .emacs я делаю вызов (server-start)
и вызывает ошибку с сообщением. Каталог ~/.emacs.d/server небезопасен. Кто-нибудь видел это и знал об исправлении или обходном пути?... кроме того, что сервер выключен;)
Вот трассировка стека:
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)
Ответы
Ответ 1
Я нашел это решение на 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.
Ответ 2
Мне нравится, когда я использую larsreed, но компилирую код, готовый к использованию:
(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 о сервере-security-dir, поэтому во входящем Emacs 23.2 это обходное решение не требуется.
В недавно выпущенном Emacs 23.2 у меня есть такое предупреждение:
Предупреждение (сервер): с помощью ~/.emacs.d/server
для хранения файлов аутентификации Emacs-сервера.
Каталоги на файловых системах FAT32 НЕ защищены от несанкционированного доступа.
Подробнее см. В переменной server-auth-dir
.
Чтобы исправить это, как сказать предупреждение, вы можете указать server-auth-dir на раздел NTFS (%APPDATA%
обычно находится в Windows %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)
Ответ 3
Это известная ошибка Emacs для Windows. Обходной путь состоит в том, чтобы прокомментировать эту строку в
server-обеспечить-safe-dir в server.el, вы захотите перекомпилировать байты после изменения:
;; FIXME: Busted on Windows.
;; (eql (nth 2 attrs) (user-uid))
Ответ 4
Чтобы избежать взлома в каталоге lisp, вы можете просто добавить следующее к своему .emacs:
(require 'server)
(and (>= emacs-major-version 23)
(defun server-ensure-safe-dir (dir) "Noop" t))
Ответ 5
Кроме того, вы не хотите, чтобы сервер запускался в пакетном режиме.
Поэтому в моих .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 из палки.
Надеюсь, что это поможет.
Ответ 6
Не работает для меня в Windows 7.
Вместо этого я прочитал комментарии в файле server-обеспечить-safe-dir и продолжил прием права собственности на% APPDATA% forlder и подпапки. Они принадлежали местным администраторам, а не мне.
Это помогло!
Ответ 7
Очень полезный ответ от гавенькой. У меня проблема с Emacs 24.1, Windows 2003.
К сожалению, переопределение сервера-обеспечения-безопасного-dir, чтобы стать noop, как было предложено в вашем первом фрагменте, не работает для меня во всех ситуациях. В частности, это не сработало, если оно было применено до (запуск сервера) хотя бы один раз, поскольку начальное выполнение также создало каталог, если он не существует, С версией noop каталог не будет создан вообще.
Обходной путь, который работал у меня в том смысле, что он удалил сообщение об ошибке, при правильном создании каталога, был следующим кодом, который был поставлен раньше (сервер-старт) в моем файле инициализации 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))
Ответ 8
В случае, если это время от времени ударяет людей, моя рабочая станция просто прошла "миграцию домена", которая добавила другое разрешение на каждый файл в поле, после чего я начал получать эту ошибку. После того, как я добавил выражение в фиктивный "server-обеспечить-safe-dir", это остановилось.
(Если вам интересно, переход будет выполняться в 2-3 шага. Первый добавит мне разрешение в целевом домене, затем я перейду в целевой домен, тогда они могут (я не обязательно об этом) удалите разрешение для старого домена. Это большая компания и многие пользователи, поэтому они делают это по-отдельности.)
Ответ 9
В прошлый раз, когда я попробовал, расширение оболочки "Взять собственность" выполнило задание
Ответ 10
Ниже мой шаг работает:
1. Выполните код ниже как .reg файл. Версия Emacs win будет обрабатывать любые значения в реестре как 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"
- Добавьте код ниже в ваш .emacs/init.el. Ключ здесь должен быть "server-auth-dir".
(require 'server)
(setq server-auth-dir "~/server") ;;Server file location
(setq server-name "main_server") ;;Server mutex file name
(server-start)
С помощью шагов выше режим сервера работает для меня правильно и идеально.
Ответ 11
Если это проблема с правами на серверную папку, идентифицированная RealityMonster, вы можете запустить ее в командной строке Windows, чтобы исправить ее:
takeown /f %USERPROFILE%\.emacs.d\server /r /d y