在这个答案中,我将重点放在 evince 上,因为您提到这是问题中的关键应用程序。
查看源代码,另存为对话框仅设置默认文件名。由于没有定义文件夹,GTK3 库假定最近使用的文件夹是对话框中显示的第一个文件夹。
GTK3 应用程序必须明确设置要首先搜索的文件夹。
我个人认为应该定义 evince 的默认文件夹 - 因此您应该将其作为错误/愿望清单请求提交到 bugzilla 上。
以下是强制 evince 默认为Documents文件夹而不是之前最近使用的文件夹的一种方法。
总之,源更改为获取默认文档文件夹并将其设置为“另存为”对话框的默认文件夹。

安装基本的开发工具
sudo apt-get install devscripts build-essential fakeroot
Run Code Online (Sandbox Code Playgroud)
获取来源
cd ~/Downloads
mkdir build
cd build
apt-get source evince
cd evince*
Run Code Online (Sandbox Code Playgroud)
做出改变
打开 ev-window.c
gedit shell/ev-window.c
Run Code Online (Sandbox Code Playgroud)
将以下内容复制并粘贴到文件中如图所示的位置
const gchar *folder;
folder = g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS);
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (fc),
folder ? folder : g_get_home_dir ());
Run Code Online (Sandbox Code Playgroud)

保存并关闭gedit
给它一个唯一的包名
好的,我们需要给包一个唯一的名称,以防止存储库更新覆盖您更改的包
gedit debian/更改日志
现在附加+yourname到顶行版本并保存
IE evince (3.2.1-0ubuntu2+fossfreedom)
构建包
sudo apt-get build-dep evince
debuild -us -uc
Run Code Online (Sandbox Code Playgroud)
注意这将下载 161Mb 的依赖项
去喝杯咖啡……可能还有午餐!
cd ..
sudo dpkg -i evince_3.2*.deb
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 为了防止这个新版本的 evince 在未来升级,使用突触来固定这个版本的 evince。