Другое предложение.
Когда/если это будет принято в основном дереве ядра Linux, Вы сможете использовать Перекрестный патч Присоединения Памяти Christopher Yeoh. См. документацию для process_vm_readv, например.
Учитывая дополнительную информацию, я предполагаю, что Ваш emacsclient подключает к "несправедливости" emacs сервер. (Или лучше, первый, который был запущен: последующие вызовы emacs --daemon
не запустит сервер, так как коммуникационный сокет уже используется.), Если emacs демон был запущен в предыдущем X сессий, то они используют неправильные учетные данные для соединения с этими X дисплеями и таким образом перестали работать.
Можно узнать, какой процесс emacs выполняет сервер путем соединения с ним в non-graphics/tty режиме; выполненный emacsclient в терминале с -nw
опция:
emacsclient -nw
Можно уничтожить выполнение emacs путем выполнения его код LISP через emacsclient:
emacsclient -t --eval '(progn (server-save-buffers-kill-terminal 1) (save-buffers-kill-emacs 1))'
где:
-t
опция (искажают для -nw
или --tty
) должен избежать Emacs, соединяющегося с этими X дисплеями;server-save-buffers-kill-terminal
отсоединяет emacsclient, прежде чем Вы скажете Emacs останавливаться (иначе, что он выпустит подсказку подтверждения);save-buffers-kill-emacs
функция - то, что обычно вызывается C-x C-c
, аргумент 1
говорит Emacs не просить подтверждение.Кроме того, я предполагаю причину, у Вас есть так многие emacs --daemon
выполнение состоит в том, что Вы вызываете emacsclient с --alternate-editor=""
опция: страница справочника emacsclient (1) состояния, что:
Если значение (альтернатива) РЕДАКТОР является пустой строкой, то Emacs запускается в режиме демона, и emacsclient попытается соединиться с ним.
Это мог быть более оптимальный вариант запуститься emacs --daemon
из Ваших X сценариев запуска сессии (например, .gnomerc
или сессия GNOME configutation) так, чтобы менеджер сеансов заботился об уничтожении emacs демона, когда сессия завершится.
Я думаю, что предполагаю то, что продолжается. Я должен был бы знать больше о том, как Вы входите в систему и как Вы запускаете Emacs, чтобы сказать Вам, как зафиксировать его.
X программ должны иметь два сведения для соединения с X дисплеями. Это должно знать название дисплея, который обычно берется от DISPLAY
переменная среды. Это также должно иметь пароль для дисплея, названного X cookie, и обычно хранившийся в названном файле ~/.Xauthority
или указал XAUTHORITY
переменная среды. (Больше объяснений здесь)
Я подозреваю, что Emacsclient передает правильную информацию о дисплее (:0.0
) к основному процессу Emacs, но это не передает X cookie. Обычно Emacsclient отправляет свою собственную среду (включая XAUTHORITY
если существующий), к серверу Emacs и двум процессам имеют доступ к той же файловой системе для чтения файла cookie. Это перестало работать здесь.
Для обнаружения, почему, вот вопросы, ответы которых, вероятно, будут полезны:
$XAUTHORITY
? (Если сброшено, это - как будто значение было ~/.Xauthority
.)$XAUTHORITY
? (ps -C emacs wwe
или grep -az XAUTHORITY= /proc/$(pidof emacs)/environ
)