Como criar um script para montar automaticamente minha unidade do OneDrive no Dolphin

Eu instalei o Rclone e configurei minha conta do OneDrive com sucesso, seguindo esse vídeo tutorial.
No final ele comenta que criou um script para montar automaticamente a unidade no Dolphin, porém eu não faço ideia de como criar e executar esse script na inicialização do Manjaro :frowning:

Há N maneiras de fazer isso, de acordo com o seu ambiente gráfico (e mais ainda se você usar um WM) – por isso ele deixou como um exercício para o leitor :sweat_smile: . Recomendaria olhar se ele não possui uma interface “fácil” em que você pode simplesmente jogar o caminho script.

Enquanto isso, vai o método “terminal” praticamente universal (o exemplo envolve outro programa, mas é só adaptar as linhas Name e Exec).

2 curtidas

@Capezotte estou usando Manjaro com KDE Plasma 6.3.4.

Notei no vídeo que a pasta do “OneDrive” está montada na categoria “Dispositivos” do “Dolphin”, então pensei que se eu fosse até “Configurações do sistema => Discos e câmeras => Montagem automática de dispositivos” eu enxergaria a unidade “OneDrive” , em “Dispositovos conectados” e marcaria a opção de “Na inicialização”, mas infelizmente nãoo é tão facil assim… :sob:

Crie um arquivo de texto com o conteúdo do script do vídeo (rclone ...), salve-o e marque como executável nas permissões (igual você faria com um programa baixado da internet).

Abra as configurações do sistema, vá em “Sistema → Iniciar Automaticamente”. Clique em “Adicionar novo → Script de início de sessão”, e selecione o arquivo que você criou na etapa anterior.

2 curtidas

@Capezotte , ao executar o script, aparece a notificação como esperado, mas o OneDrive não é montado!

O que estou fazendo de errado?

Em termos de conteúdo e permissões do arquivo, nada, tanto que a segunda linha do script roda.

Qual a saída ao copiar e colar a linha com rclone ..., tirando o & no final, e rodar no terminal? Qual o processo que você normalmente usa para montar o OneDrive manuamente?


Do jeito que o script está montado, a mensagem de “Montado com sucesso” sai independente do real sucesso do comando, ou mesmo do comando estar instalado.

Daria para adaptar para as mensagens de erro que normalmente vão para o terminal saírem na notificação, mas são outros 500 e como fazer exatamente varia de acordo com o comportamento do programa…

1 curtida

@Capezotte , por algum motivo nem colando diretamente no terminal está dando certo :sob:

Tradução da mensagem de erro:

CRÍTICO: Erro fatal: falha ao montar o sistema de arquivos FUSE: “/home/usuario/OneDrive” não está vazio, use --allow-non-empty para montar mesmo assim

Se a pasta não estiver já sincronizando, provavelmente em algum momento você colou arquivos nela sem querer. Abra a pasta, mova os arquivos para outro lugar (aperte Ctrl+H para ver os arquivos ocultos também), e rode o comando/script novamente.

Isso, ou adicione adicione --allow-non-empty depois do rclone para ignorar essa condição, porém não recomendaria fazer isso, pois você vai perder a pasta vazia como indicador de que a montagem falhou.


Dei uma lida na documentação do programa e acredito que o script poderia ficar assim:

#!/bin/sh
#
# Passando --daemon para o programa, em vez de usar o palavra-chave `&` do
# shell, o próprio programa vai ao fundo, no próprio tempo.
# Isso traz dois benefícios:
# 1. O script "se segura" até ter certeza de que o programa de fato existe e
#    foi executado.
# 2. Podemos usar o if/&&/|| para reagir a erros (enquanto na versão com `&` a
#    mensagem sai independente, com ou sem sucesso)
#
if rclone --daemon --vfs-cache-mode=writes mount OneDrive: ~/OneDrive; then
  notify-send "OneDrive conectado" "Microsoft OneDrive montado com sucesso!"
else
  notify-send "Falha ao montar OneDrive!" "Rode o comando manualmente e analise a mensagem de erro"
fi

EDIT: acrescentado um igual no script.

Ainda não mostra a mensagem de erro exata, mas pelo menos sinaliza corretamente se deu certo ou errado.

1 curtida

@Capezotte, você tem razão, havia um arquivo oculto e tenho quase certeza da origem desse arquivo, como alterei o ícone da pasta, para o ícone de uma pasta com nuvem, deve ter criado esse arquivo, pois foi só eu remover o arquivo, que a pasta voltou para o ícone de pasta padrão, executei o script e a unidade de rede foi montada!

Será que se eu fizer o upload desse arquivo oculto para minha conta do OneDrive via web, quando eu iniciar o sistema, a unidade for montada automaticamente, esse arquivo puxado para a pasta OneDrive do PC, o ícone da pasta será alterado para o ícone de pasta com nuvem?

Algo que achei estranho que no vídeo, o OneDrive dele foi montado na categoria de “Dispositivos” com o ícone de um pendrive, representando uma unidade USB, já o meu está sendo montado na categoria “Rede”.

Não sei dizer. A princípio acredito que sim, porém fiz um breve teste usando o backend local (de uma pasta para outra da mesma máquina) dele e não funcionou.

O vídeo tem praticamente dois anos, pode ser que esse comportamento tenha mudado desde então. Acho até que o comportamento atual faz mais sentido, pois você está montando, bem, um conjunto de arquivos hospedados remotamente.

2 curtidas

Não garante que o OneDrive foi montado com sucesso antes de mostrar a notificação. Isso porque:

O comando rclone… está sendo executado em segundo plano (&).

notify-send é executado logo em seguida, sem saber se o rclone realmente conseguiu montar.

Tem como corrigir esse bug.

Outro ponto importante é se existe registros de vazamentos de dados envolvendo o Rclone?

Por padrão, as credenciais armazenadas no arquivo rclone.conf são legíveis.

Dica: Pode chama o rclone na inicialização do sistema.

1 curtida

@Capezotte, upei o arquivo “.directory” no OneDrive via Web e infelizmente não funcionou.
Como ficaria o script ao acrescentar --allow-non-empty para ignorar o arquivo “.directory” no momento da montagem do OneDrive?

Qual a função do = que você acrescentou?

Basta colocar essa palavra logo depois de rclone. Isso vale para qualquer opção (“palavra” que começa com hífen e sinaliza para o programa mudar de comportamento).

Porém, não adiantaria. Devido à natureza da operação de montar, o .directory da pasta original (todo o conteúdo dela, na verdade) iria ficar inacessível e o Dolphin pararia de mostrar o ícone. O arquivo (e o ícone) só voltariam se você desmontasse a pasta, mas daí não daria para usar o OneDrive :stuck_out_tongue:

Achei um relato de um usuário com o mesmo problema, e os desenvolvedores do rclone não veem solução para esse problema que não envolva tornar o rclone desnecessariamente complicado.

Logo deveria ser levado aos desenvolvedores do KDE para ver o que eles acham. Concordo que é muito estranho: nos meus testes espelhando uma pasta de um lado pro outro, a pasta original tem o ícone, mas o espelho não…

Esse igual não era para ser necessário, parece haver um bug em como o rclone analisa as opções.

Tangente de shell script

Convencionalmente, programas são chamados em scripts nesse formato:

programa opções argumentos
rclone --vfs-cache-mode writes mount OneDrive: ~/OneDrive
rclone --daemon --vfs-cache-mode=writes mount OneDrive: ~/OneDrive

No caso do rclone, a primeira palavra dos argumentos deve ser um “comando”.

Quando há uma opção longa (que começa com dois hífens, no caso --vfs-cache-mode) que pede um complemento (aqui, writes), essas duas formas de expressar devem ser equivalentes:

# duas "palavras", separadas por espaço
rclone --vfs-cache-mode writes mount OneDrive: ~/OneDrive
# numa "palavra" só, unidos por `=`
rclone --vfs-cache-mode=writes mount OneDrive: ~/OneDrive

No código do vídeo, tanto faz escrever qualquer uma dessas linhas.

Igualmente, as duas linhas a seguir deveriam ser equivalentes:

rclone --daemon --vfs-cache-mode writes mount OneDrive: ~/OneDrive
rclone --daemon --vfs-cache-mode=writes mount OneDrive: ~/OneDrive

A versão sem = não funcionou, alegando que:

comando desconhecido writes

A análise que ele fez foi:

programa opções argumentos
rclone --vfs-cache-mode writes mount OneDrive: ~/OneDrive

Porém, isso é contraditório, no manual diz que --vfs-cache-mode precisa de um complemento; obviamente writes é o complemento. Com o = contornamos o bug pois o programa não tem que pensar se a palavra writes é o primeiro argumento (e portanto, o “comando”), ou um complemento para a última opção, ela já está unida à opção que ela complementa.

1 curtida