emacs не может открыть дисплей

Другое предложение.

Когда/если это будет принято в основном дереве ядра Linux, Вы сможете использовать Перекрестный патч Присоединения Памяти Christopher Yeoh. См. документацию для process_vm_readv, например.

4
25.06.2011, 13:36
3 ответа

Учитывая дополнительную информацию, я предполагаю, что Ваш 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 демона, когда сессия завершится.

3
27.01.2020, 20:56
  • 1
    В ситуации выше (вызывающий emacsclient с - альтернативный редактор = "" опция) Emacs не будет запущен в режиме демона, если это будет уже работать. Клиент будет использовать существующий процесс демона. –  Faheem Mitha 25.06.2011, 19:35
  • 2
    @Faheem Mitha: это - точно точка: если существующий emacs сервер был запущен в предыдущем X сессий, он не сможет подключить к току X дисплеев. –  Riccardo Murri 25.06.2011, 23:47
  • 3
    Хорошо, но я неясен, как это произошло. При каких обстоятельствах у Вас есть emacs сервер, бродящий вокруг от предыдущего X сессий? –  Faheem Mitha 26.06.2011, 02:27
  • 4
    Emacs продолжает бежать за выходом из системы. Затем X изменений учетных данных, аутентификационные ключи являются базирующейся сессией (они, где статичный прежде - хорошо несколько лет назад). –  ctrl-alt-delor 10.08.2011, 11:46

Ошибка Debian № 586685 имеет несколько обходных решений для этой проблемы; это, кажется, изменение, начатое с gdm3 (где файл Xauthority хранится).

Существует восходящая ошибка, зарегистрированная также: ошибка Gnome № 651431.

0
27.01.2020, 20:56

Я думаю, что предполагаю то, что продолжается. Я должен был бы знать больше о том, как Вы входите в систему и как Вы запускаете Emacs, чтобы сказать Вам, как зафиксировать его.

X программ должны иметь два сведения для соединения с X дисплеями. Это должно знать название дисплея, который обычно берется от DISPLAY переменная среды. Это также должно иметь пароль для дисплея, названного X cookie, и обычно хранившийся в названном файле ~/.Xauthority или указал XAUTHORITY переменная среды. (Больше объяснений здесь)

Я подозреваю, что Emacsclient передает правильную информацию о дисплее (:0.0) к основному процессу Emacs, но это не передает X cookie. Обычно Emacsclient отправляет свою собственную среду (включая XAUTHORITY если существующий), к серверу Emacs и двум процессам имеют доступ к той же файловой системе для чтения файла cookie. Это перестало работать здесь.

Для обнаружения, почему, вот вопросы, ответы которых, вероятно, будут полезны:

  • Из чего значение $XAUTHORITY? (Если сброшено, это - как будто значение было ~/.Xauthority.)
  • Где тот файл и каковы полномочия на нем?
  • Были процесс Emacs и текущий клиент запущены в другом контексте в некотором роде (машина, пользователь, chroot, …)?
  • Делает процесс Emacs, имеют другое значение для $XAUTHORITY? (ps -C emacs wwe или grep -az XAUTHORITY= /proc/$(pidof emacs)/environ)
  • Как Вы входите в систему (в менеджере по оформлению (который), в текстовом режиме, по SSH, …)? Как процесс Emacs запускается (с где, в какой точка)? Это запускается как демон?
1
27.01.2020, 20:56
  • 1
    : 1&2), # $ll$XAUTHORITY-rw-------1 richard richard 49 25 июня 9:21/var/run/gdm3/auth-for-richard-XY3O 5) gdm (рабочий стол никакая сеть), я использую emacsclient - альтернативного редактора = ""-c без ожидания для перевода в рабочее состояние окна и emacsclient - альтернативного редактора = "" - $file без ожидания для открытия файла. Это работает ко дню. Я попробую к тому, чтобы выходить и зашедшему снова. –  ctrl-alt-delor 25.06.2011, 11:41
  • 2
    Это кажется, у меня есть некоторое старое emacs выполнение серверов. Это с новым аутентификационным ключом каждая сессия (я предполагаю, как это находится в / var), # $ps ux | grep [e] macs richard 2642 0.0 0.8 38788 24984? Ss Jun22 0:25 emacs - демон richard 7512 0.0 0.6 33896 19720? Ss Jun23 0:05 emacs - демон richard 15458 0.0 0.6 32836 19076? Ss 9:40 0:01 emacs - демон –  ctrl-alt-delor 25.06.2011, 12:05

Теги

Похожие вопросы