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