$HOME 不是应该是用户主目录的位置吗?

$HOME 不是应该是用户主目录的位置吗?

我在编写 Web 应用程序时遇到问题:以 user 身份运行的 Web 应用程序nobody需要启动一个inkscape进程来操作某些 SVG 文件。因为它以 user 身份运行nobody,所以没有主目录。我正在做的是在下创建一个临时目录/tmp并尝试通过export HOME=/tmp/someUniqueId.然后,我在该“临时”主目录中设置了一些内容,例如.fonts指向要使用的字体文件的文件夹的符号链接。

我知道这适用于查找~/.fonts目录。但是当我启动 Inkscape 时,我收到的只是一条消息,指出 Inkscape 无法创建目录.inkscape

无法创建目录 /.inkscape

没有$HOME设置我的主目录的位置?为什么 Inkscape 仍然尝试/作为我的主目录进行访问?

答案1

Inkscape 是一个 GTK 应用程序,使用 GLibg_get_home_dir函数查找用户的主目录。正如该链接中记录的那样,g_get_home_dir不咨询$HOME,而是咨询/etc/passwd。您必须$HOME先修补 Inkscape 才能进行检查(如该链接所示)。

答案2

是的,当前用户的主目录应该是环境变量HOME指示的任何目录。当然,有一个全局系统设置: 中的条目/etc/passwd,或者更一般地说是用户数据库中的 home 字段。应用程序应该仅使用该设置来查找当前用户以外的用户,或者是否存在安全应用程序(例如 setuid 程序)。否则$HOME应优先。如果没有,那就是应用程序中的错误。

cjm 的回答显示 Inkscape 和其他 Gnome 应用程序越野车在这方面。

相关内容