Emacs 在 su 到 root 后加载用户配置文件
Posted
技术标签:
【中文标题】Emacs 在 su 到 root 后加载用户配置文件【英文标题】:Emacs loading user configuration file after su to root 【发布时间】:2019-05-16 05:33:09 【问题描述】:在我的 ArchLinux 数字计算器上,我有两个帐户:一个用户帐户 (benj) 和 root 帐户。
对于管理任务,我使用我的用户帐户 ssh 进入机器。打开外壳后,我使用 su 切换到 root。
现在运行 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.
我的~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.
但是,在 TTY1 上登录 root 时,user-init-file
上的 M-x describe-variable
返回预期的 /root/.emacs.d/init.el
【问题讨论】:
我不明白为什么 emacs 试图加载我用户的配置文件。您的意思是它正在尝试加载根配置文件?您说过根目录不包含init-modules
文件夹,对吧?错误说emacs基本上找不到init-modules
文件夹。
错误信息显示:An error occurred while loading '/home/benj/.emacs.d/init.el
。所以他试图加载用户 benj
的配置文件,而不是 root
的文件。但是,他在通过 TTY1 登录时加载了root
的配置
【参考方案1】:
C-hig (emacs)Find Init
说:
Emacs 如何找到你的初始化文件
通常 Emacs 使用环境变量 ‘HOME’ (*note HOME: General 变量。)查找“.emacs”;这就是“~”在文件名中的含义。如果 '.emacs' 在'~/' 中找不到(也不是'.emacs.el'),Emacs 寻找 ‘~/.emacs.d/init.el’(与‘~/.emacs.el’一样,可以进行字节编译)。
但是,如果你从一个由“su”启动的 shell 运行 Emacs,Emacs 会尝试 找到您自己的“.emacs”,而不是您当前的用户 假装是。这个想法是你应该拥有自己的编辑器 即使您以超级用户身份运行,也可以自定义。
更准确地说,Emacs 首先确定要使用哪个用户的 init 文件。 它从环境变量“LOGNAME”和 '用户';如果这些都不存在,则它使用有效的用户 ID。如果说 用户名与真实用户 ID 匹配,然后 Emacs 使用“HOME”;除此以外, 它查找与该用户名对应的主目录 系统的用户数据库。
【讨论】:
emacs 是怎么做到的? 我不确定我是否理解这个问题。您是否在询问引文最后一段中未详细说明的内容? 这很烦人。我在我的用户初始化文件中使用带有 ~ 的路径,所以在 su root 之后,emacs 加载用户初始化文件但将 ~ 扩展为 root,所以它得到所有路径错误:( @knarf 您是说上面引用的文档在您的情况下不正确吗?哪个版本的 Emacs?您的版本中的手册是否与我引用的内容相同?在使用su
之后,您是否检查了所有提到的环境变量?以上是关于Emacs 在 su 到 root 后加载用户配置文件的主要内容,如果未能解决你的问题,请参考以下文章
linux 禁止普通用户使用su切换到root用户和禁止 root ssh登陆
用ssh远程登录服务器时,怎么直接以root用户登录?(需要修改配置,如果不想修改,可以先用普通用户登录再su切换到root用户)
Linux下文件 ~/.bashrc 和 ~/.bash_profile 和 /etc/bashrc 和 /etc/profile 的区别 | 用户登录后加载配置文件的顺序