web-dev-qa-db-ja.com

Emacs-(server-start)呼び出し時のエラー

私は現在GNU Windows Vista SP1のEmacs 23.0.93.1を使用しています。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)
81

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

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

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

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

W.K.R.ロイテフロイト」

Emacs 23.2.1を搭載したVistaで確実に機能します。

149
RealityMonster

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

(require 'server)
(when(and(> = emacs-major-version 23)
(equal window-system' w32))
(defun server-ensure-safe-dir(dir) "Noop" t));エラーを抑制 "ディレクトリ
;〜/ .emacs.d/server is unsafe" 
; Windowsの場合。
(server-start)

私は私のブログ記事でこの問題を取り上げます http://brain-break.blogspot.com/2009/08/when-moving-from-gnu-emacs-22.html

また、2009-09-19では、server-ensure-safe-dirに関するバグ#4197を修正したため、着信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)
29
gavenkoa

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

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

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

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

10
lre

さらに、サーバーをバッチモードで起動する必要はありません。私の。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を実行する場合にも機能します。

お役に立てれば。

7

Windows 7では動作しませんでした。

代わりに、server-ensure-safe-dirのコメントを読み、%APPDATA%のフォルダーとサブフォルダーの所有権の取得を続行しました。それらは私ではなく、ローカル管理者が所有していました。

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

6
KTa

ジヴェンコアからの非常に役立つ回答。 Emacs 24.1、Windows 2003でこの問題が発生しています。

残念ながら、最初のスニペットで提案されているように、server-ensure-safe-dirを上書きしてnoopにすることは、すべての状況で機能しませんでした。特に、(server-start)が少なくとも1回実行される前に適用された場合、初期実行も存在しない場合はcreate the directoryであるため、機能しませんでした。 。 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))
3
lbo

以下のステップは私にとってはうまくいきます: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"
  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)

上記の手順で、サーバーモードは私にとって正しく完全に機能します。

2
Jesse Peng

これがときどき人に当たる場合、ワークステーションが「ドメイン移行」を実行しただけで、ボックス上のすべてのファイルに別の権限が追加され、このエラーが発生し始めました。 「server-ensure-safe-dir」をダミーにする式を追加した後、これは失敗しなくなりました。

(疑問に思っている場合、移行は2〜3ステップで行われます。最初の手順では、ターゲットドメインに自分のアクセス許可を追加してから、ターゲットドメインに移動します。 )古いドメインの権限を削除します。これは大企業であり、多くのユーザーであるため、別の手順で実行しています。)

1
David M. Karr

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

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

最後に試してみたところ、「所有権を取得する」シェル拡張が役立った

1
insomniaSalt