引子

近日发现Linux家目录中总会“自动”生成一个叫Desktop的空文件夹,很是烦人。在各类常用软件中排查了很久,最终发现是火狐浏览器在启动时生成了它。然而软件内并没有任何关于Desktop文件夹的设置条目。

解决方法

因为火狐参考了XDG Base Directory规则,所以使用user-dirs.dirs文件指定XDG_DESKTOP_DIR即可。

touch ~/.config/user-dirs.dirs  #创建文件
echo XDG_DESKTOP_DIR=\"$(echo $HOME)\" >>~/.config/user-dirs.dirs #指定XDG_DESKTOP_DIR为家目录

为什么要有Desktop

Firefox有一个功能,将网页中的链接拖拽到桌面上,能自动生成一个快捷方式。具体功能可在about:configbrowser.shell.shortcutFavicons配置。官方说明网页

创建Desktop的逻辑

  if (dir) {
rv = NS_NewNativeLocalFile(nsDependentCString(dir), true,
getter_AddRefs(file));
free(dir);
} else if (Unix_XDG_Desktop == aSystemDirectory) {
// for the XDG desktop dir, fall back to HOME/Desktop
// (for historical compatibility)
rv = GetUnixHomeDir(getter_AddRefs(file));
if (NS_FAILED(rv)) {
return rv;
}

rv = file->AppendNative(NS_LITERAL_CSTRING("Desktop"));
} else {
// no fallback for the other XDG dirs
rv = NS_ERROR_FAILURE;
}

使用DXR的搜索功能,在xpcom/io/SpecialSystemDirectory.cpp文件第392行开始,摘录代码片段如上。可见当火狐发现XDG_DESKTOP_DIR没有经过配置时,会主动赋值 成$HOME/Desktop。对于XDG的其余配置并没有特殊的判断,并在第419行进行XDG配置项的目录创建操作。完整代码请参考FYI中提供的链接。

FYI