Autor Tópico: Montando e Desmontando USB automaticamente no Ubuntu  (Lida 2629 vezes)

Offline GuiEdington

  • Usuário Ubuntu
  • *
  • Mensagens: 31
    • Ver perfil
Montando e Desmontando USB automaticamente no Ubuntu
« Online: 25 de Abril de 2014, 06:46 »
Olá Pessoal,

Essa dica solucionou um grande problema que eu estava tendo com dispositivos usb, agora estou passando para o fórum.

É o seguinte, primeiro você irá precisar de dois pacotes chamados udev e pmount. Você pode acha-los no gerenciador de pacotes do Synaptic (No meu caso estou usando Ubuntu 12.04).
Agora precisamos criar um documento que sirva como um procedimento que o seu sistema deverá executar quando você plugar algum dispositivo USB. Use o comando:

Código: [Selecionar]
sudo gedit /etc/udev/rules.d./automount.rules
Agora nesse novo arquivo criado cole este código:
Código: [Selecionar]
# We wrap commands into calls to /bin/sh because PROGRAM and RUN
# accept only single commands, not command lists.
# PROGRAM figures out the label of the disk. Caching only gets in a
# way, returning old labels instead of querying for new ones, so we
# disable it. We use sed to replace non-alphanumeric symbols with
# underscore to facilitate readability and "typeability".
# RUN mounts the disk with specified label.
ACTION=="add",    KERNEL=="sd[b-z]*", PROGRAM="/bin/sh -c '/bin/sleep 2; /sbin/blkid -c /dev/null -s LABEL -o value /dev/%k | /bin/sed -r s#[^a-zA-Z0-9-]#_#g'", RUN+="/bin/sh -c '/bin/sleep 3 ; /usr/bin/pmount --umask 000 --noatime --charset utf8 %k %c'"
ACTION=="remove", KERNEL=="sd[b-z]*", RUN+="/usr/bin/pumount %k"

# the same as above, but for memory cards
ACTION=="add",    KERNEL=="mmcblk*", PROGRAM="/bin/sh -c '/bin/sleep 3; /sbin/blkid -c /dev/null -s LABEL -o value /dev/%k | /bin/sed -r s#[^a-zA-Z0-9-]#_#g'", RUN+="/bin/sh -c '/bin/sleep 4 ; /usr/bin/pmount --umask 000 --noatime --charset utf8 %k %c'"
ACTION=="remove", KERNEL=="mmcblk*", RUN+="/usr/bin/pumount %k"

Pronto, seus pendrives ou cartões SD serão reconhecidos automaticamente quando você pluga-los. Pórem eu enfrentei outro problema pois eles ainda não desmontavam sozinhos, então eu tinha que desmontar manualmente sempre antes de retirar. Mas procurando novamente pela internet achei este outro código que solucionou o problema.

Primeiro vamos criar outro documento:

Código: [Selecionar]
sudo gedit /etc/udev/rules.d/80-usb-autounmount.rules
Agora vamos colar esse código no documento:
Código: [Selecionar]
# Auto-unmount USB storage (on remove):
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd??", RUN+="/usr/bin/logger  auto umounting  %k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd??", RUN+="/bin/umount /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd??", RUN+="/bin/umount -lf /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd???", RUN+="/usr/bin/logger  auto umounting  %k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd???", RUN+="/bin/umount /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd???", RUN+="/bin/umount -lf /dev/%k"*

Salve e pronto. Tudo beleza, depois de ter criado esse novo documento meus pendrives se desmontavam sozinhos, mas minha entrada de cartão SD continuava montada. Então eu adicionei uma nova linha ao código acima. Primeiro fui ao terminal para saber qual era o nome da minha entrada de cartão SD:

Código: [Selecionar]
sudo blkid
Código: [Selecionar]
/dev/sda1: UUID="f4e3a629-fc22-4a2f-a9d6-5becdf3cca73" TYPE="ext4"
/dev/sda3: LABEL="Arquivos" UUID="D628441C2843F9CF" TYPE="ntfs"
/dev/sda5: UUID="591a8599-583a-4aad-8f37-310e77438e80" TYPE="swap"
/dev/sda6: UUID="20A45785A4575C7A" TYPE="ntfs"
/dev/mmcblk0p1: UUID="3230-3664" TYPE="vfat"

Descobrindo o nome na ultima linha "mmcblk0p1" adicionei essa nova linha no meu codigo de desmontar automaticamente:
Código: [Selecionar]
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/mmcblk0p1", RUN+="/bin/umount /dev/%k"
Agora sim, tudo funcionando perfeitamente! O codigo ficou dessa forma:
Código: [Selecionar]
# Auto-unmount USB storage (on remove):
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd??", RUN+="/usr/bin/logger  auto umounting  %k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd??", RUN+="/bin/umount /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd??", RUN+="/bin/umount -lf /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd???", RUN+="/usr/bin/logger  auto umounting  %k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd???", RUN+="/bin/umount /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/mmcblk0p1", RUN+="/bin/umount /dev/%k"
ACTION=="remove", SUBSYSTEM=="block", ENV{DEVNAME}=="/dev/sd???", RUN+="/bin/umount -lf /dev/%k"*

Bom, depois disso tudo passou a funcionar como eu queria. Devo muito a minhas fontes: Martin Monperrus, Minoru e Radu Rădeanu.

Qualquer melhoria ou opinião é bem vinda.

Offline galactus

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.683
    • Ver perfil
Re: Montando e Desmontando USB automaticamente no Ubuntu
« Resposta #1 Online: 26 de Abril de 2014, 17:10 »
Hum mm esse tópico não estaria melhor no Dicas e truques?

Nunca passei por este problema, mas é uma ótima dica.
Kubuntu 21.10 / Linux Mint XFCE 20.2