Pytanie Emacs - Błąd podczas wywoływania (uruchomienie serwera)


Obecnie używam GNU Emacs 23.0.93.1 w Windows Vista SP1. W moim pliku .emacs dzwonię do (server-start) i to powoduje błąd z komunikatem Katalog ~ / .emacs.d / server jest niebezpieczny. Czy ktoś to widział i zna poprawkę lub obejście? ... poza wyłączaniem serwera;)

Oto ślad stosu:

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)

76
2018-05-20 01:35


pochodzenie


Miałem podobny błąd, zaczynając Emacs na pudełku z Uniksem; okazało się to, ponieważ trzymam moje ~ / .emacs.d w Subversion, a przy kasie svn klient ustawił ~ / .emacs.d / server na 0755 na moją umask. Zamiast owijania svn w skrypcie powłoki, który pokonuje cel posiadania wszystkiego, czego potrzebuję, aby dostosować Emacs do życia w Subversion, po prostu mam Emacs wymuszając odpowiednie uprawnienia podczas uruchamiania, dodając następujące do ~/.emacs.d/init.el: (set-file-modes (expand-file-name "~/.emacs.d/server") #o700) - Aaron Miller


Odpowiedzi:


Znalazłem to rozwiązanie na EmacsWiki:

"Problemem jest własność katalogu ~ / .emacs.d / server, gdy masz również prawa" Administrators "na swoim koncie. Utwórz katalog ~ / .emacs.d / server i ustaw właściciela tego katalogu na swój login Nazwa i problem zniknęły, ponieważ mam "holenderską" wersję systemu Windows 7, nie znam dokładnie angielskich terminów, ale oto procedura:

Kliknij R-mouse na ~ / .emacs.d / server i wybierz "Właściwości" (ostatni element w menu). Z Właściwości wybierz zakładkę "Zabezpieczenia", a następnie wybierz przycisk "Zaawansowane". Następnie wybierz zakładkę "Właściciel" i zmień właściciela z Administrators (<your-pc-name>\Administrators) w <your-login-name> (<your-pc-name>\<your-login-name>. Teraz kod serwera zaakceptuje ten katalog jako bezpieczny, ponieważ jesteś jego właścicielem.

Mam nadzieję, że to pomoże dla was wszystkich, i tak rozwiązali problem.

W.K.R. Reutefleut "

Z pewnością działa na Vista, z Emacs 23.2.1.


141
2018-05-31 14:37



Naprawione! Szkoda, że ​​ten komentarz nie miał wyższego rankingu google i powinien być również odpowiedzią na to pytanie. - Drew
Dzięki - to też działało dla mnie w Windows 7. - steglig
Naprawiono również problem w Windows 7. Z bashu, $ chown -R "$ {USER}" ~ / .emacs.d - luke h
Działa na spacemakach 0.200.1@25.1.1 (dlatego powinien również działać na zwykłych emacs 25.1.1). - gemantzu
chmod 700 też jest OK. - netawater


Podoba mi się anwer z larsreed, ale kod zgodny jest gotowy do użycia:

(wymagają "serwera")
(kiedy (i (> = emacs-major-wersja 23)
           (równy system okien "w32))
  (defun server-zapewnia-safe-dir (dir) "Noop" t)); Pomiń błąd "katalogu
                                                 ; ~ / .emacs.d / serwer jest niebezpieczny "
                                                 ; w oknach.
(uruchomienie serwera)

Zgłaszam ten problem w moim blogu http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

Zauważ też, że w 2009-09-19 naprawiono błąd # 4197 o serwerze-zapewnienia-safe-dir, więc w przychodzącym Emacsie 23.2 to obejście nie jest potrzebne.

W ramach niedawno wydanego Emacs 23.2 mam takie ostrzeżenie:

Ostrzeżenie (serwer): Używanie ~/.emacs.d/server do przechowywania plików uwierzytelniania serwera Emacs. Katalogi na systemach plików FAT32 NIE są zabezpieczone przed manipulowaniem. Zobacz zmienną server-auth-dir dla szczegółów.

Aby rozwiązać ten problem, powiedzmy, że możesz skierować serwer-autoryzowanego do partycji NTFS (%APPDATA% zazwyczaj znajduje się Windows %SYSTEMDRIVE% i użytkownik zwykle formatuje dysk systemowy jako partycję NTFS):

(wymagają "serwera")
(kiedy (i (eq system-okien 'w32) (plik-istnieje-p (getenv "APPDATA")))
  (setq server-auth-dir (concat (getenv "APPDATA") "/.emacs.d/server"))
  (make-directory server-auth-dir))
(uruchomienie serwera)

27
2017-10-14 14:25



używając emacs23 i Windows Vista 64b, naprawiłem to dla mnie. Bez wymaganego serwera nie działa. - Mario F
Dzięki, działa to dla mnie na Win7-64. Uwaga: w EmacsW32 możesz pominąć uruchomienie serwera, tak jak zrobi to później. - harpo
To nadal występuje w Emacs 23.3.1, więc zmieniłem warunek na <code> (= emacs-major-version 23) (> = emacs-minor-version 1) (<= emacs-minor-version 3) </ code> ale to będzie wymagać aktualizacji, jeśli nie jest to poprawione w 23.4 ... Więc zobacz komentarz poniżej @ user160983, który ignoruje wersję emacs-minor - djb
jak komentowałem wcześniejszą odpowiedź, problem występuje w emacs 24, więc warunkowe powinno być (> = emacs-major-wersja 24) - mcheema
@mcheema naprawię (>= emacs-major-version 23). Dziękujemy +1 - gavenkoa


Jest to znany błąd Emacsa w systemie Windows. Rozwiązaniem tego problemu jest skomentowanie tej linii server-ensure-safe-dir w server.el, który będziesz chciał skompilować bajt po zmianie:

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

13
2018-05-20 01:56



Twoje rozwiązanie rozwiązuje mój problem. Zbadam to później i dodam tutaj moje ustalenia. Dzięki! - λ Jonas Gorauskas


Aby uniknąć włamań do katalogu lisp, możesz po prostu dodać następujące elementy do pliku .emacs:

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


9
2017-08-21 18:32



Miałem powyższy problem z Emacsem w Cygwin i powyższe polecenie działało. - MikeHoss
problem występuje również w emacs 24, więc może być (> = emacs-major-wersja 23) - mcheema
dla mnie na Windows 7 z Emacsem 24 nie działało to dopóki nie dodałem linii (require 'server) powyżej kodu - MostlyHarmless


Dodatkowo nie chcesz, aby serwer był uruchamiany w trybie wsadowym. W moim .emacs Dlatego używam

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

i wtedy

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

Wciąż funkcja serwera jest kapryśna: server-start rzuca, gdy % HOME% /. Emacs.d / server katalog nie istnieje. Po kolei Emacs nie uruchomi się ponownie! Oczywistym rozwiązaniem jest utworzenie brakującego katalogu i spróbuj ponownie; Znalazłem rozwiązanie gdzieś w sieci, ale naprawdę nie pamiętam gdzie. Poniższy kod działa z powodzeniem od lat na kilku komputerach z systemem 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))))
    )
  )

Ten kod działa również podczas uruchamiania Emacsa z patyka.

Mam nadzieję że to pomoże.


6
2017-08-10 11:20



Cześć! To nie działa w systemie Linux. command-line-args nigdy nie uwzględnia argumentu --batch. To działa: (if (not noninteractive) (progn (require 'server) (server-start))) - gaizka
Ok dzięki. Więc powinniśmy udoskonalić --batch-mode tak jak (defconst --batch-mode (or noninteractive (member "--batch-mode" command-line-args))). Naprawię to powyżej. - Andreas Spindler


Nie działa dla mnie w Windows 7.

Zamiast tego przeczytałem komentarze w bezpiecznym katalogu dla serwera i przystąpiłem do przejęcia własności dla% APPDATA% forlder i podfolderów. Byli własnością lokalnych administratorów, a nie mnie.

To pomogło!


5
2018-03-29 06:39



Aby rozwinąć: Upewnij się, że katalog% HOME% \. Emacs.d \ server jest własnością użytkownika, a nie lokalnej grupy Administratorzy. - Kristopher Johnson


Bardzo pomocna odpowiedź od gavenkoa. Mam ten problem na Emacs 24.1, Windows 2003.

Niestety, przesłanianie serwera-zapewnienia-bezpiecznego-reżimu, by stał się odlotem, jak zasugerowałem w twoim pierwszym fragmencie, nie działało dla mnie we wszystkich sytuacjach. W szczególności nie działało, gdy zostało zastosowane wcześniej (uruchomienie serwera) co najmniej raz, ponieważ początkowe wykonanie również utwórz katalog, jeśli nie istnieje. W wersji noop katalog nie zostałby w ogóle utworzony.

Obejście, które działało dla mnie w tym sensie, że wyeliminowało komunikat o błędzie, a jednocześnie poprawnie tworzyło katalog, było następującym kodem, umieszczonym przed (start serwera) w moim pliku inicjującym Emacs. Udziela porady na temat bezpieczeństwa serwera, aby zignorować wszelkie błędy z tego wynikające. Nie rozwiązuje głównej przyczyny problemu, ale wystarczająco dobrze dla mnie.

(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
2018-06-12 15:21