Emacsサーバーは通常、ローカルのUnixドメインソケットで接続を待ち受けます。MS-Windowsなどの一部のオペレーティングシステムではローカルソケットがサポートされていないため、その場合は代わりにTCPソケットを使用します。ローカルソケットがサポートされている場合でも、例えばリモートマシンからEmacsサーバーに接続する必要がある場合など、サーバーにTCPソケットで接続を待ち受けさせることが有用なケースがあります。server-use-tcp に nil
以外を設定することで、EmacsにローカルソケットではなくTCPソケットで接続を待ち受けさせることができます。OSがローカルソケットをサポートしていない場合、これがデフォルトとなります。
EmacsサーバーがTCPを使用するように設定されている場合、デフォルトではlocalhostインターフェース上のランダムなポートで待ち受けます。これは、変数server-hostおよびserver-portを使用して、別のインターフェースや固定ポートに変更できます。
TCPソケットはファイルシステムの権限の影響を受けません。どのユーザーがTCPソケット経由でEmacsサーバーと通信できるかについて一定の制御を維持するため、emacsclientプログラムは認証キーをサーバーに送信する必要があります。このキーは通常、Emacsサーバーによってランダムに生成されます。これが推奨される動作方式です。
必要に応じて、server-auth-key
変数を設定することで、認可キーを静的な値に指定できます。キーは、スペースを除く64文字のASCII印字可能文字で構成されている必要があります(つまり、‘!’から‘~’まで、または10進コード33から126までの文字です)。M-x
server-generate-key を使用すると、ランダムなキーを取得できます。
TCP Emacsサーバーを起動すると、Emacsはemacsclientがサーバーに接続する際に使用するTCP情報を含むサーバーファイルを作成します。変数server-auth-dirはサーバーファイルが格納されるデフォルトのディレクトリを指定し、デフォルトでは~/.emacs.d/server/となります。ファイル権限を持つローカルソケットが存在しない場合、このディレクトリの権限によって、どのユーザーがemacsclientプロセスでEmacsサーバーと通信できるかが決まります。server-nameが絶対ファイル名である場合、サーバーファイルはそのファイル名で指定された場所に作成されます。
emacsclient に特定のサーバーファイルを用いて TCP
経由でサーバーに接続させるには、‘-f’ または ‘--server-file’ オプションを使用するか、環境変数 EMACS_SERVER_FILE を設定してください(emacsclient
オプション を参照)。server-auth-dir
に非標準的な値が設定されている場合、または server-name
に絶対ファイル名が設定されている場合は、emacsclient
にサーバーファイルへの絶対ファイル名を指定する必要があります。これは、デフォルトの server-auth-dir が相対ファイル名の解決用ディレクトリとして使用されるよう emacsclient にハードコードされているためです。