Ich bin auf ein Problem mit Nautilus gestoßen, für das ich keine andere Lösung gefunden habe, als den Quellcode herunterzuladen, einige Änderungen vorzunehmen und ihn selbst zu kompilieren. Jetzt habe ich zwei Versionen von Nautilus, die offizielle Version aus den Repositories und meine mit ein paar Änderungen. Ich möchte beides behalten.
Was wäre eine gute Möglichkeit, Anwendungen anzuweisen, meine eigene kompilierte Version von Nautilus zu verwenden, wenn Nautilus innerhalb der Anwendung gestartet wird? (zB Öffnen des Downloads-Ordners mit Firefox)
Ich habe herausgefunden, dass Firefox aufruft, /usr/bin/nautilus
damit ich dies einfach durch einen Symlink zu meinem eigenen Programm ersetzen kann. Ich glaube jedoch, dass dieser Symlink überschrieben wird, sobald ich ein Update für Nautilus installiere. Kann ich sonst noch etwas tun?
/usr/local/bin
hat nicht funktioniert? dh hat Firefox Ihre durchsucht$PATH
und die Version in gefunden/usr/bin
, oder ist es (oder Ihr xdg-offenes Zeug) Hardcode/usr/bin/nautilus
? Die Installation einer eigenen Version von etwas in / usr / local funktioniert normalerweise./usr/bin/nautilus
scheint aber irgendwie fest codiert zu sein. Wenn es entfernt wird, macht Firefox nichts mehr, wenn ich versuche, den Download-Ordner zu öffnen, obwohl es einen Symlink zu meiner eigenen Version von Nautilus in gibt/usr/local/bin
. Meine$PATH
Variable ist/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
strace -f -efile,execve -o firefox_syscalls.txt firefox
zu sehen, was ff tut. Wenn Sie im Protokoll nach suchennautilus
, wird Ihnen möglicherweise etwas angezeigt. (-e
Dadurch werden die Systemaufrufe gefiltertexecve
und Open / Close / Pfadnamen-Dateien abgelegt, andernfalls wäre dies eine Flut vonfutex
Lese- / Schreibvorgängen für X11.)Antworten:
Ich würde die gepackte Version von Nautilus reparieren, was auf den ersten Blick entmutigend erscheinen mag, aber einfach genug ist - obwohl es Paket-Upgrades nicht überlebt, erfordert es etwas Disziplin. ( Einzelheiten finden Sie in Wouters Antwort .)
Der einfachste Ansatz in Ihrer Situation besteht darin, eine Ablenkung hinzuzufügen:
Dies weist Sie
dpkg
an, umzubenennen/usr/bin/nautilus
,/usr/bin/nautilus.original
wenn ein Paket versucht, es zu installieren. Dann können Sie Ihren eigenen Symlink hinzufügen, der auch nach dem Upgrade des Nautilus-Pakets unberührt bleibt. Führen Sie es aus, um es zu entfernenSie können dieselbe Technik auf jede andere Datei anwenden, die Sie auf ähnliche Weise ersetzen müssen, abgesehen von einigen Konfigurationsdateien, die beim Umleiten nicht korrekt behandelt werden.
quelle
Die beste langfristige Lösung besteht darin, die Nautilus-Entwickler zu kontaktieren und mit ihnen an einem Patch für den offiziellen Nautilus-Code zu arbeiten, sodass Sie sich nicht mehr darum kümmern müssen, sobald die aktualisierte Version von Nautilus auf Ihrem System verfügbar ist.
Angenommen, Sie haben dies getan, bis diese Änderung auf Ihr System übergreift, müssen Sie sich noch mit dem Problem befassen, dass Sie Ihre eigene gepatchte Version von Nautilus verwenden möchten.
Am einfachsten ist es, ein Paket von Nautilus mit Ihrem bereits angewendeten Patch zu erstellen und es so zu installieren, dass es nicht automatisch aktualisiert wird.
Unter Debian (das Sie gemäß den Tags in dieser Frage verwenden) ist der einfachste Weg, dies zu erreichen:
Dadurch wird ein neues Paket mit Ihrem Patch erstellt, installiert und anschließend in dpkg markiert, sodass es nicht mehr automatisch aktualisiert wird.
Wenn das nächste Mal eine aktualisierte Version des Pakets veröffentlicht wird, benachrichtigt apt Sie, dass eine aktualisierte Version vorhanden ist, diese jedoch zurückgehalten wird. Sie müssen dann die oben genannten Schritte erneut ausführen.
quelle
apt-mark hold packagename
ist die moderne Art, ein Paket zu halten. (Ich auch meinen eigenen gemachtdpkg-hold
/dpkg-unhold
Skripte indlocate
Gebrauchapt-mark
anstelle derdpkg --set-selections
Methode , die sie seit Jahren verwendet hatten. Die Skripte wegen apt-mark veraltet sind , aber ich habe noch andere Skripte , die sie nennen, und entferne sie von anderen Benutzern geschriebenen Skripte brechen könnten von das dlocate Paket)man apt-mark
sagtThe 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
, also denke ich, dass das eine Kleinigkeit ist ;-)