防止火狐生成Desktop文件夹
引子
近日发现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:config
的browser.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
-
Youtube - 演示Firefox创建链接的快捷方式(Windows, FF58)
-
Mozilla Support - How do I stop firefox from recreating unwanted Desktop directory?
-
ArchLinux Forum - Firefox: stop making that Desktop directory!
-
Mozilla DXR - 源码:SpecialSystemDirectory.cpp
-
GNOME Wiki - XDG Base Directory Specification Usage
-
freedesktop.org Specifications - XDG Base Directory Specification