web-dev-qa-db-fra.com

Emacs - Erreur lors de l'appel (démarrage du serveur)

J'utilise actuellement GNU Emacs 23.0.93.1 dans Windows Vista SP1. Dans mon fichier .emacs, je passe un appel à (server-start) qui provoque une erreur avec le message Le répertoire ~/.emacs.d/server est non sécurisé . Quelqu'un at-il vu cela et connaissez-vous une solution ou une solution de contournement? ... autre que laisser le serveur éteint;) 

Voici la trace de la pile:

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

J'ai trouvé cette solution sur EmacsWiki:

"Le problème est la propriété du répertoire ~/.emacs.d/server lorsque vous disposez également des droits" Administrateurs "sur votre compte. Créez le répertoire ~/.emacs.d/server et définissez le propriétaire de ce répertoire sur votre compte Comme je possède une version «néerlandaise» de Windows 7, je ne connais pas exactement les termes anglais, mais voici la procédure à suivre:

Cliquez avec le bouton droit de la souris sur ~/.emacs.d/server et sélectionnez "Propriétés" (dernier élément du menu). À partir de Propriétés, sélectionnez l’onglet «Sécurité», puis le bouton «Avancé». Sélectionnez ensuite l'onglet «Propriétaire» et remplacez le propriétaire de Administrators (<your-pc-name>\Administrators) par <your-login-name> (<your-pc-name>\<your-login-name>. Maintenant, le code serveur acceptera ce répertoire comme étant sécurisé car vous en êtes le propriétaire.

J'espère que cela aide pour vous tous, cela a tout de même résolu le problème.

W.K.R. Reutefleut "

Cela fonctionne vraiment sur Vista, avec Emacs 23.2.1.

144
RealityMonster

J'apprécie énormément de choses, mais le code complet est prêt à l'emploi:

 (nécessite 'serveur) 
 (quand (et (> = emacs-major-version 23) 
 (système de fenêtres égal' w32)) 
 (defun server-sure-safe-dir ( dir) "Noop" t)); Supprimer l'erreur "répertoire 
; ~/.Emacs.d/serveur est dangereux" 
 ; sous Windows .
 (démarrage du serveur) 

Je décris ce problème dans mon article de blog http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

Notez également que le 2009-09-19 a corrigé le bogue n ° 4197 relatif à server-sure-safe-dir afin que, dans Emacs 23.2 entrant, cette solution de contournement ne soit pas nécessaire.

Sous Emacs 23.2 récemment publié, j'ai un tel avertissement:

Avertissement (serveur): utilisation de ~/.emacs.d/server pour stocker les fichiers d'authentification Emacs-server . Les répertoires des systèmes de fichiers FAT32 ne sont PAS protégés contre la falsification . Voir la variable server-auth-dir pour plus de détails.

Pour résoudre ce problème, notez que vous pouvez pointer server-auth-dir sur une partition NTFS (%APPDATA% généralement situé sous Windows %SYSTEMDRIVE% et que l'utilisateur formate généralement le lecteur système en tant que partition NTFS):

 (nécessite 'serveur) 
 (quand (et (eq window-system' w32) (fichier-existe-p (getenv "APPDATA")))) 
 (setq server-auth-dir (concat ( getenv "APPDATA") "/.emacs.d/server"))
 (répertoire-serveur rép-auth)) 
 (démarrage du serveur) 
28
gavenkoa

C'est un bogue connu d'Emacs sous Windows. Une solution de contournement consiste à commenter cette ligne dans Server-sure-safe-dir dans server.el, vous voudrez recompiler l'octet après la modification:

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

Pour éviter le piratage dans le répertoire LISP, vous pouvez simplement ajouter ce qui suit à vos .emacs:

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

10
lre

De plus, vous ne voulez pas que le serveur soit démarré en mode batch . Dans mon .emacs j’utilise donc

(defconst --batch-mode 
  (or noninteractive (member "--batch-mode" command-line-args))
  "True when running in batch-mode (--batch-mode command-line switch set).")

et alors

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

Néanmoins, la fonctionnalité du serveur est capricieuse: server-start est lancé lorsque le répertoire% HOME% /. Emacs.d/server n'existe pas. À la suite, Emacs ne redémarrera pas! La solution évidente consiste à créer le répertoire manquant et à réessayer. J'ai trouvé la solution quelque part sur le net mais je ne sais vraiment pas où. Le code suivant fonctionne avec succès depuis des années sur plusieurs de mes machines 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))))
    )
  )

Ce code fonctionne également lorsque vous utilisez Emacs à partir d'un bâton.

J'espère que cela t'aides.

7
Andreas Spindler

Ne fonctionnait pas pour moi sous Windows 7.

Au lieu de cela, j'ai lu les commentaires dans rép_serveur-sure-safe-dir et continué à prendre la propriété de% APPDATA% forlder et des sous-dossiers. Ils appartenaient à des administrateurs locaux, pas à moi.

Cela a aidé!

6
KTa

Très utile réponse de gavenkoa. J'ai ce problème sur Emacs 24.1, Windows 2003.

Malheureusement, le fait de remplacer serveur-sure-safe-dir pour devenir un noop, comme suggéré dans votre premier extrait, ne m'a pas fonctionné dans toutes les situations. Plus précisément, cela ne fonctionnait pas si, auparavant, l'exécution de (server-start) avait été exécutée au moins une fois, parce que l'exécution initiale créerait également créerait le répertoire s'il n'existe pas. Avec la version noop, le répertoire ne serait pas créé du tout.

La solution de contournement qui a fonctionné pour moi en ce sens qu'elle a éliminé le message d'erreur, tout en créant correctement le répertoire, était le code suivant, placé avant (démarrage du serveur) dans mon fichier d'initialisation Emacs. Il conseille à server-sure-safe-dir de ne pas tenir compte des erreurs éventuelles. Ne résout pas la racine du problème, mais assez bien pour moi.

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

Le pas ci-dessous fonctionne pour moi: 1. Exécutez le code ci-dessous en tant que fichier .reg. Emacs win version traitera toutes les valeurs du registre comme 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. Ajoutez le code ci-dessous à votre fichier .emacs/init.el. La clé ici devrait être "server-auth-dir".
(require 'server)
(setq server-auth-dir "~/server")  ;;Server file location
(setq server-name "main_server")   ;;Server mutex file name
(server-start)

Par étapes ci-dessus le mode serveur fonctionne pour moi correctement et parfait.

1
Jesse Peng

Au cas où cela toucherait parfois des personnes, mon poste de travail venait de subir une "migration de domaine", ce qui a ajouté une autre autorisation à chaque fichier de la boîte, puis j'ai commencé à obtenir cette erreur. Après avoir ajouté l'expression à l'expression factice "server-sure-safe-dir", cet échec a échoué.

(Si vous vous demandez, la migration se fera en 2-3 étapes. La première ajoute l'autorisation pour moi dans le domaine cible, puis je suis déplacé vers le domaine cible, puis ils pourraient (je ne suis pas sûr à ce sujet ) supprime la permission de l'ancien domaine. C'est une grande entreprise et de nombreux utilisateurs, ils le font donc en étapes séparées.)

1
David M. Karr

la dernière fois que j'ai essayé, l'extension Shell "S'approprier" a fait le travail

1
insomniaSalt

S'il s'agit du problème de propriété du dossier du serveur identifié par RealityMonster, vous pouvez exécuter cette commande à l'invite de commande windows pour résoudre le problème:

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