J'ai rencontré un problème avec Nautilus pour lequel je n'ai trouvé aucune solution autre que de télécharger le code source, d'apporter quelques modifications et de le compiler par moi-même. Alors maintenant, j'ai deux versions de nautilus, la version officielle des dépôts et la mienne avec quelques changements. Je voudrais garder les deux.
Quelle serait une bonne façon de dire aux applications d'utiliser ma propre version compilée de Nautilus lors du démarrage de Nautilus depuis l'application? (par exemple, ouverture du dossier Téléchargements avec Firefox)
J'ai compris que firefox appelle /usr/bin/nautilus
pour que je puisse simplement le remplacer par un lien symbolique vers mon propre programme. Cependant, je pense que ce lien symbolique sera écrasé dès que j'installerai une mise à jour pour Nautilus. Puis-je faire autre chose?
/usr/local/bin
n'a pas fonctionné? c.-à-d. Firefox a-t-il recherché$PATH
et trouvé la version dans/usr/bin
, ou est-ce (ou votre truc xdg-open) un code dur/usr/bin/nautilus
? L'installation de votre propre version de quelque chose dans / usr / local fonctionne normalement./usr/bin/nautilus
semble être codé en dur d'une manière ou d'une autre. S'il est supprimé, Firefox ne fait plus rien lorsque j'essaie d'ouvrir le dossier Téléchargements, bien qu'il existe un lien symbolique vers ma propre version de Nautilus dans/usr/local/bin
. Ma$PATH
variable est/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
strace -f -efile,execve -o firefox_syscalls.txt firefox
pour voir ce que ff fait. Si vous recherchez le journalnautilus
, cela pourrait vous montrer quelque chose. (Cela-e
filtre les appels systèmeexecve
et les fichiers open / close / pathname, sinon ce serait un flot defutex
lecture / écriture de socket pour X11).Réponses:
Je corrigerais la version packagée de Nautilus, qui peut sembler intimidante au premier abord, mais qui est assez facile - bien qu'elle ne survive pas aux mises à niveau du package, elle nécessite donc une certaine discipline. (Voir la réponse de Wouter pour plus de détails.)
L'approche la plus simple dans votre situation est d'ajouter un détournement:
Cela demandera
dpkg
de renommer/usr/bin/nautilus
à/usr/bin/nautilus.original
chaque fois qu'un paquet essaie de l' installer. Ensuite, vous pouvez ajouter votre propre lien symbolique, et il restera intact même lorsque le package Nautilus est mis à niveau. Pour le supprimer, exécutezVous pouvez appliquer la même technique pour tout autre fichier que vous devez remplacer de la même manière, à l'exception de certains fichiers de configuration qui ne sont pas traités correctement lorsqu'ils sont détournés.
la source
La meilleure solution à long terme est de contacter les développeurs de nautilus et de travailler avec eux sur un correctif au code nautilus officiel, de sorte qu'une fois que la version mise à jour de nautilus arrivera sur votre système, vous n'aurez plus à vous en occuper.
En supposant que vous l'ayez fait, jusqu'à ce que ce changement se répercute sur votre système, vous devrez toujours résoudre le problème de vouloir utiliser votre propre version corrigée de nautilus.
Le moyen le plus simple est de produire un paquet de nautilus avec votre patch déjà appliqué, et de l'installer de manière à ce qu'il ne soit pas mis à jour automatiquement.
Sur Debian (qui, selon les balises que vous utilisez sur cette question), la façon la plus simple d'y parvenir est:
Cela crée un nouveau package avec votre correctif, l'installe, puis le marque dans dpkg afin qu'il ne soit plus mis à jour automatiquement.
La prochaine fois qu'une version mise à jour du package sera publiée, apt vous informera qu'une version mise à jour existe, mais qu'elle est bloquée. Vous devez ensuite refaire ce qui précède.
la source
apt-mark hold packagename
est la façon moderne de tenir un colis. (J'ai même fait mes propresdpkg-hold
/dpkg-unhold
scriptsdlocate
utilisé auapt-mark
lieu de ladpkg --set-selections
méthode qu'ils avaient utilisé pendant des années. Les scripts sont obsolètes en raison de apt-marque mais j'ai encore d' autres scripts qui les appellent, et les enlever peut casser des scripts écrits par d' autres utilisateurs de le package dlocate)man apt-mark
ditThe 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
, donc je pense que c'est une chose mineure ;-)