Encontré un problema con Nautilus para el cual no encontré otra solución que no sea descargar el código fuente, hacer algunos cambios y compilarlo por mi cuenta. Así que ahora tengo dos versiones de nautilus, la versión oficial de los repositorios y la mía con algunos cambios. Me gustaría conservar los dos.
¿Cuál sería una buena manera de decirle a las aplicaciones que usen mi propia versión compilada de Nautilus al iniciar Nautilus desde la aplicación? (por ejemplo, abrir la carpeta de Descargas con firefox)
Descubrí que Firefox llama /usr/bin/nautilus
para poder reemplazar esto con un enlace simbólico a mi propio programa. Sin embargo, creo que este enlace simbólico se sobrescribirá tan pronto como instale una actualización para Nautilus. ¿Hay algo más que pueda hacer?
/usr/local/bin
no funcionó? Es decir, ¿Firefox buscó$PATH
y encontró la versión en él/usr/bin
, o lo hace (o sus cosas xdg-open) en código duro/usr/bin/nautilus
? Instalar su propia versión de algo en / usr / local normalmente funciona./usr/bin/nautilus
parece estar codificado de alguna manera. Si se elimina, firefox ya no hace nada cuando intento abrir la carpeta Descargas, aunque hay un enlace simbólico a mi propia versión de nautilus en/usr/local/bin
. Mi$PATH
variable es/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
strace -f -efile,execve -o firefox_syscalls.txt firefox
para ver qué hace ff. Si busca en el registronautilus
, eso podría mostrarle algo. (Eso-e
filtra las llamadas del sistemaexecve
y el archivo abierto / cerrado / nombre de ruta, de lo contrario sería una inundación defutex
lectura / escritura de socket para X11).Respuestas:
Arreglaría la versión empaquetada de Nautilus, que puede parecer desalentador al principio pero es bastante fácil, aunque no sobrevive a las actualizaciones de paquetes, por lo que requiere cierta disciplina. (Ver la respuesta de Wouter para más detalles).
El enfoque más simple en su situación es agregar un desvío:
Esto le dará instrucciones
dpkg
para cambiar el nombre/usr/bin/nautilus
a/usr/bin/nautilus.original
cada vez que un paquete intenta instalarlo. Luego puede agregar su propio enlace simbólico, y permanecerá intacto incluso cuando se actualice el paquete Nautilus. Para eliminarlo, ejecutaPuede aplicar la misma técnica para cualquier otro archivo que necesite reemplazar de manera similar, aparte de algunos archivos de configuración que no se manejan correctamente cuando se desvían.
fuente
La mejor solución a largo plazo es contactar a los desarrolladores de nautilus y trabajar con ellos en un parche para el código oficial de nautilus, de modo que una vez que la versión actualizada de nautilus llegue a su sistema, ya no tendrá que lidiar con esto.
Suponiendo que haya hecho eso, hasta que ese cambio llegue a su sistema, aún tendrá que lidiar con el problema de querer usar su propia versión parcheada de nautilus.
La forma más fácil es producir un paquete de nautilus con su parche ya aplicado e instalarlo de tal manera que no se actualice automáticamente.
En Debian (que según las etiquetas de esta pregunta que está utilizando), la forma más fácil de lograrlo es:
Esto crea un nuevo paquete con su parche, lo instala y luego lo marca en dpkg para que ya no se actualice automáticamente.
La próxima vez que se lance una versión actualizada del paquete, apt le notificará que existe una versión actualizada, pero que se está reteniendo. Luego debe hacer lo anterior nuevamente.
fuente
apt-mark hold packagename
es la forma moderna de sostener un paquete. (Incluso hice mis propiosdpkg-hold
/dpkg-unhold
scripts endlocate
uso enapt-mark
lugar deldpkg --set-selections
método que habían usado durante años. Los scripts son obsoletos debido a apt-mark pero todavía tengo otros scripts que los llaman, y eliminarlos podría romper los scripts escritos por otros usuarios de el paquete dlocate)man apt-mark
diceThe 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
, así que creo que es algo menor ;-)