Emacs загружает файл конфигурации пользователя после su в root - PullRequest
0 голосов
/ 16 мая 2019

На моем обработчике чисел ArchLinux у меня есть две учетные записи: учетная запись пользователя (benj) и учетная запись root.

Для выполнения административных задач я подключаюсь к компьютеру с использованием своей учетной записи пользователя.С открытой оболочкой я переключаюсь на root с помощью su.

Запуск emacs теперь показывает ошибку, что что-то пошло не так во время инициализации

Warning (initialization): An error occurred while loading ‘/home/benj/.emacs.d/init.el’:

File is missing: Cannot open load file, No such file or directory, ~/.emacs.d/init-modules/emacs-lisp-package-archive.el

To ensure normal operation, you should investigate and remove the cause of the error in your initialization file.  Start Emacs with the ‘--debug-init’ option to view a complete error backtrace.

My ~benj/.emacs.d/init.el является модульным, а ~root/.emacs.d/init.el -не.Я не понимаю, почему emacs пытается загрузить файл конфигурации моего пользователя.

echo $HOME              # Shows /root
alias | grep emacs      # Shows nothing
which emacs             # /user/bin/emacs
emacs --version         # GNU Emacs 26.1
                        # Copyright (C) 2018 Free Software Foundation, Inc.
                        # GNU Emacs comes with ABSOLUTELY NO WARRANTY.
                        # You may redistribute copies of GNU Emacs
                        # under the terms of the GNU General Public License.
                        # For more information about these matters, see the file named COPYING.

Однако при входе в систему root с TTY1, M-x describe-variable на user-init-file возвращает ожидаемое /root/.emacs.d/init.el

1 Ответ

1 голос
/ 19 мая 2019

C-h i g (emacs)Find Init говорит:

Как Emacs находит ваш файл инициализации

Обычно Emacs использует переменную окружения "HOME" (* note HOME: General Переменные.) Чтобы найти «.emacs»; это то, что означает в имени файла. Если E .emacs ’не найден внутри‘ ~ / ’(ни‘ .emacs.el ’), Emacs ищет ‘~ / .Emacs.d / init.el’ (который, как ‘~ / .emacs.el’, может быть скомпилирован байтово).

Однако, если вы запускаете Emacs из оболочки, запущенной с помощью 'su', Emacs пытается чтобы найти свой собственный .emacs, а не пользователя, которым вы сейчас являетесь притворяется Идея в том, что вы должны получить свой собственный редактор настройки, даже если вы работаете как суперпользователь.

Точнее, Emacs сначала определяет, какой пользовательский файл инициализации использовать. Он получает ваше имя пользователя из переменных окружения ‘LOGNAME’ и «USER»; если ни один из них не существует, он использует эффективный идентификатор пользователя. Если это имя пользователя соответствует реальному идентификатору пользователя, тогда Emacs использует «HOME»; иначе, он ищет домашний каталог, соответствующий этому имени пользователя в база данных пользователей системы.

...