Encontrei um problema com o Nautilus, para o qual não encontrei outra solução além de baixar o código-fonte, fazer algumas alterações e compilá-lo por conta própria. Então agora eu tenho duas versões do nautilus, a versão oficial dos repositórios e a minha com algumas alterações. Eu gostaria de manter os dois.
Qual seria uma boa maneira de dizer aos aplicativos para usar minha própria versão compilada do Nautilus ao iniciar o Nautilus de dentro do aplicativo? (por exemplo, abrir a pasta Downloads com o Firefox)
Eu descobri que o firefox chama /usr/bin/nautilus
para que eu pudesse substituir isso por um link simbólico para o meu próprio programa. No entanto, acredito que esse link simbólico será substituído assim que eu instalar uma atualização para o Nautilus. Há mais alguma coisa que eu poderia fazer?
/usr/local/bin
não funcionou? ou seja, o firefox pesquisou o seu$PATH
e encontrou a versão no/usr/bin
código-fonte (ou o seu material xdg-open)/usr/bin/nautilus
? Instalar sua própria versão de algo em / usr / local normalmente funciona./usr/bin/nautilus
parece ser codificado de alguma forma. Se ele for removido, o Firefox não fará mais nada quando eu tentar abrir a pasta Downloads, embora exista um link simbólico para minha própria versão do nautilus in/usr/local/bin
. Minha$PATH
variável é/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
strace -f -efile,execve -o firefox_syscalls.txt firefox
para ver o que o ff faz. Se você pesquisar o lognautilus
, isso poderá mostrar uma coisa. (Isso-e
filtra o sistema solicitaexecve
e arquiva coisas de abrir / fechar / nome do caminho, caso contrário, seria uma inundaçãofutex
e leitura / gravação de soquete para o X11).Respostas:
Eu consertaria a versão empacotada do Nautilus, que pode parecer assustadora no começo, mas é bastante fácil - embora não sobreviva às atualizações de pacotes, portanto, requer alguma disciplina. (Veja a resposta de Wouter para obter detalhes.)
A abordagem mais simples na sua situação é adicionar um desvio:
Isso instruirá
dpkg
a renomear/usr/bin/nautilus
para/usr/bin/nautilus.original
sempre que um pacote tentar instalá-lo. Em seguida, você pode adicionar seu próprio link simbólico, e ele permanecerá intocado, mesmo quando o pacote Nautilus for atualizado. Para removê-lo, executeVocê pode aplicar a mesma técnica a qualquer outro arquivo que precise substituir de maneira semelhante, além de alguns arquivos de configuração que não são tratados corretamente quando desviados.
fonte
A melhor solução a longo prazo é entrar em contato com os desenvolvedores do nautilus e trabalhar com eles em um patch do código oficial do nautilus, para que uma vez que a versão atualizada do nautilus atinja seu sistema, você não precisará mais lidar com isso.
Supondo que você tenha feito isso, até que essa mudança chegue ao seu sistema, você ainda precisará lidar com a questão de querer usar sua própria versão corrigida do nautilus.
A maneira mais fácil é produzir um pacote de nautilus com seu patch já aplicado e instalá-lo de forma que não seja atualizado automaticamente.
No Debian (que de acordo com as tags nesta pergunta você está usando), a maneira mais fácil de conseguir isso é:
Isso cria um novo pacote com o seu patch, instala e marca-o no dpkg para que ele não seja mais atualizado automaticamente.
Na próxima vez que uma versão atualizada do pacote for lançada, o apt notificará que existe uma versão atualizada, mas que está sendo retida. Você precisa fazer o acima novamente.
fonte
apt-mark hold packagename
é a maneira moderna de segurar um pacote. (Eu até fiz minhas própriasdpkg-hold
/dpkg-unhold
roteiros emdlocate
usoapt-mark
em vez dodpkg --set-selections
método que tinha usado durante anos. Os scripts são obsoletos por causa do apt-marca, mas ainda tenho outros scripts que os chamam, e removê-los pode interromper scripts escritos por outros usuários o pacote dlocate)man apt-mark
dizThe 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
, então eu acho que é uma coisa menor ;-)