Como posso fazer o udisks-glue ser executado na inicialização e montar unidades como usuário específico?

3

Estou tentando fazer com que o udisks-glue funcione no meu Raspbian Raspberry Pi. Isso funciona bem se eu iniciar manualmente udisks-glue via ssh. No entanto, desejo iniciá-lo automaticamente na inicialização.

Assim, um script em /etc/init.d/udisks-glue inicia o daemon para mim (conforme as instruções aqui ). Isso funciona bem, mas os discos são montados com permissões de root ( drwx------ ). É possível fazer este script iniciar o daemon como usuário pi , não root ?

O que eu tentei

1) Modificando o script acima, substituindo

DAEMON="/usr/bin/udisks-glue" 

com

DAEMON="exec su - pi -c /usr/bin/udisks-glue"

Não foi possível executar.

2) Substituindo essa linha por uma referência a um script personalizado, que chama exec su - pi -c /usr/bin/udisks-glue . Quando conecto discos rígidos, eles não são montados. No entanto, há a aparência de processos em execução corretamente. Olhando para ps aux | grep [u]disks , posso ver udisks-glue sendo executado como pi (e dois udisks-daemon s sendo executados como root); Eu recebo o mesmo ps output se eu manualmente iniciar udisks-glue , como acima.

3) Eu tentei editar /etc/rc.local , adicionando a linha

su pi -c "/usr/bin/udisks-glue &"

Isso teve o mesmo resultado de (2), com udisks-glue sendo executado como pi , mas não funcional.

4) Conforme esta página , executando udisks-glue como root, mas dando permissões de montagens para todos. Isso funciona para sistemas de arquivos FAT, mas falha ao montar o ext4. (Eu preferiria que as montagens pertencessem ao usuário pi de qualquer maneira.)

    
por Sparhawk 08.07.2014 / 18:08

1 resposta

5

Eu tive o mesmo problema

Solução:

  1. Corrigindo sua configuração: crie o arquivo /etc/polkit-1/localauthority/50-local.d/50-mount-as-pi.pkla com o seguinte conteúdo:

    [Media mounting by pi]
    Identity=unix-user:pi
    Action=org.freedesktop.udisks.filesystem-mount
    ResultAny=yes
    
  2. Corrigindo seu script de inicialização:

    • adicione uma variável contendo o usuário que você gostaria de executar udisks-glue como:

      NAME=udisks-glue
      PIDFILE=/var/run/udisks.pid
      DAEMON="/usr/bin/udisks-glue"
      DAEMONUSER=pi <-- add this line
      
    • Modifique start-stop-daemon invocações para usar a variável $DAEMONUSER :

      start) 
          log_daemon_msg "Starting Automounter" "$NAME"
      --> start-stop-daemon --start --exec $DAEMON --chuid $DAEMONUSER
          log_end_msg $?
          ;;
      stop)  
          log_daemon_msg "Stopping Automounter" "$NAME"
      --> start-stop-daemon --stop --exec $DAEMON --user $DAEMONUSER
          log_end_msg $?
          rm -f $PIDFILE
          ;;
      

      (OBSERVAÇÃO: eu removi a parte -- -p $PIDFILE da primeira chamada. Sua conta de usuário comum provavelmente não terá permissões de gravação para /var/run , então você pode fazer o que eu fiz acima ou alterar a $PIDFILE variable para um caminho gravável pelo seu usuário regular.)

Comentários sobre os passos que você deu:

  1. Isso não poderia ter funcionado. A variável $DAEMON é usada como um argumento para --exec em uma invocação de start-stop-daemon . Esse argumento deve ser um executável , enquanto exec é um shell embutido .

  2. Isso quebrou seu script de inicialização. Ao iniciar udisks-glue dessa forma funcionou, pará-lo não seria como start-stop-daemon tentaria parar /path/to/your/helper/script.sh em vez do daemon real ( /usr/bin/udisks-glue ). Colocando isso de lado, quando você inicia udisks-glue no modo daemon, ele não gera mensagens de depuração. Se você executou o seguinte comando em um shell interativo:

    # su pi -c "/usr/bin/udisks-glue -f"
    

    você provavelmente veria algo como:

    Device file /dev/sdb1 inserted
    Trying to automount /dev/sdb1...
    Failed to automount /dev/sdb1: Not Authorized
    Device file /dev/sdb inserted
    

    que explicaria por que suas unidades não estão montadas.

  3. Isso era efetivamente o mesmo que 2. Uma observação extra: o e comercial ( & ) no final era redundante, pois udisks-glue daemoniza por padrão.

  4. Novamente, executar udisks-glue em primeiro plano explicaria o problema dos sistemas de arquivos não-FAT:

    Device file /dev/sdb1 inserted
    Trying to automount /dev/sdb1...
    Failed to automount /dev/sdb1: Mount option dmask=0 is not allowed
    Device file /dev/sdb inserted
    

    Observe também que, se você quiser alterar o proprietário de um ponto de montagem ext4, precisará chown após a montagem.

por 10.07.2014 / 11:43