82

私は現在、WindowsVistaSP1でGNUEmacs23.0.93.1を使用しています。私の.emacsファイルで呼び出しを行うと、 「ディレクトリ〜/ .emacs.d / serverisunsafe」(server-start)というメッセージでエラーが発生します。誰かがこれを見て、修正または回避策を知っていますか?...サーバーをオフのままにする以外;)

スタックトレースは次のとおりです。

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

11 に答える 11

151

私はEmacsWikiでこの解決策を見つけました:

「問題は、アカウントに「管理者」権限もある場合のディレクトリ〜/ .emacs.d / serverの所有権です。ディレクトリ〜/ .emacs.d / serverを作成し、このディレクトリの所有者をログインに設定します名前と問題はなくなりました。Windows7の「オランダ語」バージョンを使用しているため、英語の用語は正確にはわかりませんが、手順は次のとおりです。

〜/ .emacs.d / serverでR-mouseをクリックし、「プロパティ」(メニューの最後の項目)を選択します。[プロパティ]から[セキュリティ]タブを選択し、[詳細]ボタンを選択します。次に、[所有者]タブを選択し、所有者をからに変更Administrators (<your-pc-name>\Administrators)<your-login-name> (<your-pc-name>\<your-login-name>ます。これで、所有者であるため、サーバーコードはこのディレクトリを安全なものとして受け入れます。

これが皆さんのお役に立てば幸いです。とにかく問題は解決しました。

WKRロイトフルート」

それは間違いなくVista、Emacs23.2.1で動作します。

于 2010-05-31T14:37:48.297 に答える
29

私はlarsreedの回答を楽しんでいますが、すぐに使用できる複雑なコードです。

('サーバーが必要)
(when(and(> = emacs-major-version 23)
           (等しいウィンドウシステム'w32))
  (defun server-ensure-safe-dir(dir) "Noop" t)); エラー抑制"ディレクトリ
                                                 ; 〜/ .emacs.d/serverは安全ではありません」
                                                 ; 窓に。
(サーバー開始)

この問題については、ブログ記事http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.htmlで説明しています。

また、2009-09-19でserver-ensure-safe-dirに関するバグ#4197が修正されたため、着信Emacs23.2ではこの回避策は必要ありません。

最近リリースされたEmacs23.2では、次のような警告があります。

警告(サーバー):~/.emacs.d/serverEmacsサーバー認証ファイルの保存に使用します。FAT32ファイルシステム上のディレクトリは、改ざんに対して安全ではありません。詳細については、変数server-auth-dirを参照してください。

警告としてこれを修正するには、server-auth-dirをNTFSパーティション(%APPDATA%通常はWindows%SYSTEMDRIVE%にあり、ユーザーは通常システムドライブをNTFSパーティションとしてフォーマットします)を指すことができます。

('サーバーが必要)
(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))
(サーバー開始)
于 2009-10-14T14:25:01.077 に答える
14

これは、Windowsでの既知のEmacsバグです。回避策は、server.elのserver-ensure-safe-dirのこの行をコメントアウトすることです。変更後にバイトを再コンパイルする必要があります。

;; FIXME: Busted on Windows. 
;; (eql (nth 2 attrs) (user-uid)) 
于 2009-05-20T01:56:20.587 に答える
10

lispディレクトリでのハッキングを避けるために、.emacsに以下を追加するだけです。

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

于 2009-08-21T18:32:54.467 に答える
7

さらに、サーバーをバッチモードで起動する必要はありません。したがって、私の.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))

それでもサーバー機能は気まぐれです:%HOME%/。emacs.d/serverディレクトリが存在しない場合server-startにスローされます。続けて、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を実行するときにも機能します。

お役に立てれば。

于 2011-08-10T11:20:24.833 に答える
6

Windows7では動作しませんでした。

代わりに、server-ensure-safe-dirのコメントを読み、%APPDATA%forlderとsubfoldersの所有権を取得しました。それらは私ではなく、ローカルの管理者によって所有されていました。

それは助けになりました!

于 2010-03-29T06:39:44.997 に答える
3

givenkoaからの非常に役立つ回答。Emacs 24.1、Windows2003でこの問題が発生しています。

残念ながら、最初のスニペットで提案されているように、server-ensure-safe-dirをオーバーライドしてnoopになることは、すべての状況で機能するわけではありませんでした。具体的には、(server-start)が少なくとも1回実行される前に適用された場合は機能しませんでした。これは、ディレクトリが存在しない場合、最初の実行でもディレクトリが作成されるためです。noopバージョンでは、ディレクトリはまったく作成されません。

ディレクトリを適切に作成しながらエラーメッセージを排除するという意味でうまくいった回避策は、Emacs初期化ファイルの前(server-start)にある次のコードでした。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))
于 2013-06-12T15:21:58.517 に答える
3

RealityMonsterが特定したのがサーバーフォルダーの所有権の問題である場合は、Windowsのコマンドプロンプトでこれを実行して修正できます。

takeown /f %USERPROFILE%\.emacs.d\server /r /d y
于 2017-09-01T14:24:57.067 に答える
2

以下の手順は私にとってはうまくいきます:1。以下のコードを.regファイルとして実行します。Emacs winバージョンは、レジストリ内のすべての値をEnvVarとして扱います。

[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.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)

上記の手順により、サーバーモードは正しく完璧に機能します。

于 2015-01-02T16:51:32.580 に答える
1

前回試したとき、「Takeownership」シェル拡張機能がその役割を果たしました

于 2011-07-03T22:17:13.213 に答える
1

これがときどき人々を襲う場合に備えて、私のワークステーションは「ドメイン移行」を通過し、ボックス上のすべてのファイルに別のアクセス許可が追加され、このエラーが発生し始めました。「server-ensure-safe-dir」をダミーアウトする式を追加した後、これは失敗しなくなりました。

(不思議に思うかもしれませんが、移行は2〜3ステップで行われます。最初のステップでターゲットドメインにアクセス許可が追加され、次にターゲットドメインに移動します。その後、移行する可能性があります(これについてはよくわかりません)。 )古いドメインの権限を削除します。これは大企業であり、多くのユーザーがいるため、別々の手順で実行しています。)

于 2010-08-09T23:15:06.707 に答える