Я столкнулся с проблемой с Nautilus, для которой я не нашел никакого решения, кроме как загрузить исходный код, внести некоторые изменения и скомпилировать его самостоятельно. Так что теперь у меня есть две версии nautilus, официальная версия из репозиториев и моя с некоторыми изменениями. Я хотел бы сохранить оба.
Что может быть хорошим способом сказать приложениям использовать мою собственную скомпилированную версию Nautilus при запуске Nautilus из приложения? (например, открытие папки загрузок с помощью Firefox)
Я понял, что вызовы firefox позволяют /usr/bin/nautilus
мне просто заменить это символической ссылкой на мою собственную программу. Однако я полагаю, что эта символическая ссылка будет перезаписана, как только я установлю обновление для Nautilus. Есть ли что-нибудь еще, что я мог сделать?
/usr/local/bin
не сработало? т. е. Firefox проверил ваш файл$PATH
и нашел его версию/usr/bin
, или он (или ваш материал в xdg-open) содержит жесткий код/usr/bin/nautilus
? Установка собственной версии чего-либо в / usr / local обычно работает./usr/bin/nautilus
похоже, как-то жестко запрограммирован. Если он удален, Firefox больше ничего не делает, когда я пытаюсь открыть папку «Downloads», хотя есть символическая ссылка на мою собственную версию nautilus в/usr/local/bin
. Моя$PATH
переменная/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
strace -f -efile,execve -o firefox_syscalls.txt firefox
посмотреть, что делает ff. Если вы ищете в журналеnautilus
, это может вам кое-что показать. (Это-e
фильтрует системные вызовыexecve
и файл open / close / pathname, в противном случае это будет потокfutex
и чтение / запись сокета для X11).Ответы:
Я бы исправил упакованную версию Nautilus, которая на первый взгляд может показаться сложной, но достаточно простой - хотя она не выдерживает обновления пакетов, поэтому требует некоторой дисциплины. (Подробности смотрите в ответе Ваутера.)
Самый простой подход в вашей ситуации - добавить диверсию:
Это указание
dpkg
переименовать/usr/bin/nautilus
в/usr/bin/nautilus.original
каждый раз , когда пакет пытается установить его. Затем вы можете добавить свою собственную символическую ссылку, и она останется нетронутой даже при обновлении пакета Nautilus. Чтобы удалить его, запуститеВы можете применить ту же технику к любому другому файлу, который необходимо заменить аналогичным образом, за исключением некоторых файлов конфигурации, которые не обрабатываются правильно при перенаправлении.
источник
Лучшее долгосрочное решение - связаться с разработчиками nautilus и поработать с ними над патчем к официальному коду nautilus, чтобы после выхода обновленной версии nautilus в вашу систему вам больше не приходилось с этим сталкиваться.
Предполагая, что вы это сделали, до тех пор, пока это изменение не распространится на вашу систему, вам все равно придется решать вопрос о желании использовать вашу собственную исправленную версию nautilus.
Самый простой способ - создать пакет nautilus с уже примененным патчем и установить его таким образом, чтобы он не обновлялся автоматически.
В Debian (который в соответствии с тегами этого вопроса вы используете) самый простой способ сделать это:
Это создаст новый пакет с вашим патчем, установит его, а затем пометит его в dpkg, чтобы он больше не обновлялся автоматически.
В следующий раз, когда будет выпущена обновленная версия пакета, apt сообщит вам, что обновленная версия существует, но задерживается. Затем вам нужно сделать вышеупомянутое снова.
источник
apt-mark hold packagename
это современный способ хранения пакета. (Я даже сделал свои собственныеdpkg-hold
/dpkg-unhold
скрипты вdlocate
использованииapt-mark
вместоdpkg --set-selections
метода они использовали в течение многих лет. Сценарии устарели из - за метким знак , но я до сих пор есть и другие сценарии , которые вызывают их, и их удаление может нарушить скрипты , написанные другими пользователями dlocate пакет)man apt-mark
говоритThe command is only a wrapper around dpkg --set-selections and the state is therefore maintained by dpkg(1) and not affected by the --file option
, так что я думаю, что это мелочь ;-)