Actualmente estoy usando GNU Emacs 23.0.93.1 en Windows Vista SP1. En mi archivo .emacs hago una llamada a (server-start)
y eso está causando un error con el mensaje El directorio ~ / .emacs.d / server no es seguro . ¿Alguien ha visto esto y sabe una solución o solución? ... además de dejar el servidor apagado;)
Aquí está el seguimiento de la pila:
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)
svn
cliente configuró ~ / .emacs.d / server en 0755 según mi umask. En lugar de incluirsvn
un script de shell, que frustra el propósito de tener todo lo que necesito para personalizar Emacs en vivo en Subversion, solo hago que Emacs fuerce los permisos correctos cuando se inicia, agregando lo siguiente a~/.emacs.d/init.el
:(set-file-modes (expand-file-name "~/.emacs.d/server") #o700)
Respuestas:
Encontré esta solución en EmacsWiki:
"El problema es la propiedad del directorio ~ / .emacs.d / server cuando también tiene derechos de" administrador "en su cuenta. Cree el directorio ~ / .emacs.d / server y establezca el propietario de este directorio en su nombre de usuario nombre y el problema desapareció. Como tengo una versión "holandesa" de Windows 7, no sé exactamente los términos en inglés, pero aquí está el procedimiento:
Haga clic con el botón derecho del mouse en ~ / .emacs.d / server y seleccione "Propiedades" (último elemento del menú). Desde Propiedades seleccione la pestaña “Seguridad” y luego seleccione el botón “Avanzado”. Luego seleccione la pestaña "Propietario" y cambie el propietario de
Administrators (<your-pc-name>\Administrators)
a<your-login-name> (<your-pc-name>\<your-login-name>
. Ahora el código del servidor aceptará este directorio como seguro porque usted es el propietario.Espero que esto ayude a todos ustedes, me resolvió el problema de todos modos.
WKR Reutefleut "
Definitivamente funciona en Vista, con Emacs 23.2.1.
fuente
Disfruto de responder de larsreed, pero el código completo está listo para usar:
Discuto este problema en mi artículo de blog http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html
También tenga en cuenta que en 2009-09-19 se corrigió el error # 4197 sobre server-verify-safe-dir, por lo que en Emacs 23.2 entrante esta solución no es necesaria.
Bajo Emacs 23.2 recientemente lanzado tengo tal advertencia:
Advertencia (servidor): se usa
~/.emacs.d/server
para almacenar archivos de autenticación del servidor Emacs. Los directorios en los sistemas de archivos FAT32 NO son seguros contra la manipulación. Consulte la variableserver-auth-dir
para obtener más detalles.Para solucionar esto como una advertencia, puede apuntar server-auth-dir a la partición NTFS (
%APPDATA%
generalmente ubicada en Windows%SYSTEMDRIVE%
y el usuario generalmente formatea la unidad del sistema como partición NTFS):fuente
(>= emacs-major-version 23)
. Gracias +1Este es un error conocido de Emacs en Windows. Una solución alternativa es comentar esta línea en server-verify-safe-dir en server.el, después del cambio, querrá volver a compilar el byte:
;; FIXME: Busted on Windows. ;; (eql (nth 2 attrs) (user-uid))
fuente
Para evitar la piratería en el directorio lisp, puede agregar lo siguiente a su .emacs:
(require 'server) (and (>= emacs-major-version 23) (defun server-ensure-safe-dir (dir) "Noop" t))
fuente
(require 'server)
sobre el códigoAdemás, no desea que el servidor se inicie en modo por lotes. En mi .emacs uso
(defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)) "True when running in batch-mode (--batch-mode command-line switch set).")
y entonces
(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))
Aún así, la función del servidor es caprichosa: se
server-start
lanza cuando el directorio % HOME% /. Emacs.d / server no existe. ¡En sucesión, Emacs no se iniciará de nuevo! La solución obvia es crear el directorio que falta y volver a intentarlo; Encontré la solución en algún lugar de la red, pero realmente no recuerdo dónde. El siguiente código se ejecuta con éxito durante años en varias de mis máquinas con 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)))) ) )
Este código también funciona cuando se ejecuta Emacs desde un dispositivo.
Espero que esto ayude.
fuente
(if (not noninteractive) (progn (require 'server) (server-start)))
--batch-mode
como(defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args)))
. Lo arreglo arriba.No funcionó para mí en Windows 7.
En su lugar, leí los comentarios en server-verify-safe-dir y procedí a tomar la propiedad de% APPDATA% forlder y subcarpetas. Eran propiedad de administradores locales, no mía.
¡Eso ayudó!
fuente
Respuesta muy útil de gavenkoa. Tengo este problema en Emacs 24.1, Windows 2003.
Desafortunadamente, anular server-verify-safe-dir para convertirse en un noop, como sugirió en su primer fragmento, no funcionó para mí en todas las situaciones. Específicamente, no funcionó cuando se aplicó antes de que (inicio del servidor) se hubiera ejecutado al menos una vez, porque la ejecución inicial también crearía el directorio , si no existe. Con la versión noop, el directorio no se crearía en absoluto.
La solución que funcionó para mí en el sentido de que eliminó el mensaje de error, mientras seguía creando el directorio correctamente, fue el siguiente código, colocado antes (inicio del servidor) en mi archivo de inicialización de Emacs. Pone un consejo en torno al directorio seguro seguro del servidor para ignorar cualquier error que surja desde allí. No resuelve la causa raíz del problema, pero es lo suficientemente bueno para mí.
(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))
fuente
El siguiente paso me funciona: 1. Ejecute el código siguiente como archivo .reg. La versión win de Emacs tratará cualquier valor en el registro como 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"
(require 'server) (setq server-auth-dir "~/server") ;;Server file location (setq server-name "main_server") ;;Server mutex file name (server-start)
Por los pasos anteriores, el modo de servidor me funciona correctamente y perfecto.
fuente
En caso de que esto afecte ocasionalmente a las personas, mi estación de trabajo simplemente pasó por una "migración de dominio", que agregó otro permiso a cada archivo en la caja, luego comencé a recibir este error. Después de que agregué la expresión al "servidor-asegura-seguro-dir", esto dejó de fallar.
(Si se está preguntando, la migración se realizará en 2-3 pasos. El primero agrega el permiso para mí en el dominio de destino, luego me mueven al dominio de destino, luego podrían (no estoy seguro de esto ) eliminan el permiso para el dominio anterior. Es una gran empresa y muchos usuarios, por lo que lo están haciendo en pasos separados).
fuente
la última vez que lo intenté, la extensión de shell "Tomar posesión" funcionó
fuente
Si se trata del problema de propiedad de la carpeta del servidor que identificó RealityMonster, puede ejecutarlo en el símbolo del sistema de Windows para solucionarlo:
fuente