我在使用 Nautilus 时遇到了一个问题,除了下载源代码、进行一些更改并自行编译之外,我没有找到任何解决方案。所以现在我有两个版本的 nautilus,来自存储库的官方版本和我的做了一些更改。我想两者都保留。
从应用程序内启动 Nautilus 时,告诉应用程序使用我自己编译的 Nautilus 版本的好方法是什么? (例如用firefox打开Downloads文件夹)
我发现 Firefox 会调用,/usr/bin/nautilus
所以我可以用我自己的程序的符号链接替换它。但是,我相信一旦我安装了 Nautilus 的更新,这个符号链接就会被覆盖。我还有什么可以做的吗?
答案1
我会修复 Nautilus 的打包版本,这乍一看可能令人畏惧,但很容易——尽管它无法在包升级后继续存在,所以它确实需要一些纪律。 (看沃特的回答了解详情。)
根据您的情况,最简单的方法是添加一个转移:
sudo dpkg-divert --divert /usr/bin/nautilus.original --rename /usr/bin/nautilus
这将指示在包尝试安装它时dpkg
重命名/usr/bin/nautilus
为。/usr/bin/nautilus.original
然后您可以添加自己的符号链接,即使 Nautilus 软件包升级,它也将保持不变。要删除它,请运行
sudo dpkg-divert --rename --remove /usr/bin/nautilus
您可以对需要以类似方式替换的任何其他文件应用相同的技术,除了某些在转移时未正确处理的配置文件之外。
答案2
最好的长期解决方案是联系 nautilus 开发人员并与他们合作开发官方 nautilus 代码的补丁,这样一旦更新版本的 nautilus 进入您的系统,您就不需要再处理这个问题了。
假设您已经这样做了,在更改渗透到您的系统之前,您仍然需要处理想要使用您自己的 nautilus 修补版本的问题。
最简单的方法是生成一个已应用补丁的 nautilus 包,并以不会自动升级的方式安装它。
在 Debian 上(根据您正在使用的这个问题的标签),实现这一点的最简单方法是:
apt-get install devscripts
apt-get build-dep nautilus # note, this also pulls in build-essential
apt-get source nautilus
cd nautilus-*
# apply your patch
dch -i
# Set the version number of the new changelog entry to something like x.y.z-a.local,
# where "x.y.z-a" is the version of the package as it existed prior to your patch,
# add a description of the change after the '*', then save and exit the editor
debuild -uc -us -i && sudo debi --upgrade
echo "nautilus hold" | sudo dpkg --set-selections
这会使用您的补丁构建一个新软件包,安装它,然后将其标记在 dpkg 中,以便它不再自动更新。
下次发布软件包的更新版本时,apt 将通知您更新版本存在,但被保留。然后您需要再次执行上述操作。